Я пытаюсь создать скрипт, который читает IP-адреса из pcap и сканирует их с помощью nmap usin Python.
Предполагается, что скрипт должен показывать:
- IP-адрес назначения
- Открытые порты системы
- Идентифицированные протоколы
- Сортировка результатов по IP-адресу с наибольшим количеством обнаруженных портов
Проблемы, с которыми я сталкиваюсь:
У некоторых IP-адресов отфильтрованы все порты, время сканирования будет слишком большим, и скрипт не будет ничего показывать
Если есть повторные IP-адреса, они сканируются снова
Невозможно распечатать таблицу в правильном формате. Мне пришлось печатать заголовок вручную, так как я печатаю 3 ячейки [IP-адрес назначения, количество открытых портов и ОС], в то время как мне нужно показать столбцы и этот заголовок [Порт, Сервис, Продукт, Версия]
Вот мой код:
from prettytable import *
from collections import *
from scapy.all import *
from nmap import *
pcap = rdpcap('/root/Downloads/nakerah.pcap')
scanner = nmap.PortScanner()
sort_list = []
ip_list = []
x = PrettyTable()
for packets in pcap:
if 'IP' in packets:
ip_list.append(packets['IP'].dst)
ip_list = list(OrderedDict.fromkeys(ip_list))
for ip in list(ip_list):
port_scan = scanner.scan(hosts=ip, arguments='-sV -T4 -sT -p- -A')
sort_list.append((ip, scanner[ip]['tcp'].keys().__len__()))
for sorted_ip in sorted(sort_list, key=lambda x: x[1], reverse=True):
print(f'Scanning IP: {ip}')
for value in port_scan.get('scan').items():
header = f"| Destination IP: {sorted_ip[0]} | Number of Opened Ports: {sorted_ip[1]} | OS: {value[1].get('osmatch')[0]['name']} |"
print('-' * header.__len__())
print(f"| Destination IP: {sorted_ip[0]} | Number of Opened Ports: {sorted_ip[1]} | OS: {value[1].get('osmatch')[0]['name']} |")
print('-' * header.__len__())
x.field_names = ["Port", "Service", "Product", "Version"]
for port, port_results in value[1].get('tcp').items():
x.add_row([port, port_results['name'], port_results['product'], port_results['version']])
print(x)
Вот файл, который показывает, что я ожидал, против того, что я получил:
https://privatebin.net/?b04d38132facdacf#3LqKFPMNWCt3G9o576aZX7RazjKC6cVDW1fB57HFQ7Q3