我正在尝试编写一个.pcap文件,这可以在Wireshark中使用.
为了做到这一点,我有一些结构与各种数据类型,我需要写入一个文件. (见代码)
为了做到这一点,我有一些结构与各种数据类型,我需要写入一个文件. (见代码)
所以,我创建结构体实例,填写数据,使用FILE * fp = fopen(“test.pcap”,“w”),然后我不确定如何正确地写入文件.我相信我应该使用memcpy,但我不知道做最好的方法.我以前主要是使用C图书馆来做到这一点.有什么建议么?
typedef struct pcap_hdr_s { uint32_t magic_number; /* magic number */ uint16_t version_major; /* major version number */ uint16_t version_minor; /* minor version number */ int32_t thiszone; /* GMT to local correction */ uint32_t sigfigs; /* accuracy of timestamps */ uint32_t snaplen; /* max length of captured packets,in octets */ uint32_t network; /* data link type */ } pcap_hdr_t; typedef struct pcaprec_hdr_s { uint32_t ts_sec; /* timestamp seconds */ uint32_t ts_usec; /* timestamp microseconds */ uint32_t incl_len; /* number of octets of packet saved in file */ uint32_t orig_len; /* actual length of packet */ } pcaprec_hdr_t; typedef struct ethernet_hdr_s { uint8_t dst[6]; /* destination host address */ uint8_t src[6]; /* source host address */ uint16_t type; /* IP? ARP? RARP? etc */ } ethernet_hdr_t; typedef struct ip_hdr_s { uint8_t ip_hl:4,/* both fields are 4 bits */ ip_v:4; uint8_t ip_tos; uint16_t ip_len; uint16_t ip_id; uint16_t ip_off; uint8_t ip_ttl; uint8_t ip_p; uint16_t ip_sum; uint32_t ip_src; uint32_t ip_dst; }ip_hdr_t; typedef struct udp_header { uint16_t src; uint16_t dst; uint16_t length; uint16_t checksum; } udp_header_t;