Добрый день!
Есть скрипт на python, который подключается к впн через сервис expressvpn, который в свою очередь переписывает файл /etc/resolv.conf и приводит его к виду:
# Generated by expressvpn
search expressvpn
nameserver 10.141.0.1
После подключения к гео (проходит по списку) скрипт запрашивает хэдеры с сайта, но часто возникает ошибка:
HTTPConnectionPool(host='domain.com', port=80): Max retries exceeded with url: / (Caused by NewConnectionError('<urllib3.connection.HttpConnection object at 0x7f0fd5234c18>: Failed to establish a new connection: [Errno -3] Temporary failure in name resolution'))
и после не работают ни curl, ни wget, ни ping. Но если я приведу /etc/resolv.conf к виду:
nameserver 8.8.8.8
то консольные команды работают (скрипт при этом не останавливается и продолжает отправлять запросы к сайту, но ошибка не уходит)
В этой связи возникает вопрос: можно ли указать свой DNS-сервер, чтобы python отправлял запросы ТОЛЬКО через него, не обращаясь к файлу /etc/resolv.conf?
Запрос хэдеров
def get_headers():
for_write = []
try:
print('getting headers...')
with requests.Session() as sess:
head = sess.get("http://domain.com", timeout=60)
print('get is complete!')
for_write.append(head.headers['x-geo-detected'])
for_write.append(head.headers['x-monitor'])
with open("log.txt","a+") as f:
f.write(str(for_write) + "\n")
return True
except BaseException as exc:
print(exc)
for_write.append('Don\'t get headers from domain.com with ' + str(exc))
with open("log.txt","a+") as f:
f.write(str(for_write) + "\n")
return False
def main():
open("log.txt","w").close()
while True:
with open ("country_final.txt", "r") as country:
for geo in country:
i = 0
geo = geo.replace("\n","")
connect(geo)
time.sleep(10)
status()
gh = get_headers()
while gh == False:
i += 1
print('headers is False! Reconnecting...')
disconnect()
time.sleep(10)
connect(geo)
time.sleep(10)
gh = get_headers()
if i == 10:
break
disconnect()
send_log()
if __name__ == "__main__":
main()
PS: в python не умею, это первый опыт пользования языком, пошла третья неделя "жизни" скрипта)