Python脚本写端口扫描器(socket,python-nmap)

目录

​Socket模块编写​

​扫描给定主机是否开放了指定的端口​

​python-nmap模块编写 ​

​扫描给定ip或给定网段内指定端口是否开放​

一个用python写的简单的端口扫描器,python环境为 3.7.0,windows系统

Socket模块编写

扫描给定主机是否开放了指定的端口

TCP连接扫描是利用TCP的三次握手来确定主机的端口是否开放。确定主机端口开放之后,给端口发送消息,接收端口返回的消息,然后判断该端口运行的服务。

使用时,-H 参数可以提供主机的域名或者ip地址,-p/-P 写要扫描的端口,多个端口用逗号分隔

-*- coding: utf-8 -*-"""Created on Sat Nov  3 16:44:28 2018@author: 小谢"""import optparsefrom socket import *import threadingthreadLock=threading.Lock()    #实例化threadLock对象def connScan(Host,Port):    try:        conn=socket(AF_INET,SOCK_STREAM)        conn.connect((Host,Port))        conn.send('test message'.encode("utf-8")) #发送测试信息给端口        results=conn.recv(100)                    #接收主机返回的信息        threadLock.acquire()                      #加锁        print('[+]%d/tcp open'% Port)        print('[+] '+results.decode("utf-8"))        conn.close()    except Exception as e:        threadLock.acquire()        print(e)        print('[-]%d/tcp closed'% Port)    finally:        threadLock.release()           #释放锁        conn.close()def portScan(Host,Ports):    try:        IP=gethostbyname(Host)          ##获得对应主机的ip地址    except:        print("[-] Cannot resolve '%s':Unknown host" %Host)        return    try:        Name=gethostbyaddr(Host)     ##获得ip对应主机的信息        print ("\n[+] Scan Results for:"+Name[0])    except:        print ("\n[+] Scan Results for:"+IP)    setdefaulttimeout(1)    for Port in Ports:        print ("Scanning port "+Port)        connScan(Host,int(Port))def main():    usage="usage %prog -H  -p/-P "    parser=optparse.OptionParser(usage)  #创建对象实例    parser.add_option('-H',dest='Host',type='string',help='target host')   ##需要的命令行参数    parser.add_option('-P','-p',dest='Ports',type='string',help='target ports')    (options,args)=parser.parse_args()    Host=options.Host    Ports=str(options.Ports).split(',')    if (Host==None)|(Ports==None):         ##如果主机和端口都是空的话        print(parser.usage)        exit(0)    portScan(Host,Ports)if __name__=='__main__':    main()

Python脚本写端口扫描器(socket,python-nmap)

python-nmap模块编写

我们还可以通过调用nmap进行端口扫描。

扫描给定ip或给定网段内指定端口是否开放

-H 参数可以扫描一个ip地址也可以扫描一个网段,-p 只能指定一个端口

-*- coding: utf-8 -*-"""Created on Thu Nov  8 14:26:15 2018@author: 小谢"""import nmapimport optparsedef Test(Hosts,port):    nm=nmap.PortScanner()    nm.scan(Hosts,port)    port_int=int(port)                            #将端口从字符串转化为int类型的    for t in nm.all_hosts():        if nm[t].has_tcp(port_int):                #如果445端口提供了TCP协议            state=nm[t]['tcp'][port_int]['state']  #判断该TCP 445 端口的状态            if state=='open':                print ('[+]Found Target Host:'+t)    returndef main():    usage="usage %prog -H  -p/-P "    parser=optparse.OptionParser(usage)  #创建对象实例    parser.add_option('-H',dest='Host',type='string',help='target host')   ##需要的命令行参数    parser.add_option('-P','-p',dest='Port',type='string',help='target ports')    (options,args)=parser.parse_args()    Hosts=options.Host    Port=options.Port    if (Hosts==None)|(Port==None):         #如果主机和端口都是空的话        print(parser.usage)        exit(0)                           #退出    else:        Test(Hosts,Port)if __name__=='__main__':    main()

Python脚本写端口扫描器(socket,python-nmap)

相关知识点:Python中的optparse模块的使用

Python中的socket网络模块

Original: https://blog.51cto.com/csnd/5501436
Author: csnd1024
Title: Python脚本写端口扫描器(socket,python-nmap)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/513317/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球