当我用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/