0
私はパケットの読み込みを含む学校プロジェクトに取り組んでいます。パケットの送信元と送信先のIP、プロトコル、送信元と送信先のポートを知る必要があります。今はIPヘッダーが正常に動作していますが、TCPヘッダーからポートを表示すると、エラーが発生することがあります。私は、外部の図書館やツールを使用することを控えています。なぜなら、マークされたときにプロジェクトがどのような環境でテストされるかわからないからです。いくつかの時間だけTCPヘッダーを開けるときのエラー
エラー
Traceback (most recent call last):
File "capturePacket.py", line 26, in <module>
tcp_hdr = struct.unpack("!HHII2sH2sH", tcpheader)
struct.error: unpack requires a buffer of 20 bytes
いくつかのガイダンスが参考になります。ありがとうございました。
import socket,struct,binascii,os
#if windows
if os.name == "nt":
s = socket.socket(socket.AF_INET,socket.SOCK_RAW,socket.IPPROTO_IP)
s.bind((socket.gethostname(),0))
s.setsockopt(socket.IPPROTO_IP,socket.IP_HDRINCL,1)
s.ioctl(socket.SIO_RCVALL,socket.RCVALL_ON)
#if other
else:
s=socket.socket(socket.PF_PACKET, socket.SOCK_RAW, socket.ntohs(0x0800))
while True:
pkt=s.recvfrom(65565)
print ("\n\nIP Header:")
ipheader = pkt[0][14:34]
ip_hdr = struct.unpack("!1s1s1H1H2s1B1B2s4s4s",ipheader)
print ("Source IP", socket.inet_ntoa(ip_hdr[8]))
print ("Destination IP", socket.inet_ntoa(ip_hdr[9]))
print ("Protocol", ip_hdr[6])
print ("\n\nTCP Header:")
tcpheader = pkt[0][34:54]
tcp_hdr = struct.unpack("!HHII2sH2sH", tcpheader)
print ("Source Port:", tcp_hdr[0])
print ("Destination Port:", tcp_hdr[1])