在通过套接字建立连接时,python向主机发送关于主机的哪些详细信息?

问题描述 投票:0回答:1

我正在构建被动侦察工具,其功能之一是获取有关域的证书信息。我的机器的哪些详细信息要发送到Web服务器?以下代码用于获取证书信息。

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建立连接时是否正在发送任何用户代理,并且还发送其他哪些详细信息?
python security network-programming
1个回答
1
投票

虽然Python并未明确发送您的IP,但它始终与任何TCP请求一起发送。如果未发送,则无法从服务器接收响应。

根据http://evanhahn.com/python-requests-library-useragent,用户代理为使用python-requests时,python-requests/{package version} {runtime}/{runtime version} {uname}/{uname -r},但是您可以通过设置请求标头来覆盖它。

但是,您不是使用python-requests,而是使用原始套接字,因此除了您告诉它的内容(以及您的IP和TCP连接的某些元数据)之外,没有数据传输。

© www.soinside.com 2019 - 2024. All rights reserved.