Python вывод Nmap подпроцесса отличается от команды терминала - PullRequest
0 голосов
/ 09 июля 2020

Я пытаюсь использовать вывод команды nmap в linux (вывод оболочки):

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)

Что работает очень хорошо, за исключением того факта, что мне НУЖНА строка MA C, которая есть в выводе оболочки, а в подпроцессе нет.

вывод подпроцесса:

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

Я работаю над идея получения IP через MAC / имя, и я не вижу, как это сделать без этой строки ...

1 Ответ

0 голосов
/ 09 июля 2020

Вам не нужно запускать nmap как подпроцесс в python, вы можете просто установить библиотеку nmap и импортировать ее.

pip install python-nmap

Затем напишите свой код:

import json
import nmap

np = nmap.PortScanner()

target = '192.168.1.0/24'

# Scan the subnet 
results = np.scan(hosts=target, arguments='-sn')

# Clean the data nmap returns
results = results['scan']
output = {}
for result in results:
    output[result] = {}
    # Add the MAC addr to the IP
    try:
        output[result]['mac']       = results[result]['addresses']['mac']
    except:
        output[result]['mac']       = 'No MAC address avalible'
    # Add the vendor to the IP
    try:
        output[result]['vendor']    = list(results[result]['vendor'].values())[0]
    except:
        output[result]['vendor']    = 'No vendor info avalible'

print(json.dumps(output,indent=2))

Когда вы запускаете свой код, вы должны запускать его как sudo, иначе вы не получите адреса MA C.

Результат должен выглядеть так

{
  "192.168.1.1": {
    "mac": "16:91:82:xx:xx:xx",
    "vendor": "No vendor info avalible"
  },
  "192.168.1.10": {
    "mac": "44:39:C4:xx:xx:xx",
    "vendor": "Universal Global Scientific Industrial"
  },
  "192.168.1.50": {
    "mac": "No MAC address avalible",
    "vendor": "No vendor info avalible"
  }
}

Надеюсь был полезен: -)

...