侦听特定接口的Python套接字

侦听特定接口的Python套接字,python,sockets,raspberry-pi,Python,Sockets,Raspberry Pi,我目前有一个树莓pi,它被设置为wifi到以太网的网桥。raspberry pi充当我拥有的整个以太网子网的接入点。子网和网桥工作得很好,但当我试图让我的python程序在raspberry pi上侦听以太网接口/子网上的请求时,它似乎没有做到这一点。它被设置为将套接字绑定到(“”,10000),但它从不接收任何消息。但是,它可以通过套接字将消息发送到子网,但不能接收。我认为它是在监听wifi接口,而不是以太网接口,但我不确定如何指定插座应该监听哪个接口 这是我的接收代码 receive_gro

我目前有一个树莓pi,它被设置为wifi到以太网的网桥。raspberry pi充当我拥有的整个以太网子网的接入点。子网和网桥工作得很好,但当我试图让我的python程序在raspberry pi上侦听以太网接口/子网上的请求时,它似乎没有做到这一点。它被设置为将套接字绑定到
(“”,10000)
,但它从不接收任何消息。但是,它可以通过套接字将消息发送到子网,但不能接收。我认为它是在监听wifi接口,而不是以太网接口,但我不确定如何指定插座应该监听哪个接口

这是我的接收代码

receive_group = ('',10000)
receive = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

receive.bind(receive_group)

while(True):
   data, address = receive.recv(65536)
   print(data)

要从
socket.recv
获取内容,必须连接到此套接字并发送内容。你确定网络上的某个程序正在这样做吗


为了监听/嗅探数据包和网络流量,请更好地使用。

绑定部分应该是正确的。接收部分错误,因为
recv
仅返回(字节)数据,您应该使用
recvfrom
来获取发送方地址。但这应该是可行的:

import socket
receive = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
receive.bind(('', 10000))
while True:
    data, address = receive.recvfrom(64)
    print(data, address)
我将此代码用于发送部分:

import socket
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.sendto(b'foo', (addr, 10000))

其中,addr是接收器的一个(可访问)地址,接收器可以成功地从其任何接口接收数据。

结果表明,它与python无关。当我在pi上创建访问点时,它创建了一个防火墙规则来阻止该端口,尽管我从未以这种方式配置防火墙。向该端口添加异常修复了我的问题

是的,我确信有东西正在发送数据。我在另一个raspberry pi上运行同一个程序,套接字从raspberry pi访问点运行到另一个raspberry pi,但不是以另一种方式aroundI尝试将您的代码完全复制到我的两个系统上,但它仍然没有接收到发送到它的任何数据。该连接可以从接入点(raspberry pi 3)连接到另一台计算机(raspberry pi zero),但不能以相反的方式工作