我在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