写一个python多线程可以扫描其他电脑端口的程序
时间: 2023-03-09 21:05:08 浏览: 120
import socket
import threadingdef scan(ip, port):
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(2)
try:
status = sock.connect_ex((ip, port))
except:
print('端口扫描失败')
if status == 0:
print('端口',port,'开放')def main():
ip = input('请输入需要扫描的IP地址:')
port_list = [80,443,3389,21,22,25]
threads = []
for port in port_list:
th = threading.Thread(target=scan, args=(ip, port, ))
th.start()
threads.append(th)
for th in threads:
th.join()if __name__ == '__main__':
main()
相关问题
python 多线程端口扫描
Python 中可以通过多线程实现端口扫描,实现快速扫描目标主机上哪些端口是开放状态的,从而可以进一步确认主机的安全状况。
多线程端口扫描原理是:主线程开启多个子线程执行端口扫描任务,每个子线程单独扫描一部分端口,将结果存储到共享变量中,主线程最后将这些结果合并并输出。
下面是一个基本的 Python 多线程端口扫描程序:
```python
import threading
import socket
target = '127.0.0.1' # 目标主机
start_port = 1 # 扫描的起始端口
end_port = 100 # 扫描的终止端口
open_ports = [] # 存放开放端口的列表
def scan(port):
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.settimeout(0.5)
try:
s.connect((target, port))
open_ports.append(port)
s.close()
except:
pass
def main():
for port in range(start_port, end_port + 1):
t = threading.Thread(target=scan, args=(port,))
t.start()
for t in threading.enumerate():
if t != threading.current_thread():
t.join()
open_ports.sort()
for port in open_ports:
print(f'Port {port} is open')
if __name__ == '__main__':
main()
```
这个程序定义了一个扫描函数 scan(),使用 socket 模块创建 TCP 套接字 s,设置 timeout 时间为 0.5 秒,然后通过 connect() 方法连接目标主机的某个端口,如果连接成功则将端口号添加到 open_ports 列表中。
在主函数中,使用 for 循环创建多个子线程,每个子线程执行一次 scan() 函数来扫描一个端口号。然后通过 threading.enumerate() 方法获取当前所有线程的列表,再使用 join() 方法等待所有子线程完成,最后按端口号从小到大排序,输出所有开放的端口。
需要注意的是,端口扫描是一种比较敏感的操作,因此需要获得目标主机的合法授权后进行,否则可能会对目标主机造成安全风险。
python多线程扫描端口
可以使用Python的socket模块来扫描端口,同时使用多线程可以提高扫描效率。以下是一个简单的Python多线程扫描端口的示例代码:
```python
import socket
import threading
# 定义扫描端口的函数
def scan_port(host, port):
try:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.settimeout(1)
s.connect((host, port))
print(f"Port {port} is open")
s.close()
except:
pass
# 定义多线程扫描端口的函数
def scan_ports(host):
for port in range(1, 1024):
t = threading.Thread(target=scan_port, args=(host, port))
t.start()
# 测试
if __name__ == '__main__':
host = '127.0.0.1'
scan_ports(host)
```
在这个示例代码中,首先定义了一个`scan_port`函数来扫描指定主机的指定端口。然后定义了一个`scan_ports`函数来使用多线程扫描指定主机的1~1023号端口。最后在主程序中调用`scan_ports`函数,并传入要扫描的主机IP地址。
阅读全文