-1

Я пробовал netstat и lsof с различными вариантами, но я получаю результаты мусора. Мне интересно узнать следующие данные:

  • приложения, которые привязывают сокет к порту - номер порта

Я хотел бы исключить сокеты UNIX из этого списка, если это возможно, но это не очень важно.

Для уточнения: под "мусором" я имею в виду, что ни netstat ни lsof печатают номер порта ... то, что я получаю, выглядит примерно так:

rpc.statd   900 rpcuser    8u  IPv4   16330      0t0  UDP *:51038 

где я надеялся, что 51038 будет номером порта, но это не так, я даже не могу понять, что это за информация. Хуже того, иногда бывают цифры вместо цифр, где я обычно ожидаю номер порта - это крайне бесполезно, потому что я пытаюсь выяснить, какая программа занимает порт, к которому я пытаюсь привязать / подключиться (Я подозреваю, что эти письма являются псевдонимом чего-то, но, давай действительно ... кому это нужно?)

3 ответа3

2

Это адаптация netstat . Вы можете заменить "tcp\| udp" только на "udp" или "tcp":

netstat -nap \
    | grep "^\(tcp\|udp\)" \
    | grep -v "\.255:\|127\.0\.0\.1:" \
    | sort -n -k 4,6 \
    | sort -k 1 \
    | sed -e 's/LISTEN//g' \
    | tr -s " " "\t" | cut -f1,4,6- | column -t

Он выведет все сокеты TCP и UDP. Вы можете добавить еще одну строку grep перед сортировкой

    | grep ":\*"

только для прослушивания сокетов (в моем дистрибутиве они связаны с ":*" в качестве порта) и другой строкой

    | grep -v ":::"

не перечислять сокеты IPv6.

Последняя строка сжимает выходные данные и расширяет их в оптимальном формате столбцов после удаления столбцов 2, 3 и 5; удалите его, если у вас не установлена column .

В моей домашней системе разработки (OpenSuSE 12.3, а не Fedora) полный скрипт

#!/bin/sh
netstat -nap \
        | grep "^\(tcp\|udp\)" \
        | grep -v "\.255:\|127\.0\.0\.1:" \
        | grep -v ":::" \
        | grep ":\*" \
        | sort -n -k 4,6 \
        | sort -k 1 \
        | sed -e 's/LISTEN//g' \
        | tr -s " " "\t" | cut -f1,4,6- | tr "[:/]" " " | column -t

возвращает (у меня также есть дополнительная строка перезаписи адреса) протокол, интерфейс, номер порта, идентификатор процесса и имя команды.

tcp  ANY       111    649   rpcbind
tcp  ANY       1190   1848  xinetd
tcp  ANY       139    2364  smbd
tcp  ANY       21     1813  vsftpd
tcp  ANY       22     1855  sshd
tcp  ANY       25     3229  master
tcp  ANY       3306   2896  mysqld
tcp  ANY       3690   3053  svnserve
tcp  ANY       389    2293  slapd
tcp  ANY       445    2364  smbd
tcp  ANY       8200   2952  minidlna
tcp  ANY       902    2153  vmware-authd
tcp  INTERNAL  3128   2449  squid
tcp  INTERNAL  53     2386  named
udp  ANY       111    649   rpcbind
udp  ANY       123    2918  ntpd
udp  ANY       137    2177  nmbd
udp  ANY       138    2177  nmbd
udp  ANY       1900   2952  minidlna
udp  ANY       38408  2449  squid
udp  ANY       631    648   cupsd
udp  ANY       825    649   rpcbind
udp  EXTERNAL  123    2918  ntpd
udp  EXTERNAL  137    2177  nmbd
udp  EXTERNAL  138    2177  nmbd
udp  INTERNAL  123    2918  ntpd
udp  INTERNAL  137    2177  nmbd
udp  INTERNAL  138    2177  nmbd
udp  INTERNAL  53     2386  named
udp  INTERNAL  55440  2952  minidlna
1

Nmap всегда был одним из тяжеловесных анализаторов портов для Unix и Windows. Это очень настраиваемый, и вы можете делать все что угодно с его выводом. Пример сканирования локального хоста:

nmap -Pn localhost

дает:

Starting Nmap 6.25 ( http://nmap.org ) at 2013-07-22 01:48 BST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.0023s latency).
rDNS record for 127.0.0.1: localhost.localdomain
Not shown: 997 closed ports
PORT    STATE SERVICE
22/tcp  open  ssh
25/tcp  open  smtp
631/tcp open  ipp

Получите его из репозитория yum : yum install nmap

0

Вы пробовали использовать sockstat? Я не знаю о Fedora, но я использую sockstat во FreeBSD и Ubuntu для получения информации, которую вы ищете.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .