学习了nmap工具发现真的很强大啊,但是如果要在shell script里面想要输出自己想要的格式会很蛋疼啊,那么python-nmap就显示出了价值。
当然python-nmap没有nmap那么强大的功能,只提供了端口扫描。
现在用一个示例简单讲一下python-nmap的使用方法:
>>> import nmap >>> nm = nmap.PortScanner() >>> nm.scan('115.239.210.26', '20-443') {'nmap': {'scanstats': {'uphosts': u'1', 'timestr': u'Mon Jul 29 18:52:34 2013', 'downhosts': u'0', 'totalhosts': u'1', 'elapsed': u'14.88'}, 'scaninfo': {u'tcp': {'services': u'20-443', 'method': u'syn'}}, 'command_line': u'nmap -oX - -p 20-443 -sV 115.239.210.26'}, 'scan': {u'115.239.210.26': {'status': {'state': u'up', 'reason': u'echo-reply'}, 'hostname': '', u'tcp': {80: {'state': u'open', 'reason': u'syn-ack', 'name': u'http'}}}}}创建PortScanner实例,然后扫描159.239.210.26这个IP的20-443端口。
>>> nm.scaninfo() {u'tcp': {'services': u'20-443', 'method': u'syn'}} >>> nm.command_line() u'nmap -oX - -p 20-443 -sV 115.239.210.26'打印简单信息
>>> nm.all_hosts() [u'115.239.210.26']查看有多少个host
>>> nm['115.239.210.26'] {'status': {'state': u'up', 'reason': u'echo-reply'}, 'hostname': '', u'tcp': {80: {'state': u'open', 'reason': u'syn-ack', 'name': u'http'}}}查看该host的详细信息
>>> nm['115.239.210.26'].all_protocols() [u'tcp']查看该host包含的所有协议
>>> nm['115.239.210.26']['tcp'] {80: {'state': u'open', 'reason': u'syn-ack', 'name': u'http'}} >>> nm['115.239.210.26']['tcp'].keys() [80]查看该host的哪些端口提供了tcp协议
>>> nm['115.239.210.26']['tcp'][80] {'state': u'open', 'reason': u'syn-ack', 'name': u'http'} >>> nm['115.239.210.26']['tcp'][80]['state'] u'open'查看80端口的详细信息
>>> nm['115.239.210.26'].has_tcp(21) False >>> nm['115.239.210.26'].has_tcp(80) True查看该端口是否提供了tcp协议
>>> nm.scan(hosts='192.168.1.0/24', arguments='-n -sP -PE -PA21,23,80,3389')还可以像这样设置nmap执行的参数
以上只是一些常用的比较简单的功能,如果需要更复杂的功能,请点击python-nmap官网