Страницы

Поиск по вопросам

Показаны сообщения с ярлыком proxy. Показать все сообщения
Показаны сообщения с ярлыком proxy. Показать все сообщения

четверг, 13 февраля 2020 г.

Написание прокси-сервера для чайника

#сервер #proxy #кэширование #прокси


В прошлом вопросе (Вопрос) я выяснил , что для запроса погоды мне нужен прокси сервер,
который будет кэшировать данные с погодного сервера. Писать сервер придется мне самому,
но до этого ни с чем подобным не сталкивался (серверной частью). Писать решил на python
3. Можете ли ткнуть в литературу или дать ссылки как можно реализовать такой кэширующий
сервер, и правильно ли я вообще выбрал python?
    


Ответы

Ответ 1



«По-науке» эта конструкция называется «Обратный прокси» (reverse proxy). У вас есть некоторый backend-сервер, который генерирует какие-то полезные данные, и есть frontend-сервер, который кеширует на себе редкоизменяемые данные. Такая схема чаще используется, для кеширования локальных ресурсов какого-нибудь сайта, чтобы не гонять данные лишний раз, через основной backend-сервер. В вашем случае backend-сервером будет погодный сервер. Если, логику формирования запросов клиенты возьмут на себя, то проще будет использовать некий уже готовый и отлаженный web-сервер. В принципе, тут подойдет любой (nginx, lighttpd, apache, Ваш собственный). Чаще всего для таких целей используют nginx. Он весьма шустр и достаточно прост в настройке. Вот, например, настройки для nginx: http://reviewsignal.com/blog/2013/08/29/reverse-proxy-and-cache-server-with-nginx/ http://ashep.org/2011/nginx-obratnyj-proksi-server/#.V6ECut_XfmE Официальная документация: https://www.nginx.com/blog/nginx-caching-guide/ В итоге у вас получится что-то вроде: events { worker_connections 8096; multi_accept on; use epoll; } http { proxy_cache_path /tmp/cache levels=1:2 keys_zone=cache:60m max_size=1G; server { listen 80; server_name your-proxy-server-name.com; location / { proxy_pass http://any-weather-server.com; proxy_redirect off; proxy_set_header Host $host; proxy_cache STATIC; proxy_cache_valid 200 1d; proxy_cache_use_stale error timeout invalid_header updating \ http_500 http_502 http_503 http_504; } } } Тут надо будет внимательно отнестись к заголовкам, которые ожидает сервер погоды от вас. Вероятно, вам придется немножко поколдовать с proxy_ignore_headers proxy_hide_headers proxy_set_headers Подобную проблему обсуждают тут: https://stackoverflow.com/questions/9230812/nginx-as-cache-proxy-not-caching-anything Заголовки, вам придется настраивать в любом случае, в том числе и если frontend-сервер будете писать сами. Если писать самому, я думаю, было бы проще найти некоторое готовое решение, и его переиспользовать. Например, достаточно просто это сделать с помощью tornado. А в качестве кеша использовать наример memcached или redis. https://stackoverflow.com/questions/16524545/how-to-write-a-web-proxy-in-python

воскресенье, 2 февраля 2020 г.

Возможно ли вычислить реальный IP?

#proxy #ipv6


Интересует возможность вычислить реальный IP пользователя (когда тот использует прокси
IPv6) если у него отключено почти всё (Flash, Java...). Всё кроме JS.
    


Ответы

Ответ 1



Если прокси по настоящему анонимный и человек использует правильное ПО, вы попадаете в настоящий бесперспективняк в решении данной проблемы, хотя не анонимные прокси могут прокидывать при запросе различные заголовки типа X-Forwarded-For где содержиться реальный IP. Давайте рассмотрим причины, почему ваши попытки бесперспективны при настоящем анонимном Proxy сервере и правильно настроенном ПО: JS - клиентский язык, не имеет доступа к оборудованию, если его не предоставляет сам браузер через технологии и плагины. Прокси-сервер может хранить всю информацию о подключении, но вы ее не получите без разрешения владельца. Есть возможность использовать не просто прокси, а цепочку прокси-серверов расположенных в разных странах, тогда процесс обращения к одному владельцу прокси уже не пройдет. Конечным IP всегда является тот, с которого произведен запрос, в данном случае это прокси сервер. Получается что реальный IP узнать нельзя, но его можно узнать через различные уязвимости в ПО или программном обеспечении которое хотело сделать этот мир лучше используя весь потенциал технологий, так вот к такому относиться webRTC..Часто пользователи о ней даже не знают и не подозревают что она включена. Есть возможность утащить реальный IP и даже локальный IP через утечку адреса в технологии webRTC (webRTC ip leak), если пользователь не отключил у себя ее в браузере или имеет клиентское ПО поддерживающее данный протокол. Технология WebRTC была создана разработчиками Google для быстрой передачи и защиты конфиденциальной информации с использованием браузера, не устанавливая никаких дополнительных программ и расширений. Демонстрация работы утечки скрытого IP продемонстрирована на проекте в Github

Ответ 2



Думаю что на этот вопрос вы не найдёте ответ сдесь, поищите тут ! В принципе дело практики и знание технологий, которые позволяют находить "дыры" или как выше сказанное "утечки". Советую найти книги про сетевые протоколы, таких пално. Сначало надо понимать саму работу IP протокола, потом его отслеживать. Но при использовании нескольких VPN как цепочку, навряд ли удастся отследить без согласия поставшика IP адресса и сериозной программы. Вообше дело сериозное пробуйте на cyber форумах как по ссылке выше.

пятница, 27 декабря 2019 г.

Авторизация в squid только при обращении к определенному адресу

#squid #proxy #linux


Возможно ли сделать авторизацию в squid только если клиент обращается к определенному
адресу? Если да, то как?    


Ответы

Ответ 1



acl restricted_site dstdomain .somedomain.ru acl users proxy_auth user1 user2 или acl users external nt_group squid_users, смотря как настроено. http_access allow restricted_site users http_access allow all

суббота, 14 декабря 2019 г.

Как сменить прокси сервер через cmd?

#windows #cmd #proxy


Например, был 92.125.644.5:80, а поставить 97.352.0.3:80. Или как через реестр можно
поменять?    


Ответы

Ответ 1



Видимо речь идёт о NETSH Вот что нагуглил для win7, для более ранних версий Windows может не работать. netsh winhttp show proxy netsh winhttp set proxy 97.352.0.3:80 netsh winhttp reset proxy

Ответ 2



Регфайл для IE REGEDIT4 [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings] "ProxyServer"="97.352.0.3:80" [HKEY_USERS\.DEFAULT\Software\Microsoft\Windows\CurrentVersion\Internet Settings] "ProxyServer"="97.352.0.3:80" Первая ветка для текущего пользователя, вторая по-умолчанию для новых пользователей.

среда, 11 декабря 2019 г.

разница между http и https в словаре прокси

#python #python_3x #proxy #requests


Всем привет! Возник вопрос: в документации к requests указано, что нужно явно указывать
какие это прокси (http или https) :

'http': 'http://10.10.1.10:3128',
'https': 'http://10.10.1.10:1080',


можно ли везде указывать например только http? будет ли прокси работать вот так:

'http': 'http://10.10.1.10:3128',
'http': 'http://10.10.1.10:1080',


ведь чаще всего в базе прокси все намешано- и http и https, и к каждой уточнять-
неудобно. 
    


Ответы

Ответ 1



Можно, но тогда сайт, работающий только с https, проигнорирует все Ваши http. Так что, лучше указывать и http, и https.

вторник, 10 декабря 2019 г.

не работает socks5 proxy в связке Python3 Selenium3 Phantomjs2

#python #proxy #selenium #phantomjs #socks5


Вот код который пытаюсь выполнить:

from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
import time

ua = dict(DesiredCapabilities.PHANTOMJS)
ua["phantomjs.page.settings.userAgent"] = ("Mozilla/5.0 (Windows NT 10.0; Win64;
x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.59 Safari/537.36")
service_args = ['--proxy=109.228.147.75:45554','--proxy-type=socks5','--load-images=false','--ignore-ssl-errors=true']
browser = webdriver.PhantomJS(desired_capabilities=ua, service_args=service_args)
browser.set_window_size(1920, 1080)
browser.get('http://www.ip-adress.com/')
time.sleep(10)
browser.save_screenshot('screen_test.png')


Если использовать socks5, то при выполнении кода PhantomJS не может загрузить сайт,
оставаясь в подвешенном состоянии, можно ждать вечность и ничего не произойдёт. Если
завершить процесс PhantomJS то IDLE прервётся на команде:

browser.get('http://www.ip-adress.com/')


В Мозиле (не в коде, а просто в окне) с этим же proxy сайт открывается.

Если заменить прокси на https тип, то всё заработает.

Однако, через socks5 загружается http://example.com/. То есть только он. Ни один
другой сайт не грузится. => Из-за этого подозреваю что проблема с DNS запросами, но
как это фиксить?

Python 3.5 / Selenium 3.0.1 / PhantomJS 2.1.1
    


Ответы

Ответ 1



Всё дело в самом proxy. Я так до конца и не понял в чём всё же фишка, но как итог, нужно проверять proxy на работающий DNS Forwarding. Просто работающих соксов много, а вот с адекватным DNS F мне как-то попалось значительно меньше. Как я понял, PhantomJS при использовании socks5 по умолчанию использует DNS Forwarding, по этому и ждёт, когда-же сервер ему ответит. Однако настройки как в Мозиле: у Фантома нет, и отключить проксирование DNS запросов у Фантома нельзя. Хотя я не исключаю, что не прав до сих пор, и реально ответ в другом. Спасибо))

вторник, 16 июля 2019 г.

Использовать прокси с авторизацией, через Selenium на java

Задача: запустить браузер с подключение через прокси для подключения к которому необходимо проходить аутентификацию.

Для установки прокси в браузере вручную, прописываю адрес и порт в настройках соединения браузера. После этого, при первом доступе к любому серверу в браузере вылезает диалоговое окно для прохождения авторизации (basic authorization). После ее прохождения все запросы проходят через прокси.
В селениуме пробовал делать так:
org.openqa.selenium.Proxy proxy = new org.openqa.selenium.Proxy(); proxy.setHttpProxy(":@

:"); proxy.setSslProxy(":@
:"); DesiredCapabilities capabilities = DesiredCapabilities.firefox(); capabilities.setCapability(CapabilityType.PROXY, proxy); WebDriver driver = new FirefoxDriver(capabilities);
В этом случае в конфигурации подключения браузера на место адреса прокси устанавливается , а порт дэфолтный ( ноль ). Если дописать http://, то вместо адреса вставляется http, а порт ноль.

И еще, пробовал так:
org.openqa.selenium.Proxy proxy = new org.openqa.selenium.Proxy(); proxy.setHttpProxy("
:"); proxy.setSslProxy("
:"); DesiredCapabilities capabilities = DesiredCapabilities.firefox(); capabilities.setCapability(CapabilityType.PROXY, proxy); WebDriver driver = new FirefoxDriver(capabilities);
В этом случае адрес и порт прописываются правильно и после запуска браузера (на строке WebDriver driver = new FirefoxDriver(capabilities);) появляется диалоговое окно с текстом Прокси «moz-proxy://
:» запрашивает имя пользователя и пароль. Сайт сообщает: «proxy» и полями для ввода логина и пароля, выполнение программы приостанавливается, что не дает возможность воспользоваться созданным объектом driver для переключения на окно и ввести логин и пароль (driver.switchTo().alert()....).

Также нагуглил вариант:
org.openqa.selenium.Proxy proxy = new org.openqa.selenium.Proxy(); proxy.setHttpProxy("
:"); proxy.setSslProxy("
:"); proxy.setSocksUsername(""); proxy.setSocksPassword(""); DesiredCapabilities capabilities = DesiredCapabilities.firefox(); capabilities.setCapability(CapabilityType.PROXY, proxy); WebDriver driver = new FirefoxDriver(capabilities);
Но результат такой-же как и во втором случае.

Работать должно как минимум в Firefox, а в идеале еще и в PhantomJS. В принципе, не будет лишней поддержка Chrome, но это не обязательно.

Update
Неужели никто не сталкивался с таким?
Я пробовал использовать еще такой вариант:
DesiredCapabilities capabilities = new DesiredCapabilities(); // DesiredCapabilities.firefox(); FirefoxProfile profile = new FirefoxProfile(); profile.setPreference("network.proxy.type", 1); profile.setPreference("signon.autologin.proxy" , true); profile.setPreference("network.websocket.enabled", false); profile.setPreference("network.proxy.share_proxy_settings", false); profile.setPreference("network.automatic-ntlm-auth.allow-proxies", false); profile.setPreference("network.http.phishy-userpass-length", 255); profile.setPreference("network.auth.use-sspi", false); profile.setPreference("network.proxy.http", "
"); profile.setPreference("network.proxy.http_port", ); profile.setPreference("network.proxy.ssl", "
"); profile.setPreference("network.proxy.ssl_port", ); capabilities.setCapability(FirefoxDriver.PROFILE, profile); org.openqa.selenium.Proxy proxy = new org.openqa.selenium.Proxy(); proxy.setProxyType(ProxyType.MANUAL); proxy.setSocksUsername(""); proxy.setSocksPassword(""); capabilities.setCapability(CapabilityType.PROXY, proxy); WebDriver driver = new FirefoxDriver(capabilities); driver.get("http://2ip.ru");
Если устанавливать конфигурацию прокси через профайл фаерфокса ( profile.setPreference(...) ), то окно для авторизации через прокси появляется немного раньше окна браузера (браузер запускается примерно за 1 секунду, а окно для авторизации появляется примерно на пол секунды раньше) и при этом, в отличии от вариантов реализации из предыдущего сообщения, не блокирует главное окно (которое запускается/отображается немножко позже). Также в этом варианте выполнение программы не приостанавливается на строке создания драйвера (new FirefoxDriver(capabilities);). Программа приостанавливается на строке driver.get("http://2ip.ru"); , браузер при этом ожидает ответ от 2ip.ru, до тех пор пока я не введу вручную данные для авторизации прокси, если авторизация не удалась, то вместо запрошенной страницы получаю сообщение - "Прокси-сервер отказывается принимать соединения".
Вопрос: как можно получить доступ к окну авторизации для дальнейшего ввода логина и пародя или как пройти авторизацию на прокси сервере не выводя окно для авторизации ( примерно как я пробовал: proxy.setSocksUsername(""); proxy.setSocksPassword("" ); )?


Ответ

Решил через AutoItX4Java:
private void mozProxyAuth(String login, String password) { String JACOB_DLL_TO_USE = System.getProperty("sun.arch.data.model").contains("32") ? "jacob-1.18-x86.dll" : "jacob-1.18-x64.dll"; File file = new File(System.getProperty("user.dir"), JACOB_DLL_TO_USE); System.setProperty(LibraryLoader.JACOB_DLL_PATH, file.getAbsolutePath()); AutoItX x = new AutoItX(); if (x.winWait("Требуется аутентификация", null, 10)) { x.winActivate("Требуется аутентификация"); x.send(login + "{TAB}" + password + "{ENTER}", false); } }

понедельник, 22 апреля 2019 г.

Написание прокси-сервера для чайника

В прошлом вопросе (Вопрос) я выяснил , что для запроса погоды мне нужен прокси сервер, который будет кэшировать данные с погодного сервера. Писать сервер придется мне самому, но до этого ни с чем подобным не сталкивался (серверной частью). Писать решил на python 3. Можете ли ткнуть в литературу или дать ссылки как можно реализовать такой кэширующий сервер, и правильно ли я вообще выбрал python?


Ответ

«По-науке» эта конструкция называется «Обратный прокси» (reverse proxy). У вас есть некоторый backend-сервер, который генерирует какие-то полезные данные, и есть frontend-сервер, который кеширует на себе редкоизменяемые данные. Такая схема чаще используется, для кеширования локальных ресурсов какого-нибудь сайта, чтобы не гонять данные лишний раз, через основной backend-сервер.
В вашем случае backend-сервером будет погодный сервер.
Если, логику формирования запросов клиенты возьмут на себя, то проще будет использовать некий уже готовый и отлаженный web-сервер. В принципе, тут подойдет любой (nginx, lighttpd, apache, Ваш собственный). Чаще всего для таких целей используют nginx. Он весьма шустр и достаточно прост в настройке.
Вот, например, настройки для nginx
http://reviewsignal.com/blog/2013/08/29/reverse-proxy-and-cache-server-with-nginx/
http://ashep.org/2011/nginx-obratnyj-proksi-server/#.V6ECut_XfmE
Официальная документация:
https://www.nginx.com/blog/nginx-caching-guide/
В итоге у вас получится что-то вроде:
events { worker_connections 8096; multi_accept on; use epoll; }
http {
proxy_cache_path /tmp/cache levels=1:2 keys_zone=cache:60m max_size=1G;
server { listen 80; server_name your-proxy-server-name.com;
location / { proxy_pass http://any-weather-server.com; proxy_redirect off; proxy_set_header Host $host; proxy_cache STATIC; proxy_cache_valid 200 1d; proxy_cache_use_stale error timeout invalid_header updating \ http_500 http_502 http_503 http_504; } } }
Тут надо будет внимательно отнестись к заголовкам, которые ожидает сервер погоды от вас. Вероятно, вам придется немножко поколдовать с
proxy_ignore_headers proxy_hide_headers proxy_set_headers
Подобную проблему обсуждают тут:
https://stackoverflow.com/questions/9230812/nginx-as-cache-proxy-not-caching-anything
Заголовки, вам придется настраивать в любом случае, в том числе и если frontend-сервер будете писать сами.

Если писать самому, я думаю, было бы проще найти некоторое готовое решение, и его переиспользовать. Например, достаточно просто это сделать с помощью tornado. А в качестве кеша использовать наример memcached или redis
https://stackoverflow.com/questions/16524545/how-to-write-a-web-proxy-in-python

пятница, 5 апреля 2019 г.

Возможно ли вычислить реальный IP?

Интересует возможность вычислить реальный IP пользователя (когда тот использует прокси IPv6) если у него отключено почти всё (Flash, Java...). Всё кроме JS


Ответ

Если прокси по настоящему анонимный и человек использует правильное ПО, вы попадаете в настоящий бесперспективняк в решении данной проблемы, хотя не анонимные прокси могут прокидывать при запросе различные заголовки типа X-Forwarded-For где содержиться реальный IP.
Давайте рассмотрим причины, почему ваши попытки бесперспективны при настоящем анонимном Proxy сервере и правильно настроенном ПО:
JS - клиентский язык, не имеет доступа к оборудованию, если его не предоставляет сам браузер через технологии и плагины. Прокси-сервер может хранить всю информацию о подключении, но вы ее не получите без разрешения владельца. Есть возможность использовать не просто прокси, а цепочку прокси-серверов расположенных в разных странах, тогда процесс обращения к одному владельцу прокси уже не пройдет.
Конечным IP всегда является тот, с которого произведен запрос, в данном случае это прокси сервер.
Получается что реальный IP узнать нельзя, но его можно узнать через различные уязвимости в ПО или программном обеспечении которое хотело сделать этот мир лучше используя весь потенциал технологий, так вот к такому относиться webRTC..Часто пользователи о ней даже не знают и не подозревают что она включена.
Есть возможность утащить реальный IP и даже локальный IP через утечку адреса в технологии webRTC (webRTC ip leak), если пользователь не отключил у себя ее в браузере или имеет клиентское ПО поддерживающее данный протокол.
Технология WebRTC была создана разработчиками Google для быстрой передачи и защиты конфиденциальной информации с использованием браузера, не устанавливая никаких дополнительных программ и расширений.
Демонстрация работы утечки скрытого IP продемонстрирована на проекте в Github

вторник, 16 октября 2018 г.

не работает socks5 proxy в связке Python3 Selenium3 Phantomjs2

Вот код который пытаюсь выполнить:
from selenium import webdriver from selenium.webdriver.common.desired_capabilities import DesiredCapabilities import time
ua = dict(DesiredCapabilities.PHANTOMJS) ua["phantomjs.page.settings.userAgent"] = ("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.59 Safari/537.36") service_args = ['--proxy=109.228.147.75:45554','--proxy-type=socks5','--load-images=false','--ignore-ssl-errors=true'] browser = webdriver.PhantomJS(desired_capabilities=ua, service_args=service_args) browser.set_window_size(1920, 1080) browser.get('http://www.ip-adress.com/') time.sleep(10) browser.save_screenshot('screen_test.png')
Если использовать socks5, то при выполнении кода PhantomJS не может загрузить сайт, оставаясь в подвешенном состоянии, можно ждать вечность и ничего не произойдёт. Если завершить процесс PhantomJS то IDLE прервётся на команде:
browser.get('http://www.ip-adress.com/')
В Мозиле (не в коде, а просто в окне) с этим же proxy сайт открывается.
Если заменить прокси на https тип, то всё заработает.
Однако, через socks5 загружается http://example.com/. То есть только он. Ни один другой сайт не грузится. => Из-за этого подозреваю что проблема с DNS запросами, но как это фиксить?
Python 3.5 / Selenium 3.0.1 / PhantomJS 2.1.1


Ответ

Всё дело в самом proxy. Я так до конца и не понял в чём всё же фишка, но как итог, нужно проверять proxy на работающий DNS Forwarding. Просто работающих соксов много, а вот с адекватным DNS F мне как-то попалось значительно меньше.
Как я понял, PhantomJS при использовании socks5 по умолчанию использует DNS Forwarding, по этому и ждёт, когда-же сервер ему ответит. Однако настройки как в Мозиле:

у Фантома нет, и отключить проксирование DNS запросов у Фантома нельзя.
Хотя я не исключаю, что не прав до сих пор, и реально ответ в другом.
Спасибо))