Pythonにネットワークをリッスンさせ、実行されている限りすべての着信接続を一覧表示させようとしています。しかし、私はレンガの壁にぶつかり、その方法を見つけることができないようです。助言がありますか?Python2.7.3の使用
3451 次
3 に答える
2
@millimoose:Pythonを使用してすべてのソケットでリッスンする必要がある/望んでいないと思います。彼らが後にする可能性が高いのは 、libpcapへのPythonバインディングです
于 2012-10-08T02:15:38.337 に答える
1
を使用netstat
して、すべての着信ネットワーク接続を一覧表示できます。誰かがPythonの実装を書いたことさえあります:http netstat
://voorloopnul.com/blog/a-python-netstat-in-less-than-100-lines-of-code/
于 2012-10-08T02:19:30.027 に答える
0
あなたの質問は詳細について非常に曖昧ですが、あなたがしたいのがあなたのマシンへのインバウンド接続を監視することだけであるなら、あなたはほんの数行のPythonでそれを行うことができます。
from socket import *
rawSocket = socket(AF_INET, SOCK_RAW, IPPROTO_TCP)
rawSocket.bind(('IP_ON_IFACE_TO_LISTEN_ON', 0))
while True:
data = rawSocket.recv(2048)
# http://en.wikipedia.org/wiki/IPv4#Packet_structure
# Internet Header Length; Have to determine where the IP header ends
ihl = ord(data[0]) & 15
ip_payload = data[ihl*4:]
# http://en.wikipedia.org/wiki/Transmission_Control_Protocol#TCP_segment_structure
# Match SYN but not SYN/ACK
if (ord(ip_payload[13]) & 18) == 2:
src_addr = inet_ntoa(data[12:16])
dst_addr = inet_ntoa(data[16:20])
# Could use struct.unpack, might be clearer
src_port = (ord(ip_payload[0]) << 8) + ord(ip_payload[1])
dst_port = (ord(ip_payload[2]) << 8) + ord(ip_payload[3])
src_str = (src_addr+':'+str(src_port)).ljust(22)
dst_str = (dst_addr+':'+str(dst_port))
print "%s=> %s" % (src_str, dst_str)
これにより、RSTまたはICMP応答に関係なく、SYNフラグが設定されているすべてのインバウンドTCPパケットが出力されます。あなたの質問は「すべての着信接続をリストする」と述べています。UDPはコネクションレス型なので、あなたが求めているのはそれだと思います。
FWIW
于 2012-10-08T19:35:34.073 に答える