У меня есть GPS-трекер, который отправляет два пакета на мой сервер. Первый из них содержит данные OBD, во втором мы можем найти координаты. У меня есть приложение, которое прослушивает определенный порт (Traccar), однако оно перехватывает только второй пакет (поддержка пакетов без координат еще не реализована). Я хотел бы захватить эти пакеты, прочитать данные OBD и вставить их в базу данных SQL. Я могу сделать это вручную с помощью tcpdump, но, конечно, это не решение. Как лучше и эффективнее решить эту проблему? Должен ли я использовать popen(), чтобы открыть канал для tcpdump? Есть ли другой способ?
Простой захват пакетов
Ответы (1)
Конвейер tcpdump: по моему опыту всегда рискованно анализировать вывод команды/программы. Формат вывода может меняться в зависимости от версии программы, платформы, на которой она работает, и используемой LOCALE. Эти сюрпризы возникают при развертывании программного обеспечения.
Чтобы немного больше кодировать, вторым вариантом было бы встроить внутренности tcpdump, то есть сказать libpcap. Это не так сложно, краткое введение здесь:
http://www.tcpdump.org/pcap.html
... это было бы чище, но все же, как и в случае с tcpdump, вы будете «голым на проводе», просто видя кадры Ethernet, без слоев IP, TCP, UDP и т. д., которые могут вам понадобиться.
Но это (tcpdump или libpcap) обходной путь.
Так как Traccar является продуктом с открытым исходным кодом, изучали ли вы объем работы по добавлению требуемой функции? В этой ситуации я бы потратил пару часов на расследование.