Python通过错误的接口发送包



我有一个树莓派,它通过Wlan连接到互联网,通过以太网连接到本地设备。它有两个ip;每个端点一个。

这是运行ifconfig时简化的样子;使用不同的ip保护隐私

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500 
inet 189.168.200.110  netmask 0.0.0.0  broadcast 255.255.255.255 


wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500 
inet 189.168.201.79  netmask 255.255.255.0  broadcast 192.168.1.255 

这是python用来通过以太网向设备发送消息的代码,该网关的ip为

TCP_PORT = 3001
SERVER_IP_AD = "189.168.200.110"
CLIENT_IP_AD = "189.168.200.155"
BROADCAST_IP = "255.255.255.255"
def sendMessage(self, file_path, client_ip=CLIENT_IP_AD):
print('message en route')
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((self.SERVER_IP_AD, 0))
s.connect((client_ip, self.TCP_PORT)) #**ERROR IS HERE**
MESSAGE = self.openFile(file_path)
s.send(MESSAGE.encode())
data = s.recv(self.BUFFER_SIZE)
s.close()
return data

使用wireshark,我可以看到数据包是通过Wlan接口发送的,而不是通过具有正确IP源和IP目的的以太网接口。

我如何告诉python在发送包时使用正确的接口?

在我看来,你可以用以太网建立Tcp连接,因为以太网没有握手而且,你不应该同时使用s.bind()和s.connect()。因为前者是UDP客户端,后者是TCP客户端。请尝试只使用s.bind()。

最新更新