提问者:小点点

Python子进程nmap输出与terminal命令不同


我试着在linux中使用nmap命令的输出(shell输出):

sudo nmap -sn 192.168.1.0/24
------
Nmap scan report for 192.168.1.98
Host is up (0.094s latency).
MAC Address: B8:27:EB:CE:0A:9F (Raspberry Pi Foundation)

在python脚本中通过子进程:

import subprocess
p = subprocess.Popen(["nmap", "-sn", "192.168.1.0/24"], stdout=subprocess.PIPE)
output, err = p.communicate()
print ("*** Running nmap -sn 192.168.1.0/24 ***\n", output)

除了我需要shell输出有而subprocess没有的MAC行之外,它工作得很好。

子进程输出:

\nNmap scan report for 192.168.1.98\nHost is up (0.015s latency).\n

我正在研究一个通过MAC/NAME获得IP的想法,我不知道没有那条线怎么做。。。


共1个答案

匿名用户

您不需要在python中将nmap作为子进程运行,只需安装nmap库并导入即可。

pip install python3-nmap

https://pypi.org/project/python3-nmap/

import nmap3
nmap = nmap3.Nmap()
results = nmap.nmap_dns_brute_script("your-host.com")

# And you would get your results in json
[
    {
        "address": "mail.your-host.com",
        "hostname": "68.65.122.10"
    },
    {
        "address": "www.your-host.com",
        "hostname": "5.189.129.43"
    }
]

下面是库的所有文档的链接:

https://nmap.readthedocs.io/en/latest/