【问题标题】:Reading TCP packets to and from a specific port in Python 3在 Python 3 中从特定端口读取 TCP 数据包
【发布时间】:2020-12-12 05:12:38
【问题描述】:

我正在尝试使用此过滤器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 and port 25565", prn=test)

标签: python wireshark pyshark


【解决方案1】:

你想要sniff(filter="tcp port 25565", prn=test)

看看scapy documentation

我们可以添加过滤以仅捕获我们感兴趣的数据包。使用标准 tcpdump/libpcap 语法:

该语法在pcap-filter man page 中指定。

限定符将匹配限制为特定协议。
可能的 proto 有:ether、fddi、tr、wlan、ip、ip6、arp、rarp、decnet、tcp 和 udp。例如,'ether src foo','arp net 128.3','tcp port 21',

我认为其中的语法没有得到很好的解释(或者我没有阅读正确的部分),但是正如您所见,tcp port 21 是一个有效的过滤器,并且您正在寻找什么。对于使用 and 的替代语法,您将在下面看到:

可以使用以下方式组合基元: 一组带括号的原语和运算符(括号对 Shell 来说是特殊的,必须转义)。
否定('!' 或 'not')。
连接('&&' 或 'and')。
交替(“||”或“或”)。

如您所见,您的过滤器选项(或原语)应使用运算符进行分组。在这种情况下,您希望两者都为真,因此您需要tcp and port 25565,或者tcp && port 25565

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-26
    • 1970-01-01
    • 1970-01-01
    • 2019-01-07
    • 2012-09-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多