zoukankan      html  css  js  c++  java
  • C++ Project 积累(2)

    1. 定制 pcap_dump

    pcap_dump 用于将数据包写入磁盘, 配合 pcap_open_dead 可以将写入文件转化为 wireshark 可读格式

    但这个函数缺少一个参数, 应提供 append write 选项

    经过彻底的搜索, 发现靠 winpcap API 是无法满足我的需求, 因此只能定制 pcap_dump, 则这正是我一直想避免的.

    于是, 重新研究 PCAP 文件格式.

    PCAP 文件格式是 Pcap_file_description Pcap_header Packet Pcap_header Packet ….

    无论是 Pcap_file_description 还是 Pcap_header pcap.h 中都有定义, 可以直接使用

    Pcap_file_descritption 大小为 24 字节, Pcap_header 16 字节. 注意, 网络字节流顺序, 下面是个实现

    FILE* create_pcap_file(const char* filename, int linktype) {

        struct pcap_file_header fh;

    fh.magic = 0xa1b2c3d4;

    fh.sigfigs = 0;

    fh.version_major = 2;

    fh.version_minor = 4;

    fh.snaplen = (1<<16)-1;

    fh.thiszone = 0;

    fh.linktype = linktype;

    FILE *file = fopen(filename, "wb");

    if(file != NULL) {

    if(fwrite(&fh, sizeof(fh), 1, file) != 1) {

    fclose(file);

    file = NULL;

    } else {

                fclose(file);

                file = NULL;

            }

    }

    return file;

    }

    int write_pcap_packet(FILE* file,pcap_pkthdr *header, const unsigned char *data, size_t length) {

        

        if(fwrite(header, sizeof(pcap_pkthdr), 1, file) != 1) {

    return 1;

    }

          

    if(fwrite(data, 1, length, file) != length) {

    return 2;

    }

          

    return 0;

    }

    2. 类内 const 的作用

    以前在书上学到过, const 变量必须在初始化列表中. 一直不太理解为什么 const 的变量可以再构造函数中初始化.

    这种状况出现的原因是别人提供的 API 仅返回 const 类型的返回值, 导致自己的 class 构造函数的参数也必须是 const 类型

    3. fwrite fopen

    fwrite 是将 block 写入磁盘

    int main ()

    {

    FILE * pFile;

    char buffer[] = { 'x' , 'y' , 'z' };

    pFile = fopen ("myfile.bin", "wb");

    fwrite (buffer , sizeof(char), sizeof(buffer), pFile);

    fclose (pFile);

    return 0;

    }

    wb 是写入二进制的意思

    fopen 可以以多种参数打开文件, 比如 w, a, r, wb, ab 等等

    fputs 可以输出 string

    freopen 重定向输入输出流不同, 每次对文件的操作都需要 FILE* 句柄

  • 相关阅读:
    Quicksum -SilverN
    uva 140 bandwidth (好题) ——yhx
    uva 129 krypton factors ——yhx
    uva 524 prime ring problem——yhx
    uva 10976 fractions again(水题)——yhx
    uva 11059 maximum product(水题)——yhx
    uva 725 division(水题)——yhx
    uva 11853 paintball(好题)——yhx
    uva 1599 ideal path(好题)——yhx
    uva 1572 self-assembly ——yhx
  • 原文地址:https://www.cnblogs.com/zhouzhuo/p/3687250.html
Copyright © 2011-2022 走看看