实现Python多线程C段扫描和Ping扫描脚本需要以下步骤:
-
导入模块:需要导入
threading
,Queue
,subprocess
等模块,其中threading
和Queue
分别用于多线程实现和队列管理,subprocess
用于执行系统命令。 -
编写C段扫描函数:需要传入要扫描的 IP 段作为参数。使用
Queue
实现队列管理,将要扫描的 IP 地址存入队列中,使用threading
启动多个线程,每个线程从队列中获取 IP 地址,执行扫描操作,将扫描结果存入结果队列中。 -
编写 Ping 扫描函数:将需要扫描的 IP 地址放入队列中,使用
threading
启动多个线程,每个线程从队列中获取 IP 地址,使用subprocess
模块执行 ping 命令,若结果中包含“TTL”字段,则表示扫描到的主机能够响应 ping 请求,否则主机不在线。
下面是两个示例说明:
示例一:C段扫描
使用以下代码实现 C 段扫描函数:
import queue
import threading
import subprocess
def check_ip(q, result):
while not q.empty():
ip = q.get()
ret=subprocess.run(f"ping {ip} -c 1 -w 1", shell=True, stdout=subprocess.PIPE)
if ret.returncode == 0:
result.put(ip)
q.task_done()
def scan_ips(ip_prefix):
q = queue.Queue()
result = queue.Queue()
for i in range(1, 255):
ip = f"{ip_prefix}.{i}"
q.put(ip)
threads = []
for i in range(10):
t = threading.Thread(target=check_ip, args=(q, result))
threads.append(t)
t.start()
q.join()
ips = []
while not result.empty():
ips.append(result.get())
return ips
将需要扫描的 IP 段参数传给scan_ips
函数,即可返回扫描到的开放主机列表。
示例二:Ping扫描
使用以下代码实现Ping扫描函数:
import queue
import threading
import subprocess
def ping_ip(q, result):
while not q.empty():
ip = q.get()
ret=subprocess.run(f"ping {ip} -c 1 -w 1", shell=True, stdout=subprocess.PIPE)
if "TTL" in ret.stdout.decode():
result.put(ip)
q.task_done()
def ping_scan_ips(ips):
q = queue.Queue()
result = queue.Queue()
for ip in ips:
q.put(ip)
threads = []
for i in range(10):
t = threading.Thread(target=ping_ip, args=(q, result))
threads.append(t)
t.start()
q.join()
online_ips = []
while not result.empty():
online_ips.append(result.get())
return online_ips
将需要扫描的 IP 地址传给ping_scan_ips
函数,即可返回在线主机的 IP 列表。
以上就是Python多线程C段扫描和Ping扫描脚本的实现方法及示例。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python 多线程C段扫描、检测 Ping扫描脚本的实现 - Python技术站