import socket
import threading
import time
all_port = []
def scan_port(ip_str, port_int):
tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 创建套接字
tcp_socket.settimeout(2)
try:
address = (ip_str, port_int) # 服务器端地址
tcp_socket.connect(address) # 与服务器进行连接
all_port.append(port_int)
except Exception:
pass
finally:
tcp_socket.close()
time.sleep(0.01)
if __name__ == "__main__":
threads = []
port_list = [22, 21, 23, 53, 80, 135, 139, 445, 1433, 1521, 3306, 3389, 4899, 5631, 5900, 8080, 8887, 8096]
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 创建套接字
client_socket.settimeout(2)
ip = ''
url_str = "www.baidu.com"
try:
url = url_str.replace("https://", "").replace("http://", "").replace("//", "").split("/")[0]
ip = socket.gethostbyname(url) # 获取ip
print("ip=" + ip)
except Exception:
pass
finally:
client_socket.close()
# for i in range(65536): # 控制线程的数量
# t = threading.Thread(target=scan_port, args=(i,))
for i in range(len(port_list)): # 控制线程的数量
t = threading.Thread(target=scan_port, args=(ip, port_list[i],))
threads.append(t)
for i in threads:
i.start()
for i in threads:
i.join() # 将线程加入到主线程中
print(all_port)
通过tcp连接判断服务器是否有响应信息来判断端口是否开启,
简易端口扫描器仅能扫描出一部分端口,有些端口可能因为防火墙拦截导致扫描失败