当我用Python打开网络连接时

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('www.heise.de', 80))

我可以从控制台读取连接状态:
netstat --all --program|grep <PID>
tcp   0  0 10.10.10.6:39328   www.heise.de:http  VERBUNDEN  23829/python

但是如何从Python中读取此连接状态CONNECTED,CLOSE_WAIT ...?阅读socket documentation并没有给我任何提示。

最佳答案

这仅适用于 Linux :

您需要getsockopt调用。级别为“IPPROTO_TCP” ,选项为“TCP_INFO”
tcp manual所建议。它将返回 tcp_info 数据为
定义的here,您还可以在其中找到STATE值的枚举。

您可以尝试以下示例:

    import socket
    import struct

    def getTCPInfo(s):
        fmt = "B"*7+"I"*21
        x = struct.unpack(fmt, s.getsockopt(socket.IPPROTO_TCP, socket.TCP_INFO, 92))
        print x

    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    getTCPInfo(s)
    s.connect(('www.google.com', 80))
    getTCPInfo(s)
    s.send("hi\n\n")
    getTCPInfo(s)
    s.recv(1024)
    getTCPInfo(s)

您要查找的是打印的元组中的第一项(整数)。你可以
使用tcp_info定义交叉检查结果。

注意:tcp_info的大小应为104,但我可以将其与92配合使用,不知道发生了什么,但对我有用。

关于python - 在Python中查询TCP套接字连接状态,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18185165/

10-11 03:47
查看更多