为什么 Python 3 会发送格式错误的数据包?

问题描述 投票:0回答:1

我正在使用Python发送基本的广播消息来玩Wireshark,这是我的代码:

from scapy.all import *
from scapy.layers.inet import UDP, IP
from scapy.layers.l2 import Ether

destination_ip = "10.0.0.255"
destination_port = 6666
eth = Ether(dst="ff:ff:ff:ff:ff:ff")
udp = UDP(dport=destination_port)
payload = "Hello, this is a broadcast message!"
packet = eth / IP(dst=destination_ip) / udp / Raw(load=payload)

for _ in range(100000):
    time.sleep(1)
    sendp(packet, iface="en0")

一旦运行它,我就会得到以下输出:

WARNING: No IPv4 address found on en6 !
WARNING: No IPv4 address found on ap1 !
WARNING: more No IPv4 address found on awdl0 !
.
Sent 1 packets.
.
Sent 1 packets.
.

在 Wireshark 中我看到的是:

Unknown operation (13), Malformed packet

这是为什么呢?为什么我看不到内容?

如果重要的话,我使用的是 macOS。

python python-3.x scapy packet
1个回答
-5
投票

Python3 本身不会发送格式错误的数据包;然而,由于编程错误或数据处理不当,可能会出现数据包结构或内容的问题。常见原因包括:

  1. 不正确的数据格式:Python3 可以使用

    socket
    requests
    等库通过网络发送数据。如果数据格式不正确(例如,标头不正确、数据丢失或编码错误),可能会导致数据包格式错误。

  2. 缓冲区溢出:发送超过定义的缓冲区大小的数据可能会导致截断或碎片问题,从而导致数据包格式错误。

  3. 编码错误:如果数据编码或解码不当,可能会导致数据包损坏。例如,使用错误的字符编码可能会导致数据丢失。

  4. 无效协议处理:使用低级网络库时,未正确处理协议的复杂性可能会导致数据包格式错误。

  5. 数据注入:如果通过网络发送未经处理的用户输入,恶意输入可能会创建格式错误的数据包,从而可能导致安全漏洞。

要解决此类问题,请确保正确的数据验证、处理和格式化。使用网络协议时遵循最佳实践,并考虑使用更高级别的库或框架来抽象低级网络细节,以降低格式错误的数据包的风险。正确的测试和错误处理对于识别和解决 Python 网络代码中的任何问题至关重要。

© www.soinside.com 2019 - 2024. All rights reserved.