有没有办法扫描 python 中的整个网络范围 (192.168.0./24) 并将数据输出到文本文件?

Is there a way to scan an entire network range (192.168.0./24) in python and have the data outputted to a text file?

我对 python 比较陌生,所以我的知识不是很多。我正在使用 python-nmap 来扫描网络范围,但我最头疼的问题是将结果输出到文本文件。 这是我目前所拥有的

import nmap


ip = '192.168.20.1'
port = 80
nmap = nmap.PortScanner()
result = nmap.scan(ip, str(port))
port_status = (result['scan'][ip]['tcp'][port]['state'])
print(f"Port {port} is {port_status} on {ip}")
with open('nmap.txt','w') as file:
    file.write(f"Port {port} is {port_status} on {ip}")

虽然这仅适用于单个 ip,但我正在尝试扫描整个网络范围,例如 192.168.20.0/24。 当我将 ip 变量设置为“192.168.20.0/24”时,我收到以下错误代码:

    Traceback (most recent call last):
  File "c:/Users/john/Desktop/Python/Test.py", line 8, in <module>
    port_status = (result['scan'][ip]['tcp'][port]['state'])
KeyError: '192.168.20.0/24'

我觉得有一个非常简单的解决方法,我觉得发布这个很愚蠢,但非常感谢您的帮助。 谢谢

使用 CIDR 表示法,您将获得多个结果,而您的第 8-11 行只能处理一个结果。您需要一个循环来处理您的 python-nmap 结果。

import nmap
ips = '192.168.20.0/24'
port = 80
nmap = nmap.PortScanner()
nmap.scan(ips, port)

with open('nmap.txt','w') as file:
    for host in nmap.all_hosts():
        port_state = nmap[host]['tcp'][port]['state']
        print(f"Port {port} is {port_state} on {host}")
        file.write(f"Port {port} is {port_state} on {host}")