Инструмент для сетевого анализа, похожий на VRTA

Вопрос или проблема

Существует инструмент под названием Visual RoundTrip Analyzer (VRTA) для MS-Windows, который показывает все SYN и SYN-ACK, а также другие компоненты веб-страницы и время их обработки. Я знаю, что в большинстве веб-браузеров есть аналогичный инструмент для проверки производительности во время работы в интернете. Существует ли независимый инструмент в GNU/Linux, который может предоставить такую же информацию? Я использую Debian и хотел бы получить что-то с выводом в виде SYNK и ACK.

VRTA Sync-ACK

Как видно, я ищу что-то подобное в виде отдельной утилиты.

Вы можете отслеживать сетевой трафик с помощью Scapy, который может захватывать и анализировать весь веб-трафик (и сделать многое другое), чтобы визуализировать время для каждого запроса и ответа. Вы даже можете инициировать различные запросы прямо из Scapy, чтобы исключить зависимость от браузера. Некоторые примеры такого использования можно увидеть на демонстрационной странице. Например (приведенный пример):
Классическое сканирование SYN можно инициализировать, выполнив следующую команду в Scapy:

>>> sr1(IP(dst="72.14.207.99")/TCP(dport=80,flags="S"))

Вышеуказанная команда отправит один SYN-пакет на 80 порт Google и завершит работу после получения единственного ответа:

Начало эмиссии: .Завершено отправлено 1 пакет.
* Получено 2 пакета, 1 ответ, осталось 0 пакетов <IP  версия=4L ihl=5L tos=0x20 len=44 id=33529 flags= frag=0L ttl=244 proto=TCP chksum=0x6a34 src=72.14.207.99 dst=192.168.1.100 options=// | <TCP  sport=www dport=ftp-data seq=2487238601L ack=1 dataofs=6L reserved=0L flags=SA window=8190 chksum=0xcdc7 urgptr=0 options=[('MSS', 536)] | <Padding  load='V\xf7' |>>>

Из приведенного выше вывода можно увидеть, что Google вернул флаг “SA” или SYN-ACK, указывающий на открытый порт.

Используйте любой из следующих форматов для сканирования портов с 400 по 443 на системе:

>>> sr(IP(dst="192.168.1.1")/TCP(sport=666,dport=(440,443),flags="S"))

или

>>> sr(IP(dst="192.168.1.1")/TCP(sport=RandShort(),dport=[440,441,442,443],flags="S"))

Для быстрого просмотра ответов просто запросите сводку собранных пакетов:

>>> ans,unans = _
>>> ans.summary()
IP / TCP 192.168.1.100:ftp-data > 192.168.1.1:440 S ======> IP / TCP 192.168.1.1:440 > 192.168.1.100:ftp-data RA / Padding
IP / TCP 192.168.1.100:ftp-data > 192.168.1.1:441 S ======> IP / TCP 192.168.1.1:441 > 192.168.1.100:ftp-data RA / Padding
IP / TCP 192.168.1.100:ftp-data > 192.168.1.1:442 S ======> IP / TCP 192.168.1.1:442 > 192.168.1.100:ftp-data RA / Padding
IP / TCP 192.168.1.100:ftp-data > 192.168.1.1:https S ======> IP / TCP 192.168.1.1:https > 192.168.1.100:ftp-data SA / Padding

Вышеуказанное будет отображать пары стимулов/ответов для ответов на запросы. Мы можем отобразить только информацию, которая нас интересует, используя простой цикл:

>>> ans.summary( lambda(s,r): r.sprintf("%TCP.sport% \t %TCP.flags%") )
440      RA
441      RA
442      RA
https    SA

Даже лучше, можно создать таблицу с помощью функции make_table() для отображения информации о нескольких объектах:

>>> ans,unans = sr(IP(dst=["192.168.1.1","yahoo.com","slashdot.org"])/TCP(dport=[22,80,443],flags="S"))
Начало эмиссии:
.......*.**.......Завершено отправлено 9 пакетов.
**.*.*..*..................
Получено 362 пакета, 8 ответов, осталось 1 пакета
>>> ans.make_table(
...    lambda(s,r): (s.dst, s.dport,
...    r.sprintf("{TCP:%TCP.flags%}{ICMP:%IP.src% - %ICMP.type%}")))
    66.35.250.150                192.168.1.1 216.109.112.135
22  66.35.250.150 - dest-unreach RA          -
80  SA                           RA          SA
443 SA                           SA          SA

Приведенный выше пример даже выведет тип ICMP-ошибки, если ICMP-пакет был получен в ответ вместо ожидаемого TCP.

Для более крупных сканирований мы можем заинтересоваться выводом только определенных ответов. Пример ниже будет отображать только пакеты с установленным флагом “SA”:

>>> ans.nsummary(lfilter = lambda (s,r): r.sprintf("%TCP.flags%") == "SA")
0003 IP / TCP 192.168.1.100:ftp_data > 192.168.1.1:https S ======> IP / TCP 192.168.1.1:https > 192.168.1.100:ftp_data SA

В случае, если мы хотим провести экспертный анализ ответов, можем воспользоваться следующей командой, чтобы указать, какие порты открыты:

>>> ans.summary(lfilter = lambda (s,r): r.sprintf("%TCP.flags%") == "SA",prn=lambda(s,r):r.sprintf("%TCP.sport% is open"))
https is open

Снова, для более крупных сканирований мы можем создать таблицу открытых портов:

>>> ans.filter(lambda (s,r):TCP in r and r[TCP].flags&2).make_table(lambda (s,r):
...             (s.dst, s.dport, "X"))
    66.35.250.150 192.168.1.1 216.109.112.135
80  X             -           X
443 X             X           X

Если вышеуказанные методы окажутся недостаточными, Scapy включает функцию report_ports(), которая не только автоматизирует SYN-сканирование, но и генерирует вывод в LaTeX с собранными результатами:

>>> report_ports("192.168.1.1",(440,443))
Начало эмиссии:
...*.**Завершено отправлено 4 пакета.
*
Получено 8 пакетов, 4 ответа, осталось 0 пакетов
'\\begin{tabular}{|r|l|l|}\n\\hline\nhttps & открытый & SA \\\\\n\\hline\n440
 & закрытый & TCP RA \\\\\n441 & закрытый & TCP RA \\\\\n442 & закрытый &
TCP RA \\\\\n\\hline\n\\hline\n\\end{tabular}\n'

Ответ или решение

Для выполнения сетевого анализа в GNU/Linux, аналогичного Visual RoundTrip Analyzer (VRTA) на платформе MS-Windows, вы можете использовать мощный инструмент под названием Scapy. Этот инструмент позволяет захватывать и анализировать сетевой трафик, что позволяет вам визуализировать время каждого запроса и ответа, включая флаги SYN и SYN-ACK.

Установка Scapy

Scapy может быть установлен из репозиториев Debian с помощью следующей команды:

sudo apt-get install python3-scapy

Основные функции Scapy

  1. Отправка SYN-пакетов: С помощью Scapy вы можете отправлять SYN-пакеты к целевому адресу и видеть ответы. Пример команды для отправки SYN-пакета:

    from scapy.all import *
    response = sr1(IP(dst="192.168.1.1")/TCP(dport=80, flags="S"))

    В этом примере отправляется SYN-пакет на порт 80, а ответ будет проанализирован.

  2. Анализ ответов: Scapy предоставляет возможность анализировать полученные ответы. Например, если вы получите флаги SYN-ACK, это будет означать, что порт открыт:

    if response[TCP].flags == "SA":
       print("Порт открыт")
  3. Обработка множественных запросов: Вы можете отправлять SYN-пакеты сразу на несколько портов и собирать результаты:

    ans, unans = sr(IP(dst="192.168.1.1")/TCP(dport=[80, 443], flags="S"))
    ans.summary(lambda s, r: r.sprintf("%TCP.sport% \t %TCP.flags%"))
  4. Отчет о результатах: Scapy может автоматически генерировать отчеты о состоянии портов, которые могут быть предназначены для дальнейшего анализа. Это позволяет вам быстро определить, какие порты открыты, а какие закрыты.

Пример использования

Вот пример того, как можно использовать Scapy для отправки SYN-запросов на несколько портов и анализа ответов:

from scapy.all import *

# Определите IP-адрес целевого хоста
target_host = "192.168.1.1"

# Выполните SYN-сканирование на портах 440-443
ans, unans = sr(IP(dst=target_host)/TCP(dport=range(440, 444), flags="S"))

# Подведите итоги по ответам
print("Результаты сканирования:")
ans.make_table(lambda s, r: (s.dport, r.sprintf("%TCP.flags%"), r.sprintf("%IP.src%")))

С помощью этого кода вы сможете получить таблицу с состоянием портов и флагами TCP (например, SYN, SYN-ACK и т.д.).

Заключение

Scapy является мощным и гибким инструментом для анализа сетевого трафика в GNU/Linux и позволяет производить сложные сетевые операции, такие как SYN-сканирование, с возможностью последующего анализа ответов. Он предоставляет все необходимые функции для самостоятельного анализа сетевого трафика, не завися от браузеров или других приложений.

Оцените материал
Добавить комментарий

Капча загружается...