Технические вопросы и ответы QA1176

Получение трассировки пакетов

Q: Я пытаюсь отладить сетевую проблему. Как я получаю трассировку пакетов?

A: Это зависит от Вашей платформы:

Наконец, Примечания Трассировки пакетов предлагает некоторые полезные советы, которые Вы могли бы счесть полезным при контакте с трассировками пакетов.

Программы OS X

OS X поддерживает широкий диапазон программ трассировки пакетов, как описано в следующих разделах.

Прокси HTTP Чарльза

Чарльзом является Прокси HTTP, позволяющий Вам просматривать весь Трафик HTTP и Трафик HTTPS между Вашей машиной и Интернетом.

CPA

Пакет какао Анализатор является собственной реализацией OS X сетевого протокола анализатор и анализатор пакетов.

Debookee

Debookee является приложением OS X, позволяющим Вам видеть то, что Ваши устройства отправляют по сети.

FrameSeer

FrameSeer является недорогим приложением получения сетевого пакета для OS X.

Совок HTTP

Совок HTTP является протоколом HTTP анализатор для OS X. Это восстанавливает полные переговоры HTTP (вместо того, чтобы просто показать пакеты, составляющие их), и представляет их удобным для пользователя способом.

IPNetMonitorX

IPNetMonitorX является сетью, диагностирующей инструментарий для отладки проблем интернет-сервиса и оптимизации производительности.

tcpdump

Этот инструмент командной строки встроен ко всем версиям OS X и также доступен на многих других платформах Unix. Для быстрой сводки того, как использовать tcpdump, посмотрите Начало работы С tcpdump.

tcpflow

При отладке высокоуровневого протокола хорошо рассмотреть различные соединения TCP как потоки данных, а не отдельных пакетов. tcpflow инструмент может сделать это для Вас. Если Вы не использовали tcpflow прежде, существует краткое введение в Начале работы С tcpflow.

tcpflow инструмент не встроен к OS X, но можно получить его во множестве путей.

tcptrace

tcptrace является инструментом с открытым исходным кодом для анализа соединений TCP в трассировке пакетов.

Wireshark

Wireshark является пакетом с открытым исходным кодом анализатор, портированный к OS X. Это требует X11.

Беспроводная диагностика

Беспроводная Диагностика является приложением, встроенным к OS X, позволяющему Вам получить трассировку пакетов уровня Wi-Fi. Такие трассировки содержат больше информации, чем стандартная трассировка пакетов (например, они показывают повторные передачи канального уровня Wi-Fi).

Можно найти Беспроводную Диагностику в /System/Library/CoreServices каталог; в более поздних системах это могло бы быть в Applications подкаталог в том каталоге. На OS X 10.7 приложение вызвали Диагностикой Wi-Fi.

Посмотрите Получение Wi-Fi для получения дополнительной информации об использовании этого инструмента.

Пакетная Трассировка iOS

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

Удаленный виртуальный интерфейс

iOS 5 добавил средство удаленного виртуального интерфейса (RVI), позволяющее Вам использовать программы трассировки пакетов OS X для получения трассировок от устройства на iOS. Основная стратегия:

  1. Подключите свое устройство на iOS к Вашему Mac через USB.

  2. Установите RVI для того устройства. Это создает виртуальный сетевой интерфейс на Вашем Mac, представляющем сетевой стек устройства на iOS.

  3. Выполните свою программу трассировки пакетов OS X и укажите на него на RVI, создаваемый на предыдущем шаге.

Для установки RVI необходимо работать rvictl инструмент как показано ниже.

$ # First get the current list of interfaces.
$ ifconfig -l
lo0 gif0 stf0 en0 en1 p2p0 fw0 ppp0 utun0
$ # Then run the tool with the UDID of the device.
$ rvictl -s 74bd53c647548234ddcef0ee3abee616005051ed
 
Starting device 74bd53c647548234ddcef0ee3abee616005051ed [SUCCEEDED]
 
$ # Get the list of interfaces again, and you can see the new virtual
$ # network interface, rvi0, added by the previous command.
$ ifconfig -l
lo0 gif0 stf0 en0 en1 p2p0 fw0 ppp0 utun0 rvi0

Теперь, когда Вы знаете имя RVI, можно указать инструмент трассировки пакетов на него. Например, вот то, как Вы могли бы работать tcpdump взять трассировку пакетов от RVI и записать его в файл trace.pcap.

$ sudo tcpdump -i rvi0 -w trace.pcap
tcpdump: WARNING: rvi0: That device doesn't support promiscuous mode
(BIOCPROMISC: Operation not supported on socket)
tcpdump: WARNING: rvi0: no IPv4 address assigned
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on rvi0, link-type RAW (Raw IP), capture size 65535 bytes

Когда Вы сделаны, можно удалить RVI со следующей командой.

$ rvictl -x 74bd53c647548234ddcef0ee3abee616005051ed
 
Stopping device 74bd53c647548234ddcef0ee3abee616005051ed [SUCCEEDED]

Удаленный виртуальный интерфейсный поиск и устранение неисправностей

Этот раздел объясняет, как решить некоторые общие вопросы с RVI.

Если Ваш Mac не имеет rvictl инструмент, удостоверьтесь, что Вы устанавливаете Xcode 4.2 или позже.

Если устройство выполняет iOS 7 или позже, необходимо использовать поддержку RVI, установленную Xcode 5.0 или позже.

Поддержка RVI, установленная Xcode 5.0, работает лучше всего над OS X 10.9 и позже. В частности, если Вы работаете tcpdump на 10.8.x и видят сообщение «неизвестный IP 0», необходимо будет обновить к 10,9 для доступа к тем пакетам через RVI.

Если rvictl сбои с сообщением:

bootstrap_look_up(): 1102

удостоверьтесь это что com.apple.rpmuxd задание launchd загружается правильно. Следующая команда должна распечатать информацию о задании.

$ sudo launchctl list com.apple.rpmuxd
{
    "Label" = "com.apple.rpmuxd";
    …
};

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

$ sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.rpmuxd.plist

Примечания трассировки пакетов

Начало работы С tcpdump

Начать с tcpdump, попробуйте следующую команду.

sudo tcpdump -i en0 -w trace.pcap

Элементы этой командной строки:

  • sudo причины команды tcpdump работать с полномочиями, который необходим для получения сетевого трафика.

  • -i en0 опция говорит tcpdump получать пакеты на первом интерфейсе Ethernet. По умолчанию, tcpdump будет использовать первый непетлевой интерфейс, который это может найти (обычно en0). Для указания различного интерфейса просто изменитесь en0 к имени BSD того интерфейса. Например, интерфейс AirPort обычно en1.

    Для получения списка сетевых интерфейсов и их видимых пользователем имен выполните networksetup инструмент с -listallhardwareports параметр.

  • -w trace.pcap параметр говорит tcpdump записать пакеты в вызванный файл trace.pcap.

При работе системы до OS X 10.6, необходимо также предоставить -s 0 говорящая опция, tcpdump получать полный пакет, а не просто первые 68 байтов. Эта опция является значением по умолчанию на OS X 10.6 и позже.

В ответ на эту команду, tcpdump начнет получать пакеты и вставлять их trace.pcap файл. Когда Вы хотите прекратить получать, прерывание tcpdump путем ввода ^C. Можно тогда вывести на экран содержание пакетов как текст с помощью следующей команды.

tcpdump -n -e -x -vvv -r trace.pcap

Новые элементы командной строки:

  • -n опция означает, что адреса не преобразовываются в доменные имена, который ускоряет вещи значительно.

  • -e причины опции tcpdump вывести на экран заголовок канального уровня для каждого пакета.

  • -x опция заставляет содержание пакета также быть выведенным на экран в шестнадцатеричном числе.

  • -vvv опция делает tcpdumpвывод, максимально многословный.

  • Путем указания -r trace.pcap опция Вы говорите tcpdump считать пакеты из файла trace.pcap вместо от сетевого интерфейса. Обратите внимание на то, что Вам не нужны полномочия сделать это, таким образом работая tcpdump использование sudo не требуется.

Можно также объединить эти шаги, как показано ниже, но если Вы делаете это, Вы не получаете высокочастотную запись пакетов, которые Вы получили.

sudo tcpdump -i en0 -n -e -x -vvv

Можно узнать о tcpdump из онлайнового руководства и из книги TCP/IP Illustrated, Объем 1: Протоколы, W. Ричард Стивенс, Аддисон-Уэсли, 1994, ISBN 0-201-63346-9. Та книга является также превосходным введением в протоколы TCP/IP в целом.

Начало работы С tcpflow

tcpflow команда делает намного проще отладить высокоуровневые протоколы. Например, при отладке клиента HTTP можно выполнить следующую команду.

sudo tcpflow -i en0 port 80

tcpflow создаст набор файлов в текущем каталоге, каждый из которых содержит повторно собранное содержание единственного потока TCP. Так, если Вы работаете tcpflow как показано выше и затем выбирают URL http://apple.com, Вы видите, как HTTP перенаправляет работы.

$ sudo tcpflow -i en0 port 80
tcpflow[953]: listening on en0
^C
tcpflow[953]: terminating
$ ls -lh
total 16
-rw-r--r-- 1 root  quinn [...] 010.000.040.015.50232-017.149.160.049.00080
-rw-r--r-- 1 root  quinn [...] 017.149.160.049.00080-010.000.040.015.50232
$ # This is the request.
$ cat 010.000.040.015.50232-017.149.160.049.00080
GET / HTTP/1.1
User-Agent: curl/7.19.4 (universal-apple-darwin10.0) libcurl/7.19.4 OpenSSL/0.9.8k zlib/1.2.3
Host: apple.com
Accept: */*
 
$ # And this is the response.
$ cat 017.149.160.049.00080-010.000.040.015.50232
HTTP/1.1 302 Object Moved
Location: http://www.apple.com/
Content-Type: text/html
Cache-Control: private
Connection: close
 
<head><body> This object may be found <a HREF="http://www.apple.com/">here</a> </body>

Петлевые проблемы

Некоторые программы трассировки пакетов имеют проблемы с пакетами, передаваемыми или от машины трассировки (машина, выполняющая программу трассировки пакетов). Для предотвращения этих проблем разделите машину трассировки от машин, сетевой трафик которых Вы прослеживаете.

Как пример этого, на OS X tcpdump может вывести на экран контрольную сумму TCP пакетов, отправленных машиной трассировки как плохо. Это вызвано тем, что разгрузки контрольной суммы TCP; пакеты, отправленные машиной трассировки, получены прежде чем быть врученным сетевому адаптеру, таким образом, им не устанавливали контрольную сумму TCP правильно. Это не фатальная проблема; если неверные контрольные суммы беспокоят Вас, можно выключить проверку путем передачи -K опция к tcpdump.

Отброшенные пакеты

При получении всех байтов каждого пакета очень просто превысить буфер захвата пакетов ядра. Признаки этого переполнения - то, что Ваша программа трассировки пакетов сообщит что оно отброшенные пакеты.

В случае tcpdump, это распечатывает сводку того, сколько пакетов было получено, отфильтровано и отброшено при остановке получения. Например:

$ sudo tcpdump -i en0 -w trace.pcap
tcpdump: listening on en0, link-type EN10MB (Ethernet), capture size 65535 bytes
^C
94 packets captured
177 packets received by filter
0 packets dropped by kernel

Если отброшенное количество является ненулевым, необходимо увеличить размер буфера захвата пакетов путем передачи -B опция к tcpdump, как обсуждено ранее.

Переключатели и концентраторы

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

  • Используйте концентратор, а не переключатель — Теперь трудно найти реальные концентраторы. Большинство концентраторов 10/100 является фактически скрытыми переключателями. Однако возможно найти концентратор 10/100, только переключающийся между различными сегментами скорости (например, диапазон SMC-EZ58xxDS).

  • Включите зеркальное отражение порта — На самых усовершенствованных переключателях, возможно сконфигурировать переключатель так, чтобы весь трафик был зеркально отражен к определенному порту. Для узнавания больше об этом консультируйтесь с документацией для переключателя.

Подсказки получения от Wiki Wireshark

Wiki Wireshark имеет немного действительно полезной информации о том, как установить Вашу пакетную среду трассировки.

Получение Wi-Fi

Получение пакетов на Wi-Fi может быть хитрым, потому что переговоры между одним клиентом Wi-Fi и точкой доступа не обязательно видимы другим клиентам Wi-Fi. Существует два простых способа гарантировать, чтобы Вы видели соответствующий трафик Wi-Fi:

  • режим моста — Если Ваша точка доступа Wi-Fi поддерживает режим моста (например, все базовые станции Apple делают), можно соединить Wi-Fi мостом на Ethernet и затем использовать стандартные методы Ethernet для получения трассировки пакетов. Вы не можете быть в состоянии видеть Wi-Fi к трафику Wi-Fi, но во многих ситуациях это не проблема.

  • Интернет, Совместно использующий — Если Вы включаете интернет-Совместное использование на своем Mac и сделали, чтобы Ваши клиенты Wi-Fi присоединились к общей сети, можно выполнить программу трассировки пакетов на Mac и видеть весь трафик Wi-Fi. При предназначении для интерфейса Mac's Wi-Fi Вы будете видеть, что весь трафик включает Wi-Fi в трафик Wi-Fi. При предназначении для интерфейса Ethernet Вы будете только видеть, что трафик вводит или оставляет сеть Wi-Fi.

Также можно использовать Беспроводное приложение Диагностики для взятия трассировки пакетов уровня Wi-Fi. Это показывает весь трафик, видимый Вашему Mac, включая низкоуровневый трафик Wi-Fi, это не видимо с другими инструментами. При использовании этого инструмента имейте в виду следующее:

  • После запуска приложения можно получить доступ к функции трассировки пакетов путем выбора Utilities из Меню окна и затем выбора вкладки Frame Capture.

  • Ваш Mac не может использовать интерфейс Wi-Fi для нормального сетевого трафика при трассировке.

  • Необходимо выбрать канал для трассировки на. Это упрощает вещи при конфигурировании точки доступа, чтобы использовать определенный канал, а не позволить ей выбрать тот автоматически.

  • Если сеть Wi-Fi будет иметь пароль, то шифрование Wi-Fi сделает ее намного тяжелее для исследования трассировки. Для двигений это, или временно выключает пароль Wi-Fi в сети или использует отдельную испытательную сеть, не имеющую никакого пароля.

Представление трассировки с отчетом об ошибках

При представлении отчета об ошибках, связанного с сетями необходимо рассмотреть представление трассировки пакетов вместе с отчетом об ошибках. Страница Bug Reporting имеет подробные данные о том, как предоставить дополнительную информацию с Вашим отчетом об ошибках.

Представление трассировки к DTS

При отправке трассировки пакетов в DTS включайте следующее:

  • Системный тип и версия ОС машины трассировки.

  • Имя и версия программы Вы раньше получали трассировку пакетов.

  • При использовании программы, собственный формат файла которой является libpcap форматом файла (они включают tcpdump, Wireshark и различные другие), можно отправить нам файл трассировки пакетов в том формате. Иначе, включайте копию трассировки пакетов и в ее собственном формате и в, если тот собственный формат не является текстом, текстовым экспортом трассировки также. Тем путем мы, как гарантируют, будем в состоянии считать Вашу трассировку пакетов.

  • Для каждой соответствующей машины, показанной в трассировке, опишите следующее:

    • роль машины в сетевом разговоре

    • системный тип и версия ОС

    • IP-адрес машины

    • аппаратный адрес машины (также известный как Ethernet-адрес или MAC-адрес)



История версии документа


ДатаПримечания
28.08.2014

Измененный пример RVI для сохранения на диск трассировки пакетов, которая обычно является самой полезной опцией (r. 15449523).

29.10.2013

Добавленный ссылка на Беспроводное приложение Диагностики (r. 14454725). Добавленный раздел «Submitting A Trace With A Bug Report». Добавленный раздел по поиску и устранению неисправностей RVI.

31.01.2013

Добавленные ссылки на tcptrace (r. 11809312) и Debookee (r. 12929510). Упрощенный пример tcpdump команда путем удаления опций, применяющихся по умолчанию в недавних системах. Внесенные незначительные редакционные изменения.

05.01.2012

Задокументированный iOS 5 удаленная виртуальная интерфейсная функция (r. 10194867), и переделанный структура документа для учета того изменения. Добавленный раздел по пакетной трассировке Wi-Fi.

08.03.2011

Добавленная ссылка на Прокси HTTP Чарльза (r. 9053410).

14.10.2009

Добавленные разделы по tcpflow и Совку HTTP. Добавленная информация об отброшенных пакетах и как избежать их. Различные незначительные редакционные изменения.

03.06.2008

Оптимизированные описания продуктов и реорганизованный Разные примечания. Реструктурированный весь документ и добавленные дополнительные пакеты. Добавленный дополнительный Концентратор/Данные коммутатора.

13.07.2004

Добавленный ссылка на FrameSeer. Преобразованный текст к TNT и фиксированному форматированию и проблемам ссылки.

08.08.2002

Новый документ, перечисляющий инструменты, доступные для рассмотрения сетевых пакетов на проводе плюс некоторые полезные подсказки, как использовать те инструменты.