Вывести дамп сниффера во внешний файл на С
Я создавал простой сниффер, просто для удовольствия, и я хочу вывести дамп в файл. Вот код сниффера:
#include <stdio.h>
#include <pcap.h>
#define MAX_PACKET_NUM 5
int main(void) {
struct pcap_pkthdr header;
const u_char *packet;
char errbuf[PCAP_ERRBUF_SIZE];
char *device;
pcap_t *pcap_handle;
int i;
printf("## Now sniffing on: %s ##\n", device);
printf("## Max packets number for this session: %d\n", MAX_PACKET_NUM);
printf("[?] Sniffing...\n");
pcap_handle = pcap_open_live(device, 1000, 1, 0, errbuf);
for(i=0; i < MAX_PACKET_NUM; i++) {
packet = pcap_next(pcap_handle, &header);
printf("[!] Captured a %d bytes packet!\n", header.len);
dump(packet, header.len);
}
}
Работает нормально, но как вывести дамп в файл? Я пытался использовать файловые потоки, но я действительно не знаю, как вывести функцию. Как видите, функция dump() выводит вывод на экран, может быть, есть функция для вывода в файл? Пожалуйста, помогите мне, ребята!
2 ответа
Ты ищешь fprintf
функция. использование fopen
открыть файл, fprintf
записать в файл и в конце fclose
закрыть файл.
Если ваш сниффер запускается из командной строки в какой-либо версии UN*X или в Windows, и если он "печатает вывод на экран", используя, например, printf()
(скорее, чем fprintf()
), то, что он действительно делает, это печатает свой вывод на "стандартный вывод".
В этом случае вы можете как в UN*X, так и в Windows отправить вывод в файл, "перенаправив" стандартный вывод в файл; это будет сделано с
mysniffer {command-line arguments} > {pathname to the file}