Я не думаю, что можно отфильтровать использование tcpdump
на протокольном уровне, (HTTP, GSM_MAP, и т.д.), или я должен сказать не очень легко. Это ТАК названные Вопросы и ответы: "Я могу использовать tcpdump для получения Запросов HTTP, заголовка ответа и органа по ответу?", показывает, как Вы пошли бы о выполнении этого для Трафика HTTP, это не симпатично! Я думаю функция, которую Вы ищете, позволил бы Вам фильтровать их общим названием протокола.
Как альтернатива Вы могли бы хотеть попробовать версию командной строки Wireshare, иначе. tshark
вместо этого.
tshark
может быть немного пугающим для запуска с, но это - довольно простой инструмент, после того как Вы проводите немного времени, читая tshark
страница справочника и гуглящий для существующих рецептов. Можно использовать команду для обнаружения всех протоколов это tshark
знает о:
$ tshark -G protocols|grep -E "SCCP|GSM_MAP|SCTP"
GSM Mobile Application GSM_MAP gsm_map
Signalling Connection Control Part SCCP sccp
Signalling Connection Control Part Management SCCPMG sccpmg
Stream Control Transmission Protocol SCTP sctp
SS7 SCCP-User Adaptation Layer SUA sua
При взгляде на вышеупомянутый вывод это казалось бы этим tshark
знает обо всех протоколах в Ваших вопросах, таким образом, это - хороший первый шаг. Если необходимо отфильтровать на определенных полях в рамках данного протокола, можно искать на веб-сайте Wireshark с помощью их индекса ссылок на протокол также, таким образом, это - хороший второй шаг.
$ tshark -G fields | head -10
P Short Frame short
P Malformed Packet malformed
P Unreassembled Fragmented Packet unreassembled
P IEEE 1722 Protocol ieee1722
F Control/Data Indicator ieee1722.cdfield FT_BOOLEAN ieee1722 8 0x80
F AVBTP Subtype ieee1722.subtype FT_UINT8 ieee1722 BASE_HEX 0x7f
F AVBTP Stream ID Valid ieee1722.svfield FT_BOOLEAN ieee1722 8 0x80
F AVBTP Version ieee1722.verfield FT_UINT8 ieee1722 BASE_HEX 0x70
F AVBTP Media Reset ieee1722.mrfield FT_UINT8 ieee1722 BASE_DEC 0x8
F AVBTP Gateway Info Valid ieee1722.gvfield FT_BOOLEAN ieee1722 8 0x2
...
Здесь я собираю трафик протокола HTTP только там, где я загружаю страницу из "unix.stackexchange.com" т.е. "198.252.206.16". Мой беспроводной интерфейс (-i wlp3s0
), и я просто вывожу первые 10 строк вывода.
$ tshark -O http -i wlp3s0 host 198.252.206.16 | head -10
Capturing on 'wlp3s0'
2 Frame 1: 855 bytes on wire (6840 bits), 855 bytes captured (6840 bits) on interface 0
Ethernet II, Src: IntelCor_85:a7:20 (00:26:c7:85:a7:20), Dst: Watchgua_85:be:9a (00:90:7f:85:be:9a)
Internet Protocol Version 4, Src: 192.168.1.161 (192.168.1.161), Dst: 198.252.206.16 (198.252.206.16)
Transmission Control Protocol, Src Port: 37713 (37713), Dst Port: http (80), Seq: 1, Ack: 1, Len: 789
Hypertext Transfer Protocol
GET /review/late-answers HTTP/1.1\r\n
[Expert Info (Chat/Sequence): GET /review/late-answers HTTP/1.1\r\n]
[Message: GET /review/late-answers HTTP/1.1\r\n]
[Severity level: Chat]
[Group: Sequence]
...
Ключевая вещь Вы захотите сохранить прямыми, состоит в том, что Вы используете "фильтры получения" здесь при входе этой информации. Они отличаются это "фильтры дисплейного отображения".
Удостоверьтесь, что Вы проверяете это названные Вопросы и ответы U&L: не Может заставить Wireshark работать как пользователь на CentOS, если у Вас нет своей установки полномочий правильно так, чтобы можно было работать tshark
и wireshark
как некорневые пользователи.
Не существует такой вещи, как «отправка EOF». Достигнут конец файла, когда больше нет данных для чтения.
В первом фрагменте после выхода из скрипта Python больше нет процесса, у которого канал открыт для записи. Следовательно, как только foo
завершит чтение всех данных, которые были отправлены по конвейеру, он обнаруживает условие конца файла на своем стандартном вводе.
Во втором фрагменте после выхода из сценария Python канал все еще открыт подоболочкой. Следовательно, даже если foo
завершит чтение всех данных, созданных сценарием Python, он будет продолжать ждать дополнительных входных данных. Подоболочка запускает cat
, который считывает и пересылает данные со своего собственного стандартного ввода. После выхода cat
ситуация такая же, как и раньше: больше нет процесса, у которого канал открыт для записи, и foo
достигнет конца своего ввода.
Когда процесс блокируется системным вызовом read
, есть несколько причин, по которым этот системный вызов может возвращать:
read
возвращает положительное значение. и сохраняет это количество байтов в переданном ему буфере. read
возвращает 0. Для обычного файла это происходит, когда позиция файла достигла конца файла. Для канала это происходит, когда последний процесс, у которого был открыт файл, умирает и буфер канала полностью израсходован. чтение
возвращает -1.