Как получить опции ip пакета в php/С++

157
16 апреля 2019, 18:00

Интересует опция временных меток, отправляемая в ip пакете. Можно ли каким то образом получить эти метки средствами php ? Попробовал curl_getinfo($ch) но не один из 26 параметров не похож на timespan временной метки т.к. они представляют собой количество миллисекунд от полуночи по UTC. Ничего подобного в возвращаемой информации нет, если есть ткните.

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

UPD Добавил С++ т.к. интерпретатор php написан на плюсах. Может есть способ получить опции пакета при помощи программы C++.

Answer 1

Прямо из cURL такие данные посмотреть нельзя, но можно посмотреть со стороны с помощью обычных программ для просмотра трафика. Например, tshark, который, как и PHP, написан на C, если это почему-то важно. Если нужно чтобы программа была строго на C++, то такие тоже можно поискать. Будут ли они решать задачу также ясно и просто - вопрос открытый.

Запускаете прямо из PHP с помощью exec или proc_open, но лучше сначала потренироваться в консоли:

tshark -p -c 10 -e tcp.options.timestamp.tsval -e tcp.options.timestamp.tsecr -Tjson -Y 'tcp.option_kind == 8'

Получаете из стандартного выхода красивый JSON со всеми нужными значениями:

[
  {
    "_index": "packets-01001",
    "_type": "pcap_file",
    "_score": null,
    "_source": {
      "layers": {
        "tcp.options.timestamp.tsval": ["2386387284"],
        "tcp.options.timestamp.tsecr": ["1871759056"]
      }
    }
  }
  ,
  { ....

Если нужна временная метка, можно добавить -e frame.time. Если нужно отобрать только входящие пакеты, только с определёнными свойствами, то фильтр легко составить по образцам пакетов в GUI Wireshark.

Наверное снимать такие метрики лучше в фоне, из crontab - сама процедура может занимать ощутимое время. Например, можно запускать саму команду выше с записью в файл, и через минуту запускать скрипт который этот файл будет читать и разбирать.

Чтобы использовать tshark без прав root кроме обычного шага при установке нужно добавить себя в группу wireshark. В общем случае для запуска этих команд не нужно sudo.

Прямо из cURL такие данные посмотреть нельзя.

READ ALSO
Как обратиться к методу класса через итератор?

Как обратиться к методу класса через итератор?

Есть два класса, второй из них хранит в себе вектор, с указателями на объекты первого классаКак во втором классе через итератор обращаться...

201
не выводятся все рисунки с текстурой

не выводятся все рисунки с текстурой

Я создаю кучу спрайтов и загружаю картинки в текстуры вот так

323
fflush(stdout) в QProcess

fflush(stdout) в QProcess

Задача такова: Существует консольное приложение, осуществляющее некоторое действие (в частности: копирование файла с сохранением времени...

144
Winsock отправка массива типа vector

Winsock отправка массива типа vector

Имею такую матрицу vector<vector<float>> matrix n-го размеракаким образом ее передать через сокеты на сервер

179