Pythonでパケットキャプチャ(Windows用)
RAWソケットを使ってWindowsでパケットキャプチャを行います。 実行には管理者権限が必要です。このスクリプトでキャプチャできるのはIPから上位のレイヤーであり、Ethernetヘッダはキャプチャできません。
コード
import socket MYHOST = "自分のIPアドレスを入れる" def hexdump(data): result = [] for i in range(0, len(data), 16): binary = " ".join(["%02X" % x for x in data[i:i+16]]) text = "".join(chr(x) if 0x20 <= x <= 0x7E else "." for x in data[i:i+16]) result.append("[%04X] %-48s %s" % (i, binary, text)) print("\n".join(result)) with socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_IP) as sock: sock.bind((MYHOST, 0)) sock.setsockopt(socket.IPPROTO_IP, socket.IP_HDRINCL, 1) sock.ioctl(socket.SIO_RCVALL, socket.RCVALL_ON) try: while True: hexdump(sock.recvfrom(65536)[0]) print("") except: pass finally: sock.ioctl(socket.SIO_RCVALL, socket.RCVALL_OFF)