Fedora Core12的防火墙会过滤掉部分IP数据包,在开发调试时建议关闭防火墙

今天继续完成视频转发工具,使用udp监听本地的8003端口,接收用户发送的视频转发请求。

程序完成了,自己写个小工具模拟数据请求,来测试程序是否正常工作。

这时候,出问题了。

测试步骤:

(1)在虚拟机(Fecdora Core12)里运行程序

(2)在主机里使用工具发送模拟请求

(3)查看程序是否正常工作

但是,结果是:虚拟机Fecord Core12里监听的socket一直无法接收到主机发送的udp数据包,使用lsof -i查看,程序确实打开了监听端口:

[root@chu xsock]# lsof -i
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
rpcbind 791 rpc 6u IPv4 5997 0t0 UDP *:sunrpc
rpcbind 791 rpc 7u IPv4 6001 0t0 UDP *:966
rpcbind 791 rpc 8u IPv4 6002 0t0 TCP *:sunrpc (LISTEN)
rpcbind 791 rpc 9u IPv6 6004 0t0 UDP *:sunrpc
rpcbind 791 rpc 10u IPv6 6006 0t0 UDP *:966
rpcbind 791 rpc 11u IPv6 6007 0t0 TCP *:sunrpc (LISTEN)
cupsd 823 root 6u IPv6 6146 0t0 TCP localhost:ipp (LISTEN)
cupsd 823 root 7u IPv4 6147 0t0 TCP localhost:ipp (LISTEN)
cupsd 823 root 9u IPv4 6150 0t0 UDP *:ipp
rpc.statd 1013 rpcuser 5u IPv4 6940 0t0 UDP *:webster
rpc.statd 1013 rpcuser 7u IPv4 6949 0t0 UDP *:33396
rpc.statd 1013 rpcuser 8u IPv4 6953 0t0 TCP *:40877 (LISTEN)
sshd 1181 root 3u IPv4 7542 0t0 TCP *:ssh (LISTEN)
sshd 1181 root 4u IPv6 7544 0t0 TCP *:ssh (LISTEN)
sendmail 1196 root 4u IPv4 7592 0t0 TCP localhost:smtp (LISTEN)
dhclient 10321 root 6u IPv4 34639 0t0 UDP *:bootpc
videotran 10615 root 4u IPv4 37324 0t0 UDP *:mcreport ------------------------->监听的端口

使用tcpdump port 8003,也确实收到了主机发送的udp数据包:

[root@chu testVideoCMD]# tcpdump port 8003
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
18:04:42.155902 IP 192.168.110.69.7293 > 192.168.110.100.mcreport: UDP, length 112

但是,socket的recvfrom就是收不到数据。

而且,在虚拟机里用同样的工具发送却能收到。

问题会在哪呢?

由于socket这块是从别的项目移植过来的代码,我担心代码可能存在bug,因此检查了一遍又一遍,确认没有问题;又请头儿看了一遍,确认也没问题。我甚至都怀疑测试工具是不是有问题;还把虚拟机的网络连接从NAT到桥接到其他所有方式,都试了个遍。

最后,头儿建议把防火墙关掉。

虽然之前也考虑到了防火墙,但想:既然tcpdump都收到数据了,应该不会被防火墙过滤掉阿?头儿说,tcpmdump做的很底层,可能防火墙过滤不掉,但把我们的程序给过滤掉了。

于是,我就尝试着把防火墙关掉了:

service iptables stop

结果证明:就是防火墙捣的鬼。关掉防火墙后一切正常了。


关于防火墙的一些知识:

关闭Fedora的防火墙

重启后生效
开启: chkconfig iptables on
关闭: chkconfig iptables off 或者 /sbin/chkconfig --level 2345 iptables off

2) 即时生效,重启后失效

service 方式
开启: service iptables start
关闭: service iptables stop

iptables方式

查看防火墙状态:
/etc/init.d/iptables status

暂时关闭防火墙:
/etc/init.d/iptables stop

重启iptables:
/etc/init.d/iptables restart

http://www.cnblogs.com/eoiioe/archive/2008/12/28/1363913.html

问题:iptable为什么其他机器发送到8003端口的udp数据包给过滤掉呢?

看来有时间得了解一下iptable的机制了。

刚才查了一下:我使用的8003端口是小于1024,已被一下服务使用的端口:

mcreport 8003/tcp Mulberry Connect Reporting Service
mcreport 8003/udp Mulberry Connect Reporting Service

要配置防火墙也可以通过:system-config-firewall命令来搞定。 

最后,结论是:万恶的防火墙阿,在开发时只会碍事,能关就关掉吧。

ps:悼念俺这悲催的一天。。。


 

原文地址:https://www.cnblogs.com/chutianyao/p/2318423.html