Python socket模块:如何更改客户端的本地端口?

3 投票
3 回答
17784 浏览
提问于 2025-04-16 19:01

我想作为客户端通过TCP/IP从网络获取数据包。

通过...

connect((TCP_IP, TCP_PORT))

...我可以更改对方地址的端口。但是我怎么更改我本地计算机的端口呢?

补充说明:我想使用一张有四个端口的网卡。这张网卡连接着一个测量设备,这个设备发送了很多数据。我该如何查看这些数据的去向?我怎么区分这四个端口呢?

3 个回答

0

可以给一个TCP/IP客户端指定一个端口,但其实这样做没有什么意义。想了解更多,可以看看这个链接:TCP/IP客户端(临时)端口和客户端/服务器应用程序端口使用,里面有详细的解释。

2

你网络适配器上的四个物理端口和IP(还有TCP/IP)的逻辑端口概念是没有关系的。

在我们能进一步帮助你之前,请说明一下这些物理端口的配置(比如IP地址、子网等)。也许在Python中有办法实现你想要的:选择四个端口中的一个来处理流量。

12

假设你有一个叫做 sock 的套接字... 你可以用 socket.bind() 来绑定它。

import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
DESTINATION_ADDR = '1.1.1.1'
SOURCE_PORT, DESTINATION_PORT = 31415, 80
sock.bind(('0.0.0.0', SOURCE_PORT))
sock.connect((DESTINATION_ADDR, DESTINATION_PORT))

现在我运行 tshark(文本版的 wireshark),来查看我在那个接口上的网络流量...

[mpenning@Bucksnort ~]$ sudo tshark -i eth0 tcp and port 31415
Capturing on eth0
  0.000000 24.19.161.6 -> 1.1.1.1      TCP 31415 > http [SYN] Seq=0 Win=5840 Len=0 MSS=1460 TSV=4228124209 TSER=0 WS=6
 12.000009 24.19.161.6 -> 1.1.1.1      TCP 31415 > http [SYN] Seq=0 Win=5840 Len=0 MSS=1460 TSV=4228127209 TSER=0 WS=6
 36.000010 24.19.161.6 -> 1.1.1.1      TCP 31415 > http [SYN] Seq=0 Win=5840 Len=0 MSS=1460 TSV=4228133209 TSER=0 WS=6

撰写回答