• 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:悼念俺这悲催的一天。。。


     

  • 相关阅读:
    Python面向对象详解
    使用树莓派搭建LoRaWAN网关并接入腾讯云物联网开发平台
    dajngo
    dajngo 项目目录结构调整
    Django
    nacos的简单使用
    MySQL数据库开发规范
    mabatis的sql标签
    直接插入100w数据报错
    大数据量插入到数据库
  • 原文地址:https://www.cnblogs.com/chutianyao/p/2318423.html
Copyright © 2020-2023  润新知