利用Python脚本写端口扫描器socket|利用Python脚本写端口扫描器socket,python-nmap

目录

  • Socket模块编写
    • 扫描给定主机是否开放了指定的端口
  • python-nmap模块编写
    • 扫描给定ip或给定网段内指定端口是否开放
前言:
一个用python写的简单的端口扫描器,python环境为 3.7.0,windows系统

Socket模块编写
扫描给定主机是否开放了指定的端口
【利用Python脚本写端口扫描器socket|利用Python脚本写端口扫描器socket,python-nmap】TCP连接扫描是利用TCP的三次握手来确定主机的端口是否开放。确定主机端口开放之后,给端口发送消息,接收端口返回的消息,然后判断该端口运行的服务。
使用时,-H 参数可以提供主机的域名或者ip地址,-p/-P 写要扫描的端口,多个端口用逗号分隔
# -*- coding: utf-8 -*-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)returntry: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.HostPorts=str(options.Ports).split(',')if (Host==None)|(Ports==None): ##如果主机和端口都是空的话print(parser.usage)exit(0)portScan(Host,Ports)if __name__=='__main__':main()

利用Python脚本写端口扫描器socket|利用Python脚本写端口扫描器socket,python-nmap
文章图片


python-nmap模块编写 我们还可以通过调用nmap进行端口扫描。

扫描给定ip或给定网段内指定端口是否开放
-H 参数可以扫描一个ip地址也可以扫描一个网段,-p 只能指定一个端口
# -*- coding: utf-8 -*-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.HostPort=options.Portif (Hosts==None)|(Port==None): #如果主机和端口都是空的话print(parser.usage)exit(0) #退出else:Test(Hosts,Port)if __name__=='__main__':main()

利用Python脚本写端口扫描器socket|利用Python脚本写端口扫描器socket,python-nmap
文章图片

到此这篇关于利用Python脚本写端口扫描器socket,python-nmap的文章就介绍到这了,更多相关Python socket,python-nmap内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    推荐阅读