Mic*_*ael 6 python sockets networking tcp
当我在Python中打开网络连接时
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('www.heise.de', 80))
Run Code Online (Sandbox Code Playgroud)
我可以从控制台读取连接状态:
netstat --all --program|grep <PID>
tcp 0 0 10.10.10.6:39328 www.heise.de:http VERBUNDEN 23829/python
Run Code Online (Sandbox Code Playgroud)
但是如何从Python中读取此连接状态,CONNECTED,CLOSE_WAIT ...... 通过套接字文档阅读没有给我任何暗示.
这仅适用于Linux:
你需要getsockopt调用.level是"IPPROTO_TCP",选项是"TCP_INFO",如tcp手册所示.它将返回此处定义的tcp_info数据,您还可以在其中找到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)
Run Code Online (Sandbox Code Playgroud)
你要找的是打印元组中的第一项(整数).您可以使用tcp_info定义交叉检查结果.
注意:tcp_info的大小应该是104,但我使用92,不知道发生了什么,但它对我有用.
| 归档时间: |
|
| 查看次数: |
5844 次 |
| 最近记录: |