Примеры использования netstat, ss, netcat

Все команды netstat, ss, netcat относится к сетевым утилитам и доступны по-умолчанию в большинстве linux-дистрибутивах.

netstat

Команда netstat умеет показывать сетевые соединения (входящие/исходящие), таблицу маршрутизации, статистику по сетевым интерфейсам и т.д.

Список всех открытых портов (TCP)

netstat -at

Список всех открытых портов (UDP)

netstat -au

Список только прослушиваемых портов (TCP)

netstat -lt

Статистика по всем открытым портам

netstat -s

Подробное отображение списка с открытыми портами - добавлен PID и имя процессов

netstat -p

Объединим все ключи в полезную команду для просмотра открытых TCP/UDP портов с именами процессов (может понадобиться root-доступ)

netstat -ltupn

Список подключенных хостов

netstat -lantp | grep ESTABLISHED |awk '{print $5}' | awk -F: '{print $1}' | sort -u

ss

Утилита ss позволяет просматривать информацию об используемых сокетах в системе. Эта команда обладает схожим функционалом к netstat, но есть и уникальные возможности. Например можно фильтровать вывод по установленным соединениям с определенным портом.

Список процессов, использующие соединения в данный момент

ss -p  

Список сокетов в режиме прослушивания

ss -l

Пример фильтра - список всех соединений к порту 80

ss -o state established '( dport = :www or sport = :www )'

lsof

Утилита lsof умеет отображать процессы, которые работают с определенным файлом или сокетом.

Список всех сетевых соединений

lsof -i

Список процессов, работающих с портом 80

lsof-i :80

netcat

Утилита netcat позволяет передавать/принимать данные через TCP/UDP соединения.

Шаблон вызова утилиты

nc host port

Откроем прием (ключ -l) данных на порте 1234 с подробным выводом информации (ключ -v) и продолжением работы после разрыва соединения (ключ -k), по-умолчанию nc разрывает соединение после первого дисконекта.

nc -lvk 1234

Подключаемся к открытому порту и отправим import antigravity ;)

nc127.0.0.11234
import antigravity

Пример более полезного использования nc - передача файла. На принимающей стороне

nc -l 1234 > file

На отправляющей стороне

nc localhost 1234 < file

Или можно отдавать файл любому подключившемуся. На передающей стороне

nc -l 1234 < file

На принимающей стороне

nc localhost 1234 > file

Пример открытия shell'а на определенном порте (источник). На стороне, где нужно открыть шел

mkfifo /tmp/pipe;
sh /tmp/pipe | nc -l 1234 > /tmp/pipe

Еще один полезный пример с netcat - запуск процесса, с возможностью отслеживания его работы через сеть

watch w | nc localhost 1234