【发布时间】:2021-04-16 14:49:30
【问题描述】:
我正在尝试使用套接字模块(在 Windows 上运行)用 python 实现服务器客户端应用程序,这是我在互联网上找到的最简单的方法:
对于服务器:
import socket
UDP_IP = ''
UDP_PORT = 42557
sock = socket.socket(socket.AF_INET6, socket.SOCK_DGRAM)
sock.bind((UDP_IP, UDP_PORT))
a = 0
while True:
data, addr = sock.recvfrom(1024) # buffer size is 1024 bytes
print ("received message:", data)
print("addr is:", addr)
sock.close()
break
对于客户:
import socket
UDP_IP = "::1"
UDP_PORT = 42557
MESSAGE = b"0000000EC4030004004000000000000000000000000000000000000000000000"
print ("UDP target IP:", UDP_IP)
print ("UDP target port:", UDP_PORT)
print ("message:", MESSAGE)
sock = socket.socket(socket.AF_INET6, # Internet
socket.SOCK_DGRAM) # UDP
sock.sendto(MESSAGE, (UDP_IP, UDP_PORT))
sock.close()
好的,这工作正常。
问题是,我有一个包含多个包的 pcap 文件,如果我复制该文件,我可以看到所有使用 Wire Shark 通过接口(以太网卡)的包。
问题是,我如何使用 socket 模块获取这些包?我尝试了很多方法,但我什么都看不到(我是一个带套接字的菜鸟)。
在 pcap 文件中,基本信息如下:
源地址:FD53:7CB8:0383:0002:0000:0000:0.0.0.105 目的地址:FF14:0000:0000:0000:0000:0000:0.0.0.28 源端口:42994 目的端口:42512
负载中有一些随机数据。即:0000000EC4030004004000000000000000000000000000000000000000000000
提前致谢。
【问题讨论】:
-
目的地址是否配置在任何接口上?
-
如果我复制那个文件是什么意思
-
@branero79 他可能的意思是播放 PCAP 文件以重新传输之前捕获的数据包。
-
@Joseph 您的代码正在使用端口 42557,但该示例 PCAP 数据包没有,因此您的套接字当然无法看到它。如果数据包上的 IPv6 地址与网络接口的 IPv6 地址不匹配,则相同。如果您有来自另一台机器的 PCAP,您通常需要使用bittwist 或类似工具来更改 PCAP 数据包以匹配将播放 PCAP 的机器。
-
你好@KlausD。未配置。
标签: python windows sockets udp ipv6