Python: 包头中显示错误的 ip
Python: wrong ip is shown in packet header
我正在通过我的机器转发一台机器的数据包。我用 tcpdump host <machine_ip>
进行了测试,看看是否一切正常,确实如此。现在我需要捕获这些数据包。我选择使用 Python 来执行此操作。现在我正在尝试过滤数据包,但打印的 ip 与正确的不同。应该是 192.168.0.8
:
import socket
from struct import *
print("Started")
with socket.socket(socket.AF_PACKET,socket.SOCK_RAW, socket.ntohs(0x0003)) as s:
while True:
packet=s.recvfrom(65565)
content=packet[0]
ip_header=unpack('!BBHHHBBH4s4s', content[:20])
source_ip=socket.inet_ntoa(ip_header[8])
print(source_ip)
打印出来的是 8.0.69.0
和 8.0.69.16
,其中 none 符合预期的形式。
这是因为原始数据前面是MACheader。
如果您更改行:
ip_header=unpack('!BBHHHBBH4s4s', content[:20])
至
ip_header=unpack('!BBHHHBBH4s4s', content[14:34])
您可能会得到您的 IP 地址。我说可能是因为它真的取决于 link 层,因为可能存在 vlan 标记,从而进一步移动 ip header。
我正在通过我的机器转发一台机器的数据包。我用 tcpdump host <machine_ip>
进行了测试,看看是否一切正常,确实如此。现在我需要捕获这些数据包。我选择使用 Python 来执行此操作。现在我正在尝试过滤数据包,但打印的 ip 与正确的不同。应该是 192.168.0.8
:
import socket
from struct import *
print("Started")
with socket.socket(socket.AF_PACKET,socket.SOCK_RAW, socket.ntohs(0x0003)) as s:
while True:
packet=s.recvfrom(65565)
content=packet[0]
ip_header=unpack('!BBHHHBBH4s4s', content[:20])
source_ip=socket.inet_ntoa(ip_header[8])
print(source_ip)
打印出来的是 8.0.69.0
和 8.0.69.16
,其中 none 符合预期的形式。
这是因为原始数据前面是MACheader。
如果您更改行:
ip_header=unpack('!BBHHHBBH4s4s', content[:20])
至
ip_header=unpack('!BBHHHBBH4s4s', content[14:34])
您可能会得到您的 IP 地址。我说可能是因为它真的取决于 link 层,因为可能存在 vlan 标记,从而进一步移动 ip header。