我将进行编写多线程端口扫描,但是我因为在一些线程方面的理论知识基础薄弱,所以代码比较简陋。
# coding:utf-8
# !usr/bin/python
from socket import *
import threading
import time
def main():
host = input("请输入要扫描的ip: ")
t = time.time()
for port in range(0, 2000):
thread = threading.Thread(target=TCP_PORT, args=(host, port, 0.01)) #这是最关键的,如何使用请在我博客中搜索 threading模块
thread.start()
time.sleep(0.006) #加入一个time模块,防止线程之间因为访问资源产生冲突,还有就是是threading模块中相应锁进程的没看懂,需要后续钻研
thread.join()
print("用时: ", time.time() - t)
def TCP_PORT(ip, port, delay): #这个函数可以认为就是单线程的扫描,没有什么其他的作用
s = socket(AF_INET, SOCK_STREAM)
s.settimeout(delay)
try:
result = s.connect_ex((ip, port))
if result == 0:
print("[+] %s is open" % port)
'''else:
print("[-] %s is closed" % port)'''
s.close()
except:
pass
main()