Netcat的丢弃传入数据包(Netcat drops incoming packets)

2019-10-19 16:03发布

我使用bash命令的Ubuntu机上用于控制测量仪器。 这两种机器都连接到相同的LAN。 测量仪器TCP端口5025上侦听SCPI命令。 标准测试 - 询问仪器的ID - 很好地工作:

mjh@Ubuntu:~$ echo "*IDN?" | netcat 192.168.0.10 5025
Rohde&Schwarz,ZVL-3,12345

但是,当我查询数据(我希望1818个ASCII字符),netcat的只是立即返回:

mjh@Ubuntu:~$ echo "TRAC? TRACE1" | netcat 192.168.0.10 5025
mjh@Ubuntu:~$

不过,我可以查询没有问题的交互式telnet会话数据:

mjh@Ubuntu:~$ telnet 192.168.0.10 5025
Trying 192.168.0.10...
Connected to 192.168.0.10.
Escape character is '^]'.
TRAC? TRACE1
-6.993319702E+001,-6.755982208E+001, ... (1818 chars in total)

我想在脚本中使用这些命令,这就是为什么我要使用的netcat。

我怎样才能找出原因的telnet工程和netcat的不? 难道是大封装尺寸?

到目前为止,我(失败)尝试了以下内容:

  • 使用netcat -C用于CRLF作为行结束
  • 使用netcat -t更多的telnet兼容性
  • 使用netcat -u出于绝望

Answer 1:

根本原因

Netcat的和telnet处理连接不同。

远程登录

  • 建立与仪器的TCP连接
  • 当用户输入数据时,将其发送到仪器(在此情况下“TRAC?TRACE1”)
  • 从仪器接收数据(多个数据包,如果需要的话)
  • 当用户结束交互式会话,用仪器靠近TCP连接
  • 退出程序

Netcat的

  • 建立与仪器的TCP连接
  • 发送由管道输送到netcat的数据(在这种情况下,“TRAC?TRACE1”)
  • 立即请求连接将被终止
  • 接收的任何数据的仪器挤过
  • 退出节目后仪器确认并完成TCP连接的关闭。

具体而言,使用netcat的用于查询ID时,仪器立即返回其内的ID ACK 。 但请求数据时,仪器需要更长的时间来获取它,并在仪器的网络适配器关闭连接,可以发送数据之前。

找到病根

注释建议使用这些工具,但它不是小事,所以我将深入研究的一般程序:

  • 在Ubuntu的计算机上,安装的tcpdump

     sudo apt-get install tcpdump 
  • 找到你的网络适配器的ID(看一下eth0,eth1的,或者任何提醒您在网络适配器的。对我来说,我的eth1)。

     sudo tcpdump -D 
  • 捕获所有流量,要么去或来自端口5025(SCPI的端口)。 S0的选项告诉和tcpdump捕获整个包,而不仅仅是最初的几个字节。 -w选项使tcpdump的原始数据保存到文件中。

     sudo tcpdump -i eth1 -s0 port 5025 -w netcat_trac.dump 
  • 开的第二终端窗口,执行一个netcat的命令(或telnet会话):

      echo "TRAC? TRACE1" | netcat 192.168.0.10 5025 
  • 在第一个终端窗口中,通过按压停止tcpdump的CTRL+C

  • 重复此几种不同scenarious,节省每次输出到不同的使用.dump文件。

  • 在具有GUI(Windows中,我的情况,而且也适用于Ubuntu的)任何一台PC上安装Wireshark的,并期待在使用.dump文件。

  • 注意该系列的SYN (“我想建立一个连接”), SYN+ACK (“我理解你,也要让你的连接”), FIN+ACK (我想停下来跟你说话)旗帜在捕获的数据包。 在比较这些标志出现在不同的场景顺序。 如果你不知道这是什么意思, 这是一个伟大的介绍 。 (如果你想进入粗糙的细节,也注重“序列”和“确认”的数字。)

一个解法

告诉netcat的关闭通过使用-q开关的连接之前要等待。

echo "TRAC? TRACE1" | netcat -q 1 192.168.0.10 5025

在上面的命令,等待时间为1秒。

我相信有更好的解决方案(等待一个包PSH集而不是一个固定的时间可以是太短或太长),但这个作品不够好,我。



文章来源: Netcat drops incoming packets