Получение трассировки пакетов
Q: Я пытаюсь отладить сетевую проблему. Как я получаю трассировку пакетов?
A: Это зависит от Вашей платформы:
Существует много программ для OS X, позволяющих Вам собрать и проанализировать трассировки пакетов. См. Программы OS X для подробных данных.
iOS не поддерживает пакет, прослеживающий непосредственно. Однако при подключении устройства на iOS с Mac через USB можно использовать программу трассировки пакетов OS X, чтобы собрать и проанализировать трассировки, использующие удаленную виртуальную интерфейсную функцию. Посмотрите, что Пакет iOS Прослеживает для подробных данных.
Наконец, Примечания Трассировки пакетов предлагает некоторые полезные советы, которые Вы могли бы счесть полезным при контакте с трассировками пакетов.
Программы 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, но можно получить его во множестве путей.
Dowload и сборка исходный код от его домашнего сайта.
Установите его через проект 'портов', как Макпортс или Штрейкбрехер.
Dowload предварительно созданный двоичный файл отсюда.
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, можно взять трассировку пакетов приложения различными способами:
Если проблема, которую Вы пытаетесь отладить, происходит на Wi-Fi, можно поместить устройство на iOS на тестовую сеть Wi-Fi. Посмотрите Получение Wi-Fi для подробных данных.
Если Ваше приложение использует HTTP, можно сконфигурировать устройство на iOS для использования Прокси HTTP отладки (такого как Прокси HTTP Чарльза).
В iOS 5 и позже можно использовать удаленное виртуальное интерфейсное средство.
Удаленный виртуальный интерфейс
iOS 5 добавил средство удаленного виртуального интерфейса (RVI), позволяющее Вам использовать программы трассировки пакетов OS X для получения трассировок от устройства на iOS. Основная стратегия:
Подключите свое устройство на iOS к Вашему Mac через USB.
Установите RVI для того устройства. Это создает виртуальный сетевой интерфейс на Вашем Mac, представляющем сетевой стек устройства на iOS.
Выполните свою программу трассировки пакетов 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 имеет немного действительно полезной информации о том, как установить Вашу пакетную среду трассировки.
Документ Установки Получения Ethernet содержит хорошую справочную информацию для установки Вашей сети для контроля.
Справочный документ Концентратора содержит информацию о различных типах концентраторов.
Справочный документ Переключателя содержит информацию об аналитических функциях, таких как зеркальное отражение порта, найденное на различных моделях переключателей, включая ссылки к онлайн-документации для тех переключателей.
Получение 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 | Новый документ, перечисляющий инструменты, доступные для рассмотрения сетевых пакетов на проводе плюс некоторые полезные подсказки, как использовать те инструменты. |