Назад | Перейти на главную страницу

советы и хитрости netstat

В том же духе, что и вопросы "Полезная командная строка" (для Windows, Linux, и Mac), Я думаю, было бы удобно иметь вопросы "полезные способы использования утилиты x". На страницах руководства рассказывается, что делают параметры, но не обязательно, почему вы их используете, что означает результат, какие полезные вещи делает команда, о которых вы никогда не узнаете без обширных экспериментов, или как получить действительно нужный ответ.

Я хотел бы знать о netstat. Казалось бы, я должен иметь возможность понять, какие процессы используют полосу пропускания, и, действительно, насколько быстро система использует полосу пропускания. Он также выглядит полезным для обнаружения нежелательных подключений (вероятно, вирусов) и предоставляет всевозможную информацию о маршрутизации (с которой мне пришлось играть только при попытке заставить КПК Sharp Zaurus использовать TCP / IP через USB). Другими словами, это звучит как золотая жила, и я надеялся, что некоторые из вас поделятся кусочками информации, которую вы нашли.

Пожалуйста, укажите в ответе версию netstat и вашу ОС. Было бы неплохо увидеть какой-нибудь пример вывода и узнать, что это значит. Я пометил этот вопрос как вики сообщества, и я надеюсь, что вы сделаете то же самое в своих ответах, чтобы другие люди, зная другую ОС, могли ввести почти эквивалентную команду, если они знают, в том же ответе, и Затем мы можем проголосовать за наиболее полезные ответы.

Показать локальные прослушивающие TCP / UDP-порты и процесс, которому они принадлежат:

sudo netstat -tulpn

Таблицы маршрутизации Netstat

[Это было протестировано на Mac OS X 10.5.7. Я подозреваю, что результат почти одинаков на всех платформах, поскольку было указано, что он работает на Solaris.]

netstat -r 

предоставит вам таблицу маршрутизации.

netstat -nr

то же самое, но даст вам необработанные IP-адреса вместо поиска имен машин. Его вывод выглядит так (только длиннее):

Routing tables

Internet:
Destination        Gateway            Flags    Refs      Use  Netif Expire
default            192.168.40.250     UGSc       19        1    en1
127                127.0.0.1          UCS         0        0    lo0
127.0.0.1          127.0.0.1          UH          1     3140    lo0
169.254            link#5             UCS         0        0    en1
169.254.33.92      127.0.0.1          UHS         0        0    lo0
192.168.40         link#5             UCS        11        0    en1
192.168.40.1       0:17:f2:ca:a0:94   UHLW        0        0    en1   1150
...

Internet6:
Destination                             Gateway                         Flags      Netif Expire
::1                                     link#1                          UHL         lo0
fe80::%lo0/64                           fe80::1%lo0                     Uc          lo0
fe80::1%lo0                             link#1                          UHL         lo0
fe80::%en0/64                           link#4                          UC          en0
...
ff02::/32                               link#7                          UC          en2
ff02::/32                               link#8                          UC          en3

Столбцы:

Пункт назначения и шлюз: Пункт назначения - это адрес (или диапазон адресов), на который мы можем отправить информацию. Все данные, отправленные в этот пункт назначения, будут отправлены на связанный шлюз. Шлюз знает, куда отправить данные для следующего «прыжка» в пути. Если мы хотим отправить данные в пункт назначения, для которого нет записи в таблице маршрутизации, они будут проходить через шлюз по умолчанию.

Флаги: На странице man / info перечислены все флаги. Вот что означают настройки моего шлюза по умолчанию:

UGSc
U       - RTF_UP           Route usable
 G      - RTF_GATEWAY      Destination requires forwarding by intermediary
  S     - RTF_STATIC       Manually added
   c    - RTF_PRCLONING    Protocol-specified generate new routes on use

Любопытно, что он утверждается, что добавлен вручную, так как пришел через DHCP.

Ссылки: «Поле refcnt дает текущее количество активных использований маршрута. Протоколы, ориентированные на установление соединения, обычно удерживают один маршрут на время соединения, в то время как протоколы без установления соединения получают маршрут при отправке в то же место назначения». (Страница руководства)

Использование: «Поле использования обеспечивает подсчет количества пакетов, отправленных по этому маршруту».

Нетиф: «Запись интерфейса указывает сетевой интерфейс, используемый для маршрута».

На моем Mac

  • lo0 - это интерфейс обратной связи.
  • en0 - это Ethernet.
  • en1 беспроводной.
  • en2 и en3 используются виртуальной машиной.

Срок действия: На странице руководства для другой версии netstat: «Отображает время (в минутах), оставшееся до истечения срока действия маршрута».

Проверьте CommandLineFu Страница Netstat для некоторых полезных способов использования netstat в bash.

В окнах:

c:>netstat -a | find /c "TCP"
68

Показывает количество TCP / IP-соединений. Полезно, если вы устраняете неполадки в высокопроизводительных сетевых системах, в которых не хватает портов TCP и вам необходимо увеличить MaxUserPorts.

Скорость передачи / приема

На Mac [OS X 10.5.7]:

netstat -i -w 10

[Видеть ответ Чака для заметок об использовании в Solaris и Linux.]

Результат выглядит так:

            input        (Total)           output
   packets  errs      bytes    packets  errs      bytes colls
       794     0    1166796        763     0      50358     0
       789     0    1167773        765     0      52542     0
       792     0    1166548        765     0      51174     0
       796     0    1167262        598     0      40152     0
       929     0    1278561        846     0      65625     0
       563     0     815570        530     0      36828     0
        32     0       4360          1     0        774     0
         9     0        705          0     0        684     0
         9     0        631          0     0          0     0

Это показывает, сколько пакетов и байтов было передано за заданный интервал времени. (10 секунд в этом примере). Я был подключен к YouTube и загружал более 1 МБ каждый интервал, пока не закрыл вкладку браузера и скорость не упала до минимума.

Это может оказаться полезным, если вы ждете завершения загрузки или загрузки. Следите за скоростью, и когда она резко упадет, вы поймете, что это сделано.

Обратите внимание, что приведенная выше команда показывает всю пропускную способность на всех интерфейсах. Чтобы привязать его к конкретному интерфейсу (в данном примере WiFi), используйте -I флаг, как так:

netstat -I en1 -w 10

Windows:

Netstat -n
(Show active TCP connections, don't slow down trying to do name resolution)

Proto  Local Address          Foreign Address        State
TCP    192.168.1.38:4853    69.59.196.212:80       ESTABLISHED

Показывает активные соединения TCP, но не активность UDP.

Netstat -an
  (Show all connections, don't slow down trying to do name resolution)

Proto  Local Address          Foreign Address        State
TCP    0.0.0.0:80             0.0.0.0:0              LISTENING
TCP    192.168.1.38:4853    69.59.196.212:80       ESTABLISHED

Показывает все активные TCP-соединения, а также прослушивающие TCP- и UDP-соединения. Здесь не отображается исходящая активность UDP.

Windows

netstat -b

Отобразить процесс с помощью подключения

Windows 7 (возможно, с более ранней версии):

netstat -ano

перечисляет активные сеансы с соответствующими PID

Active Connections

  Proto  Local Address          Foreign Address        State           PID
  TCP    0.0.0.0:135            0.0.0.0:0              LISTENING       776
  TCP    0.0.0.0:445            0.0.0.0:0              LISTENING       4
  TCP    0.0.0.0:554            0.0.0.0:0              LISTENING       1724

или сохранить шаг

netstat -anb

(из командной строки CMD с повышенными правами) дает имя процесса

Active Connections

  Proto  Local Address          Foreign Address        State
  TCP    0.0.0.0:135            0.0.0.0:0              LISTENING
  RpcSs
 [svchost.exe]
  TCP    0.0.0.0:445            0.0.0.0:0              LISTENING
 Can not obtain ownership information
  TCP    0.0.0.0:554            0.0.0.0:0              LISTENING
 [wmpnetwk.exe]
  TCP    0.0.0.0:2048           0.0.0.0:0              LISTENING

Я уверен, что изобретаю велосипед заново, но вот простой скрипт Perl чтобы запустить netstat и отсортировать вывод так, чтобы IP-адреса, которые в настоящее время в основном подключены, оказались наверху. Это лучше всего использовать с программой «смотреть» для обновлений с 2-секундными интервалами.

Обновление: значительное переписывание 2013-02-11, чтобы избавиться от многих проблем и отображать имена хостов

Пример вывода:

Distant inbound connections: 2
   85.93.216.17:772               <-- 78.141.139.10       :    1        ip-78-141-139-10.dyn.luxdsl.pt.lu     1 x ESTABLISHED
   80.90.47.155:443               <-- 78.141.139.10       :    1        ip-78-141-139-10.dyn.luxdsl.pt.lu     1 x ESTABLISHED
Distant outbound connections: 3
   80.90.63.61                    --> 80.90.63.48:25      :    2        smtp.m-plify.net                      2 x TIME_WAIT
   85.93.216.17                   --> 85.93.216.18:772    :    1        maya.m-plify.net                      1 x ESTABLISHED
Looping connections: 57 (10 duplicates)
   127.0.0.1                      --> 127.0.0.1:9355      :   20                                              1 x ESTABLISHED, 8 x TIME_WAIT, 11 x CLOSE_WAIT
   127.0.0.1                      --> 127.0.0.1:4713      :   10                                             10 x CLOSE_WAIT
   127.0.0.1                      --> 127.0.0.1:9353      :    9                                              4 x TIME_WAIT, 5 x CLOSE_WAIT
   127.0.0.1                      --> 127.0.0.1:3306      :    8                                              6 x ESTABLISHED, 1 x TIME_WAIT, 1 x CLOSE_WAIT
   127.0.0.1                      --> 127.0.0.1:5445      :    5                                              1 x ESTABLISHED, 4 x TIME_WAIT
   127.0.0.1                      --> 127.0.0.1:9354      :    2                                              2 x CLOSE_WAIT
   127.0.0.1                      --> 127.0.0.1:7998      :    1                                              1 x TIME_WAIT
   127.0.0.1                      --> 127.0.0.1:3351      :    1                                              1 x ESTABLISHED
   127.0.0.1                      --> 127.0.0.1:32000     :    1                                              1 x ESTABLISHED

Солярис:

netstat -nr
(displays routing table)

Из книги Wicked Cool Shell Scripts:

Скрипт # 90.1: Каждые n минут получать значения netstats (через crontab)

Скрипт # 90.2: Анализируйте журнал производительности netstat, выявляя важные результаты и тенденции.

(Обожаю эту книгу - стоит покупать!)

В Solaris многие люди используют команду netstat -i 1, чтобы получить текущее количество пакетов. В Linux netstat есть бесполезная версия этой функции, так как она показывает необработанное количество, а не дельту. Чтобы получить аналогичные результаты, выполните «sar -n DEV 1 0». Рассмотрим на самом деле "LANG = C sar -n DEV 1 0 | grep interfacename" (sar помещает время с AM и PM в начало строки в определенных регионах, поэтому лучше выработать привычку всегда запускать "LANG = C sar "на случай, если вы когда-нибудь его проанализируете).

В Solaris,

netstat -k

Показывает сводку различной статистики. Полезно для проверки ошибок и т. Д.

Поскольку никто еще не упомянул об этом:

netstat -s 

предоставляет массу полезной статистики по протоколам под Linux.