0x00:端口扫描原理
利用python内置函数socket:
解析ip地址,对一定的端口进行扫描,设定响应时间和利用多线程加快扫描速度。
0x01:python脚本
from socket import *
import threading
lock = threading.Lock() #调用lock对象
openNum = 0
threads = []
def portScanner(host,port):
global openNum #定义公共变量
try:
s = socket(AF_INET,SOCK_STREAM) #调用socket解析域名,ipv4
s.connect((host, port))
lock.acquire() #使用acquire,release 让中间的变量每次只能被一个线程更改,防止变量混乱,保证线程同步
openNum += 1
print("[+] %d open" % port)
lock.release()
s.close()
except:
pass
def main():
hosts = str(input())
l = int(input())
setdefaulttimeout(1) #设定响应时间
for p in range(1,l):
t = threading.Thread(target=portScanner,args=(hosts,p)) #调用多线程,传入函数和参数
threads.append(t) #将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()