研究了一天的onvif协议,学会了如何扫描并发现onvif协议摄像头,协议我们后续再讲,在扫描过程中遇到了一个奇怪的问题,就是扫描程序,在一台虚拟机中能用,在另一台以太网虚拟机里就扫描不到,结果抓包发现,被扫描的设备也回应了消息,扫描程序却收不到
结果发现了是防火墙的问题,扫描到的虚拟机是关闭了防火墙,扫不到的虚拟机是开启了防火墙,并且只是打开了onvif的发送端口(事实证明这个端口没鸟用)
扫描的流程大致如下图
可以清晰的看出,扫描程序的虚拟机,需要打开的端口应该是那个随机端口,此处有3种做法,
- 是固定x的值,那么防火墙只需要打开这个x,但是缺点是,有可能你用的这个端口,被人占用
- 是方法1的变种,就是固定x也是3702,这样就不会有问题了,但是发送和接收是同一个端口,感觉怪怪的
- 是随机申请端口,随时开放端口和关闭端口,那样就稳妥一些,但是繁琐了一些。
哪个都行,没有什么高低之分,具体实现,我会另起文章讲解。
我还是想讲今天的重点:
因为我前面一直在查看onvif的端口,发现这种udp的协议,接收应答还真是麻烦,就突然想到了前面的dhcp协议,同样是udp,为何我并没有开启它的端口,它就能接收应答呢??
因为我一直用下面的命令查看开放端口
[root@localhost 41src]# firewall-cmd --zone=public --list-ports 514/tcp 514/udp 4321/tcp 4001/tcp 160/udp 161/udp 67/udp 3702/udp
结果并没有发现dhcp的端口在其中,难道dhcp和系统有私交?偷偷放过去了?
然后就查看防火墙的其他开发方法,终于被我发现了还有一种通过service的方式。
通过下面命令,我们可以查看到另一种方式所开启的端口
进一步,我们需要掌握都有哪些服务可以这么操作,命令firewall-cmd --get-service
[root@localhost 41src]# firewall-cmd --get-service RH-Satellite-6 RH-Satellite-6-capsule amanda-client amanda-k5-client amqp amqps apcupsd audit bacula bacula-client bgp bitcoin bitcoin-rpc bitcoin-testnet bitcoin-testnet-rpc ceph ceph-mon cfengine condor-collector ctdb dhcp dhcpv6 dhcpv6-client distcc dns docker-registry docker-swarm dropbox-lansync elasticsearch etcd-client etcd-server finger freeipa-ldap freeipa-ldaps freeipa-replication freeipa-trust ftp ganglia-client ganglia-master git gre high-availability http https imap imaps ipp ipp-client ipsec irc ircs iscsi-target isns jenkins kadmin kerberos kibana klogin kpasswd kprop kshell ldap ldaps libvirt libvirt-tls lightning-network llmnr managesieve matrix mdns minidlna mongodb mosh mountd mqtt mqtt-tls ms-wbt mssql murmur mysql nfs nfs3 nmea-0183 nrpe ntp nut openvpn ovirt-imageio ovirt-storageconsole ovirt-vmconsole plex pmcd pmproxy pmwebapi pmwebapis pop3 pop3s postgresql privoxy proxy-dhcp ptp pulseaudio puppetmaster quassel radius redis rpc-bind rsh rsyncd rtsp salt-master samba samba-client samba-dc sane sip sips slp smtp smtp-submission smtps snmp snmptrap spideroak-lansync squid ssh steam-streaming svdrp svn syncthing syncthing-gui synergy syslog syslog-tls telnet tftp tftp-client tinc tor-socks transmission-client upnp-client vdsm vnc-server wbem-http wbem-https wsman wsmans xdmcp xmpp-bosh xmpp-client xmpp-local xmpp-server zabbix-agent zabbix-server
以telnet为例
开启telnet service,
firewall-cmd --permanent --zone=public --add-service=telnet;firewall-cmd --reload
关闭telent service,
firewall-cmd --permanent --zone=public --remove-service=telnet;firewall-cmd --reload
如果想查看telnet服务对应的开放了哪些端口,可以如下操作
firewall-cmd --info-service=telnet 结果 telnet ports: 23/tcp protocols: source-ports: modules: destination:
firewall命令的详细解释,可以参考某高人的文章 https://ipcmen.com/firewall-cmd
马上就国庆节了,本来想提早一天回家,结果触犯了扎堆请假的bug,没好意思再去请了
也好,那就节后再请两天,还能多休一天



