Python socket-module:如何更改客户端的本地端口?

Posted

技术标签:

【中文标题】Python socket-module:如何更改客户端的本地端口?【英文标题】:Python socket-module: How to change the local port on the client side? 【发布时间】:2011-09-09 03:53:38 【问题描述】:

我想从使用 TCP/IP 作为客户端的网络获取包。

随着...

connect((TCP_IP, TCP_PORT))

...我可以更改对等地址的端口。但是我更改了本地计算机的端口?

编辑:我想使用带有四个端口的网卡。网卡连接到发送大量数据的测量设备。如何查看数据的去向?如何区分这四个端口?

【问题讨论】:

嗯...你能详细说明一下吗?您想在本地计算机上更改哪个端口?如果您要连接到删除 TCP 端口,您要更改哪个本地端口? 【参考方案1】:

假设你有一个名为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

【讨论】:

但我在客户端。测量设备是服务器。 @kame,没关系...你也可以在connect()之前bind() @kame,您是否尝试将流量路由到不同的以太网接口? 我想从测量设备接收数据。因为有大量数据,我必须在 4 个端口上并行接收数据。该设备还有 4 个端口。 你如何在最后一行之后发送消息,连接?客户端连接但未发送数据。你是怎么做到的?【参考方案2】:

您的网络适配器上的四个物理端口与IP(和TCP/IP)的逻辑端口概念相关。

在我们进一步帮助您之前,请指定这些物理端口的配置(即 IP 地址、子网等)。可能有一种方法可以在 Python 中做你想做的事:选择四个端口中的一个作为流量。

【讨论】:

【参考方案3】:

可以分配 TCP/IP 客户端端口,但您不应该这样做,因为这样做没有任何意义。请参阅TCP/IP Client (Ephemeral) Ports and Client/Server Application Port Use 了解说明。

【讨论】:

如果你做不到,为什么我能在我的回答中做到 ;-)? @Mike Pennington:我显然是个白痴(或者至少是需要更多睡眠的人):-) 我同意从普通 TCP 客户端-服务器的角度来看这是一个奇怪的请求......我很想知道他到底在做什么,但我认为英语可能不是他的母语

以上是关于Python socket-module:如何更改客户端的本地端口?的主要内容,如果未能解决你的问题,请参考以下文章

如何更改默认 Python 版本?

Python - matplotlib:如何更改 RectangleSelector 属性

如何更改 matplotlib(python)中的字体?

如何在 Spyder 中更改 Python 的路径?

如何使用 xlsxwriter - python 更改图例字体大小

如何在 Kivy 中从 python 代码更改屏幕