欢迎光临!
若无相欠,怎会相见

Python学习之端口扫描器(终)

接着学习。其实,在端口扫描工具里面有一个特别出名,那就是nmap,其官方网站是 https://nmap.org/,而Python里面也有一个nmap模块,此次就是使用 python-nmap 模块,借用nmap模块来进行端口扫描。

nmap安装

我的电脑系统是 Windows 10 ,Python版本是 2.7.13 64bit。最简单的安装方式是:pip install python-nmap ,不过,这样安装的时候,如果网络“不好”,这个不好指的是外网,下载速度会很慢。

于是,可以采用这种方法:pip install -i https://pypi.douban.com/simple/ python-nmap ,这样下载速度会快一些,采用的是豆瓣的源。你也可以在命令行下进入Python,输入help("modules") ,回车看看列表是否包含nmap模块。

端口扫描器代码

# -*- coding: utf-8 -*-
# @Time    : 2017/11/19 13:47
# @Author  : Liangz
# @Site    : www.liangz.org
# @File    : NmapScan.py
# @Software: PyCharm


import nmap
# import socket  #此处我想借用socket,把域名转换成IP
import optparse

def nmapScan(targetHost, targetPort):
    nmScan = nmap.PortScanner()
    results = nmScan.scan(targetHost, targetPort)
    state = results['scan'][targetHost]['tcp'][int(targetPort)]['state']
    print(u"[+] " + targetHost + u" tcp/ " + targetPort + " " + state)


def main():
    parser = optparse.OptionParser(u'使用方法:python NmapScan.py -H <目标主机> -p <目标端口>')
    parser.add_option('-H', dest='targetHost', type='string', help=u'指定目标主机')
    parser.add_option('-p', dest='targetPort', type='string', help=u'指定目标端口')
    (options, args) = parser.parse_args()
    targetHost = options.targetHost
    targetPort = options.targetPort
    args.append(targetPort)
    if (targetHost == None)|(targetPort == None):
        print(u'[-] 你必须指定目标主机和端口!')
        exit(0)
    for targetPort in args:
        nmapScan(targetHost, targetPort)


if __name__ == '__main__':
    main()

在我的实验中,这个代码不支持域名,扫描目标只能是IP,是一个缺陷,我会尝试修改修改。另外就是扫描速度很慢,我以百度的IP为目标,扫描 21 22 23 80 443 445 这几个端口。结果几分钟才扫描完成。结果如下:

E:\Projects\Python\20171114>python NmapScan.py -H 115.239.211.112 -p 21 22 23 80 443 445
[*] 115.239.211.112 tcp/ 22 filtered
[*] 115.239.211.112 tcp/ 23 filtered
[*] 115.239.211.112 tcp/ 80 open
[*] 115.239.211.112 tcp/ 443 open
[*] 115.239.211.112 tcp/ 445 filtered
[*] 115.239.211.112 tcp/ 21 filtered

注意

在测试本代码的时候,需要注意,Windows主机上需要安装 nmap ,现在地址为 https://nmap.org/dist/nmap-7.60-setup.exe。我已经经历过这样的教训。我之前没有安装,结果:nmap.nmap.PortScannerError: 'nmap program was not found in path. PATH is : ...... ,查到知乎才知道需要在本地计算机上面安装nmap 。

如有错误,敬请指出,谢谢阅读。         –2017-11-19  17:25:07

赞(1) 打赏
转载请注明:飘零博客 » Python学习之端口扫描器(终)
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

欢迎光临