2014-01-14 32 views
0

在Linux系统上运行时,从另一个计算机地址获取UDP数据包,比如来自其他地址的192.168.0.2假设为192.168.166.66,我可以看到使用tcpdump进入的UDP数据包。但是,如果我使用netcat,我实际上并没有收到数据包。UDP数据包在操作系统级别被拒绝?

如果我在192.168.166.XXX网络上创建一个接口,那么netcat能够接收数据包没有问题。

我缺少什么基本的网络概念?为什么我需要在发送IP的网络上有一个接口,当我看到使用tcpdump时他们正在正确传送?

+0

不要在源主机和目标主机必须为每个正确的路由其他?我假设'0.2'知道如何路由到'166.66',因为你说你可以看到数据包进入;你确定返回的流量是否正确路由到'0.2'?主机之间的简单ping通信是否按预期工作? – admdrew

+0

admdrew,ping不起作用,因为接收者(192.168.0.2)在192.168.166.XXX网络上没有接口。但是对于tcpdump,我可以验证数据包是否进入界面,只是在那个时候被丢弃。 – ZaPaDoS

回答

2

tcpdump默认将接口置于promiscious模式,让您看到所有到达网络接口的数据包。但是,您的操作系统只处理去往本地系统的数据包,例如将本地或广播地址作为目的地。

+0

UDP流量为192.168.166.66 - > 192.168.0.2。 192.168.0.2是接收机器的地址,那么为什么数据包在操作系统级别被拒绝? – ZaPaDoS

+0

从你的初始描述中,我认为他们被拒绝,因为192.168.0.2不是你的本地地址。有了新的,但仍然很少有关您的网络设置的细节,我会假设没有路由回发件人,所以他们被拒绝。也许你应该从ifconfig -a和netstat -rn发布输出,以便人们可以真正看到你的网络是如何设置的 –

+0

因此,如果我将路由设置回192.168.166.66,我可以从那个地址接收它们?我不认为你需要UDP来工作。这是我错过的基本网络概念吗? – ZaPaDoS

相关问题