我在TCP连接中遇到了非常奇怪的行为。使用以下命令创建侦听器:
ncat-4-l 10000
发送数据:
telnet公共IP 10000
使用tcpdump
分析数据并检查与netstat
的连接状态。当我发送数据包时(1,2,3,4,5…依此类推)。在服务器端,只接收到4或5个数据包,然后什么也没发生。tcpdump没有显示任何即将到来的数据包,而netstat显示"已建立"连接状态。
ncat public-ip 10000
命令也会发生同样的情况,ehrn将其用作客户端。
当我使用^] and quit
的telnet命令退出时,telnet无法与服务器连接(错误:远程主机拒绝连接)。若我将终止ncat -4 -l 10000
命令并重新启动,那个么将从客户端(telnet)建立连接,服务器将只接收4-5个数据包。
我已经通过这个url 交叉检查了所有tcp参数
有人知道服务器端发生了什么吗?我该如何调试它?
编辑:1:
客户端机器上的TCPDUMP
//Data-pkt-3
13:26:55.844538 IP (tos 0x10, ttl 64, id 37219, offset 0, flags [DF], proto TCP (6), length 55)
10.240.8.230.53839 > PUBLIC-IP.PORT: Flags [P.], cksum 0x9660 (correct), seq 9:12, ack 4, win 229, options [nop,nop,TS val 301276907 ecr 436759593], length 3
//Data-pkt-4
13:26:59.916512 IP (tos 0x10, ttl 64, id 37220, offset 0, flags [DF], proto TCP (6), length 55)
10.240.8.230.53839 > PUBLIC-IP.PORT: Flags [P.], cksum 0x8035 (correct), seq 12:15, ack 4, win 229, options [nop,nop,TS val 301277925 ecr 436763991], length 3
13:27:00.179644 IP (tos 0x10, ttl 64, id 37221, offset 0, flags [DF], proto TCP (6), length 55)
10.240.8.230.53839 > PUBLIC-IP.PORT: Flags [P.], cksum 0x7ff3 (correct), seq 12:15, ack 4, win 229, options [nop,nop,TS val 301277991 ecr 436763991], length 3
13:27:00.443650 IP (tos 0x10, ttl 64, id 37222, offset 0, flags [DF], proto TCP (6), length 55)
10.240.8.230.53839 > PUBLIC-IP.PORT: Flags [P.], cksum 0x7fb1 (correct), seq 12:15, ack 4, win 229, options [nop,nop,TS val 301278057 ecr 436763991], length 3
确保iptables没有阻塞您的连接:
# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
还要验证您是否在tcpdump 中捕获了正确的接口
运行以下命令以获取要与tcpdump一起使用的接口列表:
# ip a|grep :|egrep -v 'link|inet'|awk '{print $2}'|sed 's/://'
lo
enp0s31f6
wlp2s0
所以你要尝试的dcpdump命令是(有线的):
# tcpdump -i enp0s31f6
或者(wifi):
# tcpdump -i wlp2s0
Linux上的接口名称可能不同。