Я хочу получить пакеты из сети, используя TCP/IP в качестве клиента.
С...
connect((TCP_IP, TCP_PORT))
... Я могу изменить порт адреса peer. Но я меняю порт моего локального компьютера?
EDIT: я хочу использовать сетевую карту с четырьмя портами. Сетевая карта подключается к измерительному устройству, которое отправляет много данных. Как я могу увидеть, куда идут данные? Как я могу различать эти четыре порта?
Предположим, что у вас есть сокет с именем sock
... use 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
bind()
до connect()
Четыре физических порта вашего сетевого адаптера не связаны с концепцией логического порта IP (и TCP/IP).
Прежде чем мы сможем помочь вам, укажите, какая конфигурация (например, IP-адрес, подсеть и т.д.) этих физических портов. Возможно, есть способ сделать то, что вы хотите в Python: выберите один из четырех портов для трафика.
Вы можете назначить порт клиента TCP/IP, но вы не должны, потому что это не имеет никакого смысла для этого. См. Порт клиента TCP/IP (эфемерный) и порт приложения Client/Server Используйте для объяснения.