gpt4 book ai didi

Python sendto 似乎没有发送

转载 作者:太空狗 更新时间:2023-10-30 01:37:52 27 4
gpt4 key购买 nike

我是 Python 的新手,正在尝试使用套接字将字节数组作为原始数据包发送。我的 IP 是 192.168.0.116,我要发送到的设备是 192.168.0.64。这个客户端设备是一个基于微 Controller 的单元,它正在执行我的代码来简单地嗅探以太网数据包并检查特定模式。我正在使用 UDP 数据包,并通过在我的 PC 中使用“Ostinato”来尝试客户端固件发送原始 UDP 数据包。我正在使用 Wireshark 监控网络数据包流。客户端似乎可以很好地处理 Ostinato 发送的数据包。

但是,当我尝试使用 Python 发送相同的数据包时(如下使用原始数据包),它似乎没有吐出字节,因为我在 Wireshark 上看不到任何内容,客户端也无法获取任何数据。但是 sendto() 的返回值是正确的。因此,Python 似乎将字节数组提供给要发送的缓冲区(由操作系统?)但停在那里。

import socket
CLNT_UDP_IP = '192.168.0.64'
CLNT_UDP_PORT = 5005
svr_sock = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_RAW)

send_data = [0x00, 0x11...]
send_data_arr = bytearray (send_data)
svr_sock.bind (('192.168.0.116',0))
bytes_send = svr_sock.sendto (send_data_arr, (CLNT_UDP_IP, CLNT_UDP_PORT))
svr_sock.close()

为了清楚起见,我去掉了 try-except block 。

我注意到的另一件事是,当套接字关闭时,它需要一点时间。如果我注释掉 sendto 语句,它会立即退出。因此,套接字关闭似乎正在尝试刷新发送缓冲区,但未能发送数据包。

有什么想法吗?

最佳答案

  1. Ilya 是对的,您应该打开一个 UDP 套接字

    socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

  2. 您正在绑定(bind)到无效的端口 0。如果这不是入站端口,则不需要绑定(bind)它。这可以解释为什么您的 sendto 调用被阻塞。

  3. send_data 数组应该只包含您的数据,而不是“完整的以太网数据包”。

  4. send_data 数组必须小于您网络的 MTU 大小,否则它可能会被静默丢弃。它会有所不同,但低于 1300 应该会起作用,超过 1500 几乎肯定不会起作用。

关于Python sendto 似乎没有发送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31308318/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com