【问题标题】:How to get the IP of a domain in ssl/tls socket connection using python如何使用 python 在 ssl/tls 套接字连接中获取域的 IP
【发布时间】:2019-01-11 04:45:18
【问题描述】:

我需要记录使TLS连接成功的域名的IP地址。这是一个简化的代码:

import socket, ssl

context = ssl.SSLContext() 
context.verify_mode = ssl.CERT_NONE 
context.check_hostname = False 

mycipher = "DHE-RSA-AES128-SHA"
context.set_ciphers(mycipher) 
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
domain = "google.com"
mySocket = context.wrap_socket(sock, server_hostname = domain) 
mySocket.connect((domain, 443))
mySocket.close()

我怎样才能获得IP,如果连接成功,我会获得IP。如果没有,我不想记录IP。

我发现一些函数可以在 TLS 会话中获取选定的 TLS 版本version() 和选定的密码套件cipher(),当连接成功时,它总是会检索一个值。但是我没有发现有关获取 IP 的信息。我知道它们可能是不同的东西(版本和密码与 TLS 会话有关,而 IP 与连接有关)但我不想记录不成功的 TLS 连接的 IP。只有当连接成功时,我才想记录IP(例如将其存储在变量中)。

【问题讨论】:

    标签: sockets ssl networking network-programming tls1.2


    【解决方案1】:

    IP 地址是 TCP/IP 属性,而不是 TLS 属性。

    因此,您应该查看 socket 模块给出的内容。

    例如你有:

    socket.getpeername()

    Return the remote address to which the socket is connected. 
    

    这对于找出远程 IPv4/v6 套接字的端口号很有用,例如 实例。 (返回地址的格式取决于地址 family — 见上文。)在某些系统上,此功能不受支持。

    【讨论】:

    • 我认为socket.gethostbyname([hostname])是我应该使用的。
    • 这是一个通用函数,用于解析您想要解析的任何名称。这不是(必然)您的代码中特定sock 连接使用的那个。如果您想在任何连接之外解析主机名,请改用socket.getaddrinfo()
    猜你喜欢
    • 1970-01-01
    • 2016-08-19
    • 1970-01-01
    • 2021-08-05
    • 2019-01-08
    • 1970-01-01
    • 2012-09-17
    • 2015-01-07
    • 2012-10-03
    相关资源
    最近更新 更多