啊 好久沒寫代碼了,想着多線程啥的都忘得差不多了
就下面這個啦,
#coding=utf-8
import time,threading
import socket
opennum=0
lock=threading.Lock()
def tcp_connect(ip,port):
global opennum
tcpsock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
tcpsock.settimeout(0.5)
try:
result=tcpsock.connect_ex((ip,port))
lock.acquire()
if(result==0):
print ("%s:%s 開啟" % (ip, port))
opennum+=1
lock.release()
else:
#print ("%s:%s 關閉" % (ip, port))
pass
tcpsock.close()
except socket.error as e:
print ("[!]錯誤",e)
def url_ip(url):
if('http://' in url or 'https://' in url):
url=url[url.find('://')+3:]
targetip = socket.getaddrinfo(url, 'http')[0][4][0]
print (targetip)
port_scan(targetip)
else:
targetip = socket.getaddrinfo(url, 'http')[0][4][0]
print (targetip)
port_scan(targetip)
def port_scan():
print ("***掃描開始***")
w = raw_input("ip=")
port=raw_input("port=")
start=time.time()
mythreads=[]
for i in range(int(port)):
t = threading.Thread(target=tcp_connect, args=(w,i))
mythreads.append(t)
for i in range(int(port)):
mythreads[i].start()
for i in range(int(port)):
mythreads[i].join()
end=time.time()
print("[*]總耗時%s" % time.strftime("%H:M:S", time.gmtime(end - start)))
print ("開放%s個端口" % opennum)
def main():
print "-------------"
print "1:ip掃描端口"
print "2:url掃描端口"
print "-------------"
q=raw_input("選擇功能:")
if(int(q)==1):
port_scan()
else:
e=raw_input("url=")
url_ip(e)
print("掃描結束")
main()
#!/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,6558): t = threading.Thread(target=portScanner,args=('14.215.177.38',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()
這是協程
# -*-coding:UTF-8 -*- # @Time: 2018/9/7 11:07 # @Author:gumgui # @File: 端口掃描.py import time import socket from gevent import monkey monkey.patch_all() import gevent import gevent.pool def TCP_connect(ip,port): """模擬TCP連接""" TCP_sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM) TCP_sock.settimeout(0.5) #設置連接超時 try: result = TCP_sock.connect_ex((ip,int(port))) if result == 0: print("[*]%s 端口 開啟\t"%port) else: # print("[!]%s端口 關閉"%port) pass TCP_sock.close() except socket.error as e: print("[!]錯誤:",e) def scan_ip(): """掃描目標IP""" ip = raw_input("[+]輸入掃描目標IP:") print("[*]正在掃描") scan_port(ip) def scan_web(): """掃描目標網址""" web = raw_input("[+]輸入掃描網址:") if "http://" in web or "https://" in web: web = web[web.find('://')+3:] print(web) print("[*]正在分析網站服務器IP") try: server_ip = socket.gethostbyname(str(web)) print("[*]服務器IP為%s"%server_ip) scan_port(server_ip) except Exception as e: print("[!]服務器IP獲取失敗") pass def scan_port(ip): """掃描端口""" print("[*]開始掃描目標端口") start = time.time() g = gevent.pool.Pool(50) #設置線程數 run_list = [] for port in range(1,200): run_list.append(g.spawn(TCP_connect,ip,port)) gevent.joinall(run_list) end = time.time() print("[*]總耗時%s"%time.strftime("%H:%M:%S",time.gmtime(end-start))) def main(): print( """ 1.通過IP掃描端口 2.通過網址掃描端口 """ ) uc = int(raw_input("[+]請輸入選擇:")) if 1 == uc: scan_ip() elif 2 == uc: scan_web() else: print("[!]輸入有誤") if __name__ == "__main__": main()
