Windows和Ubuntu间TCP连接测试

起因是想在Ubuntu上用Synergy,但是发现怎么都连不上。鼓捣了半天发现似乎Ubuntu监听,Windows测试TCP连接总是不成功,反之却能成功,大概问题就在这,尚未解决先记录一下。

基本情况

两台机子,一台运行Ubuntu22.04,一台运行Windows10。机器间用一根网线直连,Ubuntu端手动配192.168.1.1/24地址,另一边配192.168.1.2/24。

  • 两者之间能ping通
  • 可以保证Ubuntu侧防火墙没开,iptables也是空;几乎能确定Windows侧防火墙正常
  • 之前两台机器都运行Windows10时,Synergy可以正常使用,说明原本Windows上24800端口能正常建立tcp连接

测试记录

Windows服务端 ← Ubuntu客户端

Windows侧Powershell运行脚本等待连接

ps 复制代码
$listener = [System.Net.Sockets.TcpListener]::new([System.Net.IPAddress]::Any, 24800)
$listener.Start()
Write-Host "Listening on port 24800..."
$client = $listener.AcceptTcpClient()
Write-Host "Connection received!"
$stream = $client.GetStream()
$reader = New-Object System.IO.StreamReader($stream)
while ($client.Connected) {
    $data = $reader.ReadLine()
    if ($data) {
        Write-Host "Received: $data"
    }
}
$client.Close()
$listener.Stop()

Ubuntu端用ncat发送请求

bash 复制代码
nc 192.168.1.2 24800

正常建立连接,终端中传什么windows侧都能输出

Ubuntu服务端 ← Windows客户端

Ubuntu侧用ncat监听端口

bash 复制代码
nc -l 24800

此时检查nc的运行情况均无异常,检查行为如下:

  • 此时执行 ss -tlnp | grep 24800 检查端口情况,得到反馈LISTEN 0 1 0.0.0.0:24800 0.0.0.0:* users:(("nc",pid=30444,fd=3)),证明nc有在好好监听0.0.0.0的24800端口
  • 此时运行 nc 127.0.0.1 24800 尝试自己连自己,发现确实可以正确连接并传输数据,证明nc可以正确监听并建立连接

然而Windows侧Test-NetConnection或用脚本尝试建立连接却不能成功

ps 复制代码
Test-NetConnection 192.168.1.1 -Port 24800

尝试此过程中在Ubuntu侧用tcpdump抓包,发现确实有SYN报文传入,应该是Ubuntu侧没有给出回应;大概问题就出在Ubuntu的某些配置上了

bash 复制代码
sudo tcpdump -i any port 24800 -nn

## 有监听到内容
tcpdump: data link type LINUX_SLL2
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on any, link-type LINUX_SLL2 (Linux cooked v2), snapshot length 262144 bytes
23:13:52.328526 enp38s0 In  IP 192.168.1.2.6786 > 192.168.1.1.24800: Flags [S], seq 4189060361, win 64240, options [mss 1460,nop,wscale 8,sackOK,TS val 1190883235 ecr 0], length 0
23:13:53.338401 enp38s0 In  IP 192.168.1.2.6786 > 192.168.1.1.24800: Flags [S], seq 4189060361, win 64240, options [mss 1460,nop,wscale 8,sackOK,TS val 1190884245 ecr 0], length 0
23:13:55.349621 enp38s0 In  IP 192.168.1.2.6786 > 192.168.1.1.24800: Flags [S], seq 4189060361, win 64240, options [mss 1460,nop,wscale 8,sackOK,TS val 1190886256 ecr 0], length 0
23:13:59.358816 enp38s0 In  IP 192.168.1.2.6786 > 192.168.1.1.24800: Flags [S], seq 4189060361, win 64240, options [mss 1460,nop,wscale 8,sackOK,TS val 1190890265 ecr 0], length 0
23:14:07.373485 enp38s0 In  IP 192.168.1.2.6786 > 192.168.1.1.24800: Flags [S], seq 4189060361, win 64240, options [mss 1460,nop,wscale 8,sackOK,TS val 1190898280 ecr 0], length 0
^C
5 packets captured
5 packets received by filter
0 packets dropped by kernel