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()