Какие сведения о хост-машине python отправляет веб-серверу при установлении соединения через сокеты? - PullRequest
0 голосов
/ 04 мая 2020

Я создаю инструмент пассивной разведки, и одной из его функций является получение информации о сертификате домена. Какие данные о моей машине отправляются на веб-сервер? Приведенный ниже код используется для получения информации о сертификате.

from OpenSSL import SSL
from cryptography import x509
from cryptography.x509.oid import NameOID
import idna

from socket import socket
from collections import namedtuple

HostInfo = namedtuple(field_names='cert hostname peername', typename='HostInfo')

HOSTS = [
    ('google.com', 443),
    ('yahoo.com', 443),
    ('yahoo.com', 443),
]

def get_certificate(hostname, port):
    hostname_idna = idna.encode(hostname)
    sock = socket()

    sock.connect((hostname, port))
    peername = sock.getpeername()
    ctx = SSL.Context(SSL.SSLv23_METHOD) # most compatible
    ctx.check_hostname = False
    ctx.verify_mode = SSL.VERIFY_NONE

    sock_ssl = SSL.Connection(ctx, sock)
    sock_ssl.set_connect_state()
    sock_ssl.set_tlsext_host_name(hostname_idna)
    sock_ssl.do_handshake()
    cert = sock_ssl.get_peer_certificate()
    crypto_cert = cert.to_cryptography()
    sock_ssl.close()
    sock.close()

    return HostInfo(cert=crypto_cert, peername=peername, hostname=hostname)

import concurrent.futures
if __name__ == '__main__':
    with concurrent.futures.ThreadPoolExecutor(max_workers=4) as e:
        for hostinfo in e.map(lambda x: get_certificate(x[0], x[1]), HOSTS):
            print_basic_info(hostinfo)
  • Отправляется ли мой IP-адрес?
  • Отправляет ли python какой-либо пользовательский агент и какие другие данные отправляются при установлении соединения?

1 Ответ

2 голосов
/ 05 мая 2020

Хотя Python явно не отправляет ваш IP, он всегда отправляется с любым TCP-запросом. Если он не отправлен, вы не можете получить ответ от сервера.

В соответствии с http://evanhahn.com/python-requests-library-useragent, при использовании python -запросов используется значение python-requests/{package version} {runtime}/{runtime version} {uname}/{uname -r}, но вы можно переопределить его, задав заголовок запроса.

Однако вы используете не python -запросы, а необработанные сокеты, поэтому никакие данные не передаются, за исключением того, что вы им сообщаете (и ваш IP и некоторые метаданные для TCP соединение)

...