使用 Winpcap 读取 uint16 结构中保存的文件(.PCAP)
Use Winpcap to read saved file(.PCAP) in uint16 structure
我使用 Winpcap 使用以下代码读取已保存的 .pcap 文件,但输出以十六进制格式放入 unsigned char "u_char data"。如何以十进制格式读取 uint16 结构中的 .pcap 文件?
string file = Address_Data;
char errbuff[PCAP_ERRBUF_SIZE];
pcap_t * pcap = pcap_open_offline(file.c_str(), errbuff);
struct pcap_pkthdr *header;
typedef unsigned char u_char;
const u_char *data;
u_int packetCount = 0;
while (int returnValue = pcap_next_ex(pcap, &header, &data) >= 0)
{
printf("Packet # %i\n", ++packetCount);
printf("Packet size: %d bytes\n", header->len);
if (header->len != header->caplen)
printf("Warning! Capture size different than packet size: %ld bytes\n", header->len);
printf("Epoch Time: %d:%d seconds\n", header->ts.tv_sec, header->ts.tv_usec);
for (u_int i=0; (i < header->caplen ) ; i++)
{
if ( (i % 16) == 0) printf("\n");
printf("%.2x ", data[i]);
}
printf("\n\n");
}
例如数据[0]=24,数据[1]=8a
我希望数据格式为 uint16 和 Decimal 而不是 hex,例如:data[0]= 9354 [248A hex]
我通过将两个 8 位轻松转换为一个 16 位解决了我的问题,如下所示,因为我在 winpcap 中没有看到任何读取格式。
uint16_T(data[2 * i]) * 256 + uint16_T(data[(2 * i) + 1]
我使用 Winpcap 使用以下代码读取已保存的 .pcap 文件,但输出以十六进制格式放入 unsigned char "u_char data"。如何以十进制格式读取 uint16 结构中的 .pcap 文件?
string file = Address_Data;
char errbuff[PCAP_ERRBUF_SIZE];
pcap_t * pcap = pcap_open_offline(file.c_str(), errbuff);
struct pcap_pkthdr *header;
typedef unsigned char u_char;
const u_char *data;
u_int packetCount = 0;
while (int returnValue = pcap_next_ex(pcap, &header, &data) >= 0)
{
printf("Packet # %i\n", ++packetCount);
printf("Packet size: %d bytes\n", header->len);
if (header->len != header->caplen)
printf("Warning! Capture size different than packet size: %ld bytes\n", header->len);
printf("Epoch Time: %d:%d seconds\n", header->ts.tv_sec, header->ts.tv_usec);
for (u_int i=0; (i < header->caplen ) ; i++)
{
if ( (i % 16) == 0) printf("\n");
printf("%.2x ", data[i]);
}
printf("\n\n");
}
例如数据[0]=24,数据[1]=8a 我希望数据格式为 uint16 和 Decimal 而不是 hex,例如:data[0]= 9354 [248A hex]
我通过将两个 8 位轻松转换为一个 16 位解决了我的问题,如下所示,因为我在 winpcap 中没有看到任何读取格式。
uint16_T(data[2 * i]) * 256 + uint16_T(data[(2 * i) + 1]