tcpreplay не работает клиент не получает данные - PullRequest
0 голосов
/ 08 декабря 2018

На сервере

# nc -lp 2424
hi server
hi client
1
2
3

На клиенте

➜  ~ nc 139.224.xxx.xx 2424
hi server
hi client
1
2
3

Затем на клиенте

➜  ~ sudo tcpdump -i en0 -nn -s0 -v src port 2424 -c 10 -w 2424.pcap
tcpdump: listening on en0, link-type EN10MB (Ethernet), capture size 262144 bytes
10 packets captured
93 packets received by filter
0 packets dropped by kernel

➜  ~ tcpdump -r 2424.pcap
reading from file 2424.pcap, link-type EN10MB (Ethernet)
16:49:47.874743 IP 139.224.xxx.xx.kofax-svr > 192.168.199.171.53511: Flags [P.], seq 2832846522:2832846524, ack 587632101, win 227, options [nop,nop,TS val 1632491736 ecr 751973860], length 2
16:49:48.795743 IP 139.224.xxx.xx.kofax-svr > 192.168.199.171.53511: Flags [P.], seq 2:4, ack 1, win 227, options [nop,nop,TS val 1632492657 ecr 752338627], length 2
16:49:49.786093 IP 139.224.xxx.xx.kofax-svr > 192.168.199.171.53511: Flags [P.], seq 4:6, ack 1, win 227, options [nop,nop,TS val 1632493648 ecr 752339543], length 2

, но при воспроизведении клиентской консоли nc ничего не выводится

➜  ~ tcpreplay -ien0 2424.pcap
Warning: May need to run as root to get access to all network interfaces.
Actual: 10 packets (681 bytes) sent in 10.84 seconds
Rated: 62.7 Bps, 0.000 Mbps, 0.92 pps
Statistics for network device: en0
    Successful packets:        10
    Failed packets:            0
    Truncated packets:         0
    Retried packets (ENOBUFS): 0
    Retried packets (EAGAIN):  0

В чем причина?Я думаю, что выполнить tcpreplay так же, как отправить данные с сервера.Так в чем же разница между отправкой данных в консоли nc сервера и tcpreplay в клиенте?

1 Ответ

0 голосов
/ 09 декабря 2018

Причина проста;Вы не можете воспроизводить пакеты, используя tcpreplay, и ожидать, что клиент (или сервер) увидит данные как часть соединения.

Для этого есть много причин.Вот только три.

1) Когда клиент подключается к серверу, он выбирает (фактически случайный, хотя, вероятно, только увеличенный) эфемерный порт в качестве источника.Воспроизводимые данные будут содержать порт из исходного соединения, который почти наверняка не будет таким же, как тот, который использует клиент сейчас.

2) Когда соединение установлено, каждый из клиента и сервера устанавливаетслучайный начальный порядковый номер для его соединения с другим.Это число еще менее вероятно будет таким же в новом соединении.

3) Когда клиент отправляет SYN на сервер, даже если вы воспроизводите данные, сервер отправит обратно RST ACK, закрываяотключить соединение (независимо от воспроизводимых пакетов), потому что слушатель больше не доступен.

...