Цель состоит в извлечении заголовков пакетов для URL-адресов, посещаемых с помощью tcpdump.
Пока что я могу сохранить заголовок пакета в файле, используя:
tcpdump "dst port 80 and tcp[13] & 0x08 = 8" -A -s 300 | tee -a ./Desktop/packets.txt
И я написал программу для анализа заголовка и извлечения URL-адреса при следующей команде:
cat ~/Desktop/packets.txt | ./packet-parser.exe
Но то, что я хочу сделать, это напрямую передать tcpdump в мою программу, которая затем запишет данные:
tcpdump "dst port 80 and tcp[13] & 0x08 = 8" -A -s 300 | ./packet-parser.exe
Вот сценарий как есть. Вопрос в том, как мне нужно изменить его для поддержки непрерывного ввода из tcpdump?
#include <boost/regex.hpp>
#include <fstream>
#include <cstdio> // Needed to define ios::app
#include <string>
#include <iostream>
int main()
{
// Make sure to open the file in append mode
std::ofstream file_out("/var/local/GreeenLogger/url.log", std::ios::app);
if (not file_out)
std::perror("/var/local/GreeenLogger/url.log");
else
{
std::string text;
// Get multiple lines of input -- raw
std::getline(std::cin, text, '\0');
const boost::regex pattern("GET (\\S+) HTTP.*?[\\r\\n]+Host: (\\S+)");
boost::smatch match_object;
bool match = boost::regex_search(text, match_object, pattern);
if(match)
{
std::string output;
output = match_object[2] + match_object[1];
file_out << output << '\n';
std::cout << output << std::endl;
}
file_out.close();
}
}
Заранее спасибо за помощь!