我有一个我开发的Ubuntu Server 10.04应用程序,通过UDP端口接收消息。 这个应用程序的最终目的是接收工作人员的3G调制解调器在现场发出的消息。
如果在其他的ubuntu服务器或我的Vista笔记本电脑上使用netcat(与我的testing机器都在同一个局域网上)发送消息,则消息正确到达并出现在我的应用程序中。 但是,如果我出门到我的车,并使用其3G调制解调器发送来自相同的Vista笔记本电脑的消息,它不起作用。 如果我运行tcpdump -A,我看到邮件正确到达,但它从来没有传递到我的应用程序。 显然,操作系统是一个select不传递消息(否则它们不会出现在tcpdump中,也不会从我的应用程序从本地机器接收它们)。 我没有在这台机器上安装任何防火墙软件,也不知道默认安装的任何东西会阻止stream量。
sudo iptables –list返回
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
我不太熟悉iptables,但是在我看来,这是告诉它不要做任何事情。
可能会发生什么,阻止了我的消息被传递?
用请求的信息编辑:
我的本地地址是10.222.110.79/24。
我的tcpdump命令是
sudo tcpdump -i eth0 udp port 6203 -A -f -n
对于内部发送的消息,显示tcpdump
IP 10.222.110.75.60856 > 10.222.110.79.6203: UDP
外部发送的显示
IP 108.116.172.0.3072 > 10.222.110.79.6203: UDP
(我假设第二条消息反映了企业防火墙重新路由该消息,我将它发送到我们的公共IP,并且防火墙有一个(临时)规则,将所有UDP 6203stream量发送到我的开箱。
这是我的netcat命令
nc -u 10.222.110.79 6203
然后我只需input东西,然后按回车即可发送。 从外部,我用我们的公有知识产权取代IP,但不做任何其他更改。
我会开始从等式中删除3G。 这听起来像你已经这样做,并已发现它的工作。 如果是这样,3G服务可能会阻止UDP通信。 或者,UDP数据包可能根本不存活,UDP被devise用于高吞吐量,低可用性。 易变的3Gnetworking恰恰是TCPdevise的环境,对UDP应用来说是次优的。
看起来问题实际上是由Netcat本身造成的。 最初,3G调制解调器configuration错误,这就是为什么我首先启动了Netcat。 我发现,即使UDP是无连接的,Netcat也会做一些时髦的东西来模拟通过UDP连接。 我不会声称完全理解它,但不知何故,这导致数据不能交付。 最后,我终于让3G调制解调器在没有netcat的情况下运行,而且工作。 数据正确传递。 一旦我再次启动netcat发送testing数据,数据就停止发送。 杀死netcat,并开始交付。 离奇。
感谢大家的帮助。