求助,vs2017的error C2065: “FILE”: 未声明的标识符

求助,vs2017的error C2065: “FILE”: 未声明的标识符

代码如下:#include
#include"pch.h"
#include
#include
//#include
#include
//#include
#define WIN32_LEAN_AND_MEAN

#include
#include
//#include
//#include
#include

#pragma comment(lib, “wsock32.lib”)
#pragma comment(lib,“ws2_32.lib”)

#define BUFSIZE 10240
#define STRSIZE 1024

typedef long bpf_int32;
typedef unsigned long bpf_u_int32;
typedef unsigned short u_short;
typedef unsigned long u_int32;
typedef unsigned short u_int16;
typedef unsigned char u_int8;

//pacp文件头结构体(24B)
typedef struct pcap_file_header
{
bpf_u_int32 magic; //4B,用来标识文件的开始
u_short version_major; //2B,当前文件主要的版本号
u_short version_minor; //2B,当前文件次要的版本号
bpf_int32 thiszone; //4B,当地的标准时间;全零
bpf_u_int32 sigfigs; //4B,时间戳的精度,全零
bpf_u_int32 snaplen; //4B,最大的存储长度
bpf_u_int32 linktype; //4B,链路类型
}pcap_file_header;

//时间戳

typedef struct time_val
{
long tv_sec;; //时间戳高位,精确到seconds
long tv_usec;; //时间戳低位,精确到microseconds
}timestamp;

//pcap数据包头结构体
typedef struct pcap_pkthdr
{
timestamp ts;
bpf_u_int32 caplen; //当前数据区的长度,即抓取到的数据帧长度,由此可以得到下一个数据帧的长度
bpf_u_int32 len; //离线数据长度,网络中实际数据帧的长度,一般不大于caplen,多数情况下两者相等

}pcap_pkthdr;

//数据帧头
typedef struct FramHeader_t

{ //Pcap捕获的数据帧头
u_int8 DstMAC[6]; //目的MAC地址
u_int8 SrcMAC[6]; //源MAC地址
u_short FrameType; //帧类型

}FramHeader_t;

//IP数据报头
typedef struct IPHeader_t

{ //IP数据报头

u_int8 Ver_HLen;		//版本+报头长度
u_int8 TOS;				//服务类型
u_int16 TotalLen;		//总长度
u_int16 ID;				//标识
u_int16	Flag_Segment;	//标志+片偏移
u_int8 TTL;				//生存周期
u_int8 Protocol;		//协议类型
u_int16	Checksum;		//头部校验和
u_int32 SrcIP;			//源IP地址
u_int32	DstIP;			//目的IP地址

}IPHeader_t;

//ICMP报头
typedef struct ICMPHeader_t
{
BYTE type; //8位类型字段
BYTE code; //8位代码字段
USHORT cksum; //16位校验和
USHORT id; //16位标识符
USHORT seq; //16位序列号
}ICMPHeader_t;
//void match_http(FILE *fp, char *head_str, char *tail_str, char *buf, int total_len);
//查找 http 信息函数

int main()

{

pcap_file_header *file_header;
pcap_pkthdr *ptk_header;
IPHeader_t *ip_header;
ICMPHeader_t *icmp_header;
FILE *fp;
FILE *output;
int pkt_offset, i = 0;
int num = 0;    //计数icmp包
int ip_len, ip_proto;
char buf[BUFSIZE], my_time[STRSIZE];
char src_ip[STRSIZE], dst_ip[STRSIZE];

//初始化
file_header = (struct pcap_file_header *)malloc(sizeof(pcap_file_header));
ptk_header = (struct pcap_pkthdr *)malloc(sizeof(pcap_pkthdr));
ip_header = (IPHeader_t *)malloc(sizeof(IPHeader_t));
icmp_header = (ICMPHeader_t *)malloc(sizeof(ICMPHeader_t));
memset(buf, 0, sizeof(buf));

if ((fp = fopen("Tracert www.cqupt.edu.cn.pcap", "rb")) == NULL)
{
	printf("error: can not open pcap file\n");
	exit(0);

}
if ((output = fopen("icmp_2016210456.pcapng", "wb")) == NULL)
{
	printf("error: can not open output file\n");
	exit(0);
}

//开始读数据包
pkt_offset = 24;	//pcap文件头结构24个字节
while (fseek(fp, pkt_offset, SEEK_SET) == 0)   //遍历数据包    fseek:将位置指针移到离文件头n字节处。
{
	i++;		//pcap_header  16B
	if (fread(ptk_header, 16, 1, fp) != 1) //读pcap数据包头结构
	{
		printf("\nread end of pcap file\n");
		break;
	}
	pkt_offset = pkt_offset + (16 + ptk_header->caplen);	//下一个数据包的偏移
	fseek(fp, 14, SEEK_CUR);      //忽略数据帧头14个字节
	if (fread(ip_header, sizeof(IPHeader_t), 1, fp) != 1)  //IP数据报头20个字节
	{
		printf("%d:can not read ip_header\n", i);
		break;
	}

	ip_proto = ip_header->Protocol;
	if (ip_proto == 1)	//判断是否是icmp协议
	{
		if (fread(icmp_header, sizeof(ICMPHeader_t), 1, fp) != 1)
		{
			printf("%d: can not read ip_header\n", i);
			break;
		}
		inet_ntop(AF_INET, (void *)&(ip_header->SrcIP), src_ip, 16);   //将数值格式转化为点分十进制的ip地址格式
		inet_ntop(AF_INET, (void *)&(ip_header->DstIP), dst_ip, 16);
		printf("源IP %d:src=%s\n", i, src_ip);
		printf("目标IP %d:dst=%s\n", i, dst_ip);
		//printf("源IP地址:%s\n", inet_ntoa(ip_header->SrcIP));
		//printf("目的IP地址:%s\n", inet_ntoa(ip_header->SrcIP));
		printf("协议类型:%d\n", ip_proto);
		num++;
	}
}
printf("主机相关icmp包的个数:%d\n", num);
fclose(fp);
fclose(output);
return 0;
}

程序目的:从pcap文件中抓出icmp包并存盘
我用vs2010运行没有问题,用vs2017就有一大堆报错

求助,vs2017的error C2065: “FILE”: 未声明的标识符_第1张图片
求助各位大佬。

你可能感兴趣的:(求助)