在 Python 3 中读取进出特定端口的 TCP 数据包
Reading TCP packets to and from a specific port in Python 3
我正在尝试使用此过滤器 tcp.port == 25565
复制我在 Wireshark 中看到的数据。我尝试过使用 socket 和 pyshark,但是,我似乎找不到解释如何执行此操作的简单教程。
正如您可能通过端口得知的那样,我正在尝试解码 Minecraft 数据包。有关如何获取有效负载并开始解析该数据的建议将非常有帮助。
到目前为止,我有这个代码:
from scapy.all import *
def test(pkt):
print(pkt)
if __name__ == '__main__':
single = sniff(filter="tcp.port == 25565", prn=test)
非常感谢任何帮助。
你想要sniff(filter="tcp port 25565", prn=test)
.
We can add filtering to capture only packets that are interesting to us. Use standard tcpdump/libpcap syntax:
该语法在 pcap-filter
man page 中指定。
qualifiers restrict the match to a particular protocol.
Possible protos are: ether, fddi, tr, wlan, ip, ip6, arp, rarp, decnet, tcp and udp. E.g., 'ether src foo', 'arp net 128.3', 'tcp port 21',
我认为其中的语法没有得到很好的解释(或者我没有阅读正确的部分),但正如您所看到的,tcp port 21
是一个有效的过滤器,并且您正在寻找为了。对于使用 and
的替代语法,您将进一步看到:
Primitives may be combined using:
A parenthesized group of primitives and operators (parentheses are special to the Shell and must be escaped).
Negation ('!' or 'not').
Concatenation ('&&' or 'and').
Alternation ('||' or 'or').
如您所见,您的过滤器选项(或基元)应使用运算符进行分组。在这种情况下,您希望两者都为真,因此您希望 tcp and port 25565
,或者 tcp && port 25565
.
我正在尝试使用此过滤器 tcp.port == 25565
复制我在 Wireshark 中看到的数据。我尝试过使用 socket 和 pyshark,但是,我似乎找不到解释如何执行此操作的简单教程。
正如您可能通过端口得知的那样,我正在尝试解码 Minecraft 数据包。有关如何获取有效负载并开始解析该数据的建议将非常有帮助。
到目前为止,我有这个代码:
from scapy.all import *
def test(pkt):
print(pkt)
if __name__ == '__main__':
single = sniff(filter="tcp.port == 25565", prn=test)
非常感谢任何帮助。
你想要sniff(filter="tcp port 25565", prn=test)
.
We can add filtering to capture only packets that are interesting to us. Use standard tcpdump/libpcap syntax:
该语法在 pcap-filter
man page 中指定。
qualifiers restrict the match to a particular protocol.
Possible protos are: ether, fddi, tr, wlan, ip, ip6, arp, rarp, decnet, tcp and udp. E.g., 'ether src foo', 'arp net 128.3', 'tcp port 21',
我认为其中的语法没有得到很好的解释(或者我没有阅读正确的部分),但正如您所看到的,tcp port 21
是一个有效的过滤器,并且您正在寻找为了。对于使用 and
的替代语法,您将进一步看到:
Primitives may be combined using: A parenthesized group of primitives and operators (parentheses are special to the Shell and must be escaped).
Negation ('!' or 'not').
Concatenation ('&&' or 'and').
Alternation ('||' or 'or').
如您所见,您的过滤器选项(或基元)应使用运算符进行分组。在这种情况下,您希望两者都为真,因此您希望 tcp and port 25565
,或者 tcp && port 25565
.