Как проверить заголовки прокси для проверки анонимности?

Я пытаюсь определить прокси с высокой анонимностью. Также называются приватными/элитными прокси. На одном из форумов я прочитал это:

Серверы с высокой анонимностью не отправляют переменные HTTP_X_FORWARDED_FOR, HTTP_VIA и HTTP_PROXY_CONNECTION. Хост даже не знает, что вы используете прокси-сервер, и, конечно же, не знает вашего IP-адреса.

Высокоанонимный прокси будет отображать следующую информацию:

REMOTE_ADDR = IP-адрес прокси

HTTP_VIA = пусто

HTTP_X_FORWARDED_FOR = пусто

Итак, как я могу проверить эти заголовки в Python, чтобы отбросить их как прокси-сервер HA? Я пытался получить заголовки для 20-30 прокси, используя пакет requests, также с urllib, со встроенным http.client, с urllib2. Но я не видел этих заголовков, никогда. Значит, я должен делать что-то не так...

Это код, который я использовал для тестирования с requests:

proxies = {'http': 'http://176.100.108.214:3128'}
header = {'user-agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.90 Safari/537.360',}
s = requests.session()
s.proxies = proxies
r = s.get('http://www.python.org', headers=header)
print(r.status_code)
print(r.request.headers)
print(r.headers)

person Jeflopo    schedule 18.05.2015    source источник


Ответы (1)


Похоже, что сообщение на форуме, на которое вы ссылаетесь, говорит о заголовках, которые видит сервер в вашем проксированном запросе, а не заголовки, которые видит клиент в проксированном ответе. .

Поскольку вы тестируете www.python.org в качестве сервера, единственный способ увидеть заголовки, которые он получает, — это получить доступ к их журналам. Что вы не делаете.

Но есть простое решение: запустите свой собственный HTTP-сервер, сделайте запросы к нему, и тогда вы сможете увидеть, что он получает. (Если вы находитесь за брандмауэром или NAT, к которому тестируемый прокси-сервер не сможет подключиться, вам, возможно, придется где-то получить бесплатный размещенный сервер; если нет, вы можете просто запустить его на своем компьютере.)

Если вы не знаете, как установить и настроить веб-сервер, Python поставляется с собственным. Просто запустите этот скрипт с Python 3.2+ (на своем компьютере, на бесплатном экземпляре Amazon EC2 или где-то еще):

from http.server import HTTPServer, SimpleHTTPRequestHandler

class HeaderDumper(SimpleHTTPRequestHandler):
    def do_GET(self):
        try:
            return super().do_GET()
        finally:
            print(self.headers)

server = HTTPServer(("", 8123), HeaderDumper)
server.serve_forever()

Затем запустите этот скрипт с python3 в оболочке.

Затем просто запустите свой клиентский скрипт с http://my.host.ip вместо http://www.python.org и посмотрите, что скрипт выводит в оболочку сервера.

person abarnert    schedule 18.05.2015
comment
Хорошо, я понял трюк клиент/сервер. И я вспомнил PHP-переменную $_SERVER[] (смеется). Но тот сервер, который вы написали, будет все время прослушивать новый запрос на получение. Думаю, на 127.0.0.1:8123. Это то, что делает HeaderDumper(), верно? - person Jeflopo; 18.05.2015
comment
@JesúsFlores: Ну, он прослушивает 0.0.0.0:8123, а не только 127.0.0.1:8123, поэтому прокси-сервер может подключиться к нему (при условии, что он находится на доступном IP-адресе). Но в остальном, да, это сервер, который вечно слушает новые запросы на получение (и отвечает списком каталогов своего текущего каталога), и, помимо вывода на терминал обычной строки журнала 127.0.0.1 - - [17/May/2015 17:49:49] "GET / HTTP/1.1" 200 -, он также распечатывает все заголовки. он видит. - person abarnert; 18.05.2015
comment
Потрясающий ! :D Спасибо за обмен знаниями. - person Jeflopo; 18.05.2015