Понимание поведения подоболочки и stdout с каналом

Я не думаю, что можно отфильтровать использование 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 как некорневые пользователи.

Ссылки

2
09.06.2014, 02:59
1 ответ

Не существует такой вещи, как «отправка EOF». Достигнут конец файла, когда больше нет данных для чтения.

В первом фрагменте после выхода из скрипта Python больше нет процесса, у которого канал открыт для записи. Следовательно, как только foo завершит чтение всех данных, которые были отправлены по конвейеру, он обнаруживает условие конца файла на своем стандартном вводе.

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

Когда процесс блокируется системным вызовом read , есть несколько причин, по которым этот системный вызов может возвращать:

  • Если данные доступны, read возвращает положительное значение. и сохраняет это количество байтов в переданном ему буфере.
  • Если достигнут конец файла, read возвращает 0. Для обычного файла это происходит, когда позиция файла достигла конца файла. Для канала это происходит, когда последний процесс, у которого был открыт файл, умирает и буфер канала полностью израсходован.
  • Если возникает ошибка, чтение возвращает -1.
3
27.01.2020, 22:06

Теги

Похожие вопросы