为什么tcpdump看到回复,但不是netcat

我在netcat中使用UDPdebuggingOpenVPN站点到站点的连接。

我可以让数据包在一个方向stream动(主机A->主机B),但不是反向的。

root@hosta:~# nc 10.0.3.2 1234 -u root@hostb:~# nc -l 1234 -u 

奇怪的是,当在主机A中运行tcpdump时,我实际上看到了从主机B到达的UDP数据包:

 root@hosta:~# tcpdump port 1234 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes 17:36:04.695423 IP hosta.46603 > 10.0.3.2.1234: UDP, length 4 17:36:06.484233 IP 10.0.3.2.1234 > hosta.46603: UDP, length 4 

但是,netcat根本不输出任何东西。 我已经尝试了nc strace ,甚至没有收到任何sockets。

我还能做些什么来诊断呢?

只有给出的命令,这将是容易的! 对于UDP,Netcat默认为不带-u的TCP。 当nc -lp 1234 -u侦听端口1234上的UDP连接时, nc 10.0.3.2 1234尝试打开一个TCP连接。

我build议在你的Netcat的两端添加-v -v ,因为它会在最后给你发送/ rcvd统计信息。 请添加此信息并更正您使用的命令,以便我们知道您的debugging条件是正确的。

还可以使用tcpdump port 1234 -XX来查看这些数据包中的HEX和ASCII。


但是,根据tcpdump port 1234的输出结果,您可能仍然拥有正确的命令,但让我们稍微玩一下这个错误,看看我们如何能够知道:

既然你有UDP数据包

 IP hosta.46603 > 10.0.3.2.1234: UDP, length 4 IP 10.0.3.2.1234 > hosta.46603: UDP, length 4 

而不是TCP数据包

 IP hosta.46603 > 10.0.3.2.1234: Flags [S], seq 1384271454, win 14600, options [mss 1460,sackOK,TS val 1969077197 ecr 0,nop,wscale 3], length 0 IP 10.0.3.2.1234 > hosta.46603: Flags [R.], seq 0, ack 1384271455, win 0, length 0 

让我们假设你有它反之亦然:

 root@hosta:~# nc 10.0.3.2 1234 -u root@hostb:~# nc -lp 1234 

但在这种情况下,你只会看到第一个

 IP hosta.46603 > 10.0.3.2.1234: UDP, length 4 

并且不会有任何UDP数据包到另一个方向!

然后,如果你不小心在两端都使用了相同的nc <IP> 1234 -u ,那么你将拥有两条线路,但是端口不会是相同的,而是像这样:

 IP hosta.46603 > 10.0.3.2.1234: UDP, length 4 IP 10.0.3.2.73644 > hosta.1234: UDP, length 4