![PHP 侦听器未捕获 TCP 数据包](https://linux22.com/image/1329598/PHP%20%E4%BE%A6%E5%90%AC%E5%99%A8%E6%9C%AA%E6%8D%95%E8%8E%B7%20TCP%20%E6%95%B0%E6%8D%AE%E5%8C%85.png)
我有一个设备(GPS 定位器),它通过给定的 IP 地址和给定的端口向我的服务器发送 TCP(我认为是)数据包。由于我只能通过 SSH 访问该服务器,因此我打开了两个会话并tcpdump
在其中一个会话中运行(使用适当的参数),在第二个会话中运行我自己的侦听器(用 PHP 编写)。
当我从任何浏览器连接到该 IP 和端口时,我清楚地看到这两个 IPtcpdump
和我自己监听器捕获的流量。因此,我认为一切正常。
然而,当我强制我的定位器向该 IP/端口发送数据时,它只tcpdump
响应,显示他已经捕获了某物,而我自己的听众的输出仍然是空的。
我是网络和 TCP 方面的新手,所以我可能误以为这是 TCP 连接。有经验的人可以通过查看tcpdump
捕获的内容来确认这一点吗:
10:43:37.028958 IP 87.111.103.7.2020 > 192.168.1.2.7777: Flags [S], seq 1457768261, win 5120, options [mss 1360,nop,wscale 0,nop,nop,TS[|tcp]>
10:43:37.029564 IP 192.168.1.2.7777 > 87.111.103.7.2020: Flags [S.], seq 1118512962, ack 1457768262, win 5792, options [mss 1460,nop,nop,TS[|tcp]>
10:43:37.526145 IP 87.111.103.7.2020 > 192.168.1.2.7777: Flags [.], ack 1, win 5200, options [nop,nop,TS val 79 ecr 35113125], length 0
10:43:37.526934 IP 192.168.1.2.7777 > 87.111.103.7.2020: Flags [P.], ack 1, win 362, options [nop,nop,TS val 35113175 ecr 79], length 152
10:43:38.225678 IP 87.111.103.7.2020 > 192.168.1.2.7777: Flags [.], ack 153, win 5048, options [nop,nop,TS val 80 ecr 35113175], length 0
10:43:43.765708 IP 87.111.103.7.2020 > 192.168.1.2.7777: Flags [P.], ack 153, win 5200, options [nop,nop,TS val 89 ecr 35113175], length 119
10:43:43.765768 IP 192.168.1.2.7777 > 87.111.103.7.2020: Flags [.], ack 120, win 362, options [nop,nop,TS val 35113799 ecr 89], length 0
10:43:44.445757 IP 87.111.103.7.2020 > 192.168.1.2.7777: Flags [P.], ack 153, win 5200, options [nop,nop,TS val 91 ecr 35113175], length 119
10:43:44.446014 IP 192.168.1.2.7777 > 87.111.103.7.2020: Flags [.], ack 120, win 362, options [nop,nop,TS val 35113867 ecr 91], length 0
10:47:38.675424 IP 192.168.1.2.7777 > 87.111.103.7.2020: Flags [F.], seq 153, ack 120, win 362, options [nop,nop,TS val 35137290 ecr 91], length 0
10:47:41.636064 IP 87.111.103.7.2020 > 192.168.1.2.7777: Flags [.], ack 154, win 5200, options [nop,nop,TS val 568 ecr 35137290], length 0
10:47:41.655520 IP 87.111.103.7.2020 > 192.168.1.2.7777: Flags [R.], seq 120, ack 154, win 5200, length 0
这真的是 TCP 连接(数据包类型)吗?如果是,那么有人知道为什么我的侦听器没有响应,而它在浏览器的 TCP 连接上正确响应?如果这不是 TCP 连接,那它是什么?我的侦听器应该侦听什么来捕获这种流量?
编辑:这里最让我困扰的是,来自我的本地化器的每个连接都标有tcpdump
(length 0
而响应总是有一定的长度)。但我注意到,浏览器连接也标有length 0
,所以这可能不是一个真正的问题。
答案1
只回答最后一点(你说这是最令人担心的)
这是我所看到的:所有数据都有长度,所有没有数据(syn、ack、fin、rst)的长度为 0。看起来还不错。
87.111.103.7 port 2020 -- 192.168.1.2 port 7777
syn ->
<- syn ack
ack ->
<-data
ack ->
data ->
<- ack
data ->
<- ack
<- fin
fin ->
rst ->
答案2
您的转储看起来不错。您的设备(我假设它是 192.168.1.2)发送长度大于 0 的数据包,并且您的服务器通过 0 字节 ACK 数据包确认收到。将它包含在 tcpdump 命令行中肯定会对您有所帮助-XX
。
tcpdump -XX port 2020