Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将嗅探器的转储输出到C语言中的外部文件_C_Pcap_Sniffer - Fatal编程技术网

将嗅探器的转储输出到C语言中的外部文件

将嗅探器的转储输出到C语言中的外部文件,c,pcap,sniffer,C,Pcap,Sniffer,我创建了一个简单的嗅探器,只是为了好玩,我想将转储输出到一个文件中。以下是嗅探器的代码: #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;

我创建了一个简单的嗅探器,只是为了好玩,我想将转储输出到一个文件中。以下是嗅探器的代码:

#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);
    }
}
#包括
#包括
#定义最大数据包数5
内部主(空){
结构pcap_pkthdr头;
const u_char*数据包;
字符errbuf[PCAP_errbuf_SIZE];
字符*设备;
pcap_t*pcap_手柄;
int i;
printf(“##正在嗅探:%s###\n”,设备);
printf(“此会话的最大数据包数:%d\n”,最大数据包数);
printf(“[?]嗅探…\n”);
pcap_handle=pcap_open_live(设备,1000,1,0,errbuf);
对于(i=0;i

它工作正常,但如何将转储输出到文件?我尝试使用文件流,但我真的不知道如何输出函数。如您所见,dump()函数在屏幕上打印输出,可能有一个函数要输出到文件?请帮帮我,伙计们

您正在寻找
fprintf
函数。使用
fopen
打开文件,使用
fprintf
写入文件,最后使用
fclose
关闭文件。

如果您的嗅探器在某些版本的UN*X或Windows上从命令行运行,并且它通过使用例如
printf()
(而不是
fprintf()
)将输出打印到屏幕上,那么它真正做的是将其输出打印到“标准输出”

在这种情况下,您可以在UN*X和Windows上通过将标准输出“重定向”到文件来将输出发送到文件;这将通过以下方式完成:

mysniffer {command-line arguments} > {pathname to the file}

您想将二进制数据写入文件,还是写入某种文本表示形式(例如十六进制转储)?我想编写十六进制转储是的,我尝试过这些,但如何使用它们编写函数?它们只接受字符串或数字作为参数,我不知道如何将转储存储在字符串中…@jndok您只需在程序中用
fprintf
调用替换
printf
调用即可。