目录
- 一个简单的端口扫描器
- 多线程版本
前言:
通过端口扫描我们可以知道目标主机都开放了哪些服务,下面通过TCP connect来实现一个TCP全连接端口扫描器。
一个简单的端口扫描器
#!/usr/bin/python3 # -*- coding: utf-8 -*- from socket import * def portScanner(host,port): try: s = socket(AF_INET,SOCK_STREAM) s.connect((host,port)) print('[+] %d open' % port) s.close() except: print('[-] %d close' % port) def main(): setdefaulttimeout(1) for p in range(1,1024): portScanner('192.168.0.100',p) if __name__ == '__main__': main()
说明:
- 原理:对不同端口进行TCP连接,根据是否连接成功来判断端口是否打开
- AF_INET指定使用IPv4协议,SOCK_STREAM指定使用面向流的TCP协议
- connect((host, port)),向指定的IP:端口发起连接
- setdefaulttimeout(1),默认超时时间为1秒
多线程版本
#!/usr/bin/python3 # -*- coding: utf-8 -*- from socket import * import threading lock = threading.Lock() openNum = 0 threads = [] def portScanner(host,port): global openNum try: s = socket(AF_INET,SOCK_STREAM) s.connect((host,port)) lock.acquire() openNum+=1 print('[+] %d open' % port) lock.release() s.close() except: pass def main(): setdefaulttimeout(1) for p in range(1,1024): t = threading.Thread(target=portScanner,args=('192.168.0.100',p)) threads.append(t) t.start() for t in threads: t.join() print('[*] The scan is complete!') print('[*] A total of %d open port ' % (openNum)) if __name__ == '__main__': main()
说明:
- 使用多线程,1、t = threading.Thread() 2、t.start() 3、t.join()
- 多线程要保证线程安全(共享变量的一致性)就要对处理共享变量的代码段加锁
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
评论(0)