为什么使用Netcat监听端口不起作用

10

我在Ubuntu上运行以下命令:

nc -l -p 5004 -v  >> /home/anders/Dropbox/netcatFiles/test

这包括一个命令,使其监听5004端口。

我正在使用VLC将RTP流发送到5004端口。当我在Wireshark中观察回环接口时,我注意到带有消息“目标不可达”的ICMP数据包。

打开另一个VLC并告诉它在5004端口播放传入的数据,一切都可以正常工作,并且流可以播放。

为了让Netcat在5004端口监听,我应该怎么做?

2个回答

13

我认为您需要添加“-u”参数以便使其监听UDP。

默认情况下,netcat在TCP模式下工作,但RTP协议基于UDP。

“传输控制协议(TCP)虽然已经被标准化用于RTP,但通常不在RTP应用中使用,因为TCP更注重可靠性而不是及时性。相反,大多数RTP实现都建立在用户数据报协议(UDP)之上。”

http://en.wikipedia.org/wiki/Real-time_Transport_Protocol


以下命令可正常工作: nc -u -l -p 5004 -v >> /home/anders/Dropbox/netcatFiles/test - Anders Branderud
1
我进行了快速检查,Harald Brinkhof是正确的。"-l -p 5004" 不应该起作用。我怀疑你使用的是旧版本的netcat。我拥有的那个支持你的 "-p 5004" 语法的版本报告的版本号为1.10,而在另一个盒子上,我有一个看起来更新的版本(更多选项等),它具有与Harald引用的相同的手册页面。 - LSerni

8

不要使用 -p (man nc (1))

-p source_port 指定nc应使用的源端口,受特权限制和可用性限制。在使用-l选项时使用此选项是错误的。

所以只需指定即可。

nc -l 5004 -v  >> /home/anders/Dropbox/netcatFiles/test

然而,当我执行了上述命令时,它没有起作用。状态: 警告:0.0.19.140的反向名称查找失败当我执行以下操作时: nc -u -l -p 5004 -v >> /home/anders/Dropbox/netcatFiles/test 它可以正常工作。 我得到的状态是: 从127.0.0.1:32843收到数据包 -> 127.0.0.1:5004(本地) - Anders Branderud
我使用nc -l 5004 >> output.txt进行监听测试,使用echo "tester" | nc 127.0.0.1 5004进行发送测试。虽然发送测试需要指定主机,但测试结果良好。 - Harald Brinkhof
感谢您的答复和评论!!根据Isernis最新的评论和我收到评论后所做的一些研究: 您提供的手册和我的nc版本似乎是旧版的nc。手册上写道: nc -l -p 端口号 [-选项] [主机名] [端口号] - Anders Branderud
Ubuntu实际上有(至少过去有)2个netcat软件包:一个基于OpenBSD nc的,另一个可能称为netcat-traditional的“传统”版本。这两个版本之间可能存在一些差异。 - Harald Brinkhof
1
我不确定“谢谢”的相反词是什么,但我需要添加“-p”才能使我的版本正常工作:“netcat(GNU Netcat)0.7.1”。看起来我是通过 Macports 在 Mac OS X 上安装的(提示是它位于“/opt/local/libexec/gnubin/nc”)。 - Sridhar Sarnobat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接