4

サーバー内

# 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 の違いは何ですか?

4

1 に答える 1

4

理由は簡単です。を使用してパケットを再生することはできずtcpreplay、クライアント (またはサーバー) がデータを接続の一部として見ることを期待できません。

これには多くの理由があります。ここに3つだけあります。

1) クライアントがサーバーに接続するとき、ソースとして (事実上ランダムですが、インクリメントされる可能性が高い) 一時ポートを選択します。リプレイされたデータには元の接続のポートが含まれますが、これはクライアントが現在使用しているものとほぼ同じではありません。

2) 接続が確立されると、クライアントとサーバーはそれぞれ、相互接続用のランダムな初期シーケンス番号を確立します。この数は、新しい接続で同じになる可能性はさらに低くなります。

3) クライアントが SYN をサーバーに送信すると、データをリプレイしていても、サーバーは RST ACK を返し、リスナーが使用できなくなるため (リプレイされたパケットに関係なく) 接続をシャットダウンします。

于 2018-12-08T21:37:20.060 に答える