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

网友投稿 382 2022-08-24


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-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中的optparse模块的使用

Python中的socket网络模块


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Python中的socket网络模块(Python tcp socket)
下一篇:Python爬虫之使用正则表达式抓取数据(爬虫 正则表达式怎么看匹配)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~