- 14
- 0
- 约4.02千字
- 约 15页
- 2022-07-03 发布于江苏
- 举报
监控IP包流量-代码
{
IPNode * pHead; //链表头
IPNode * pTail; //链表尾
public:Nodelist()
{
pHead=pTail=NULL; //初始化链表
}
~Nodelist()
{
if(pHead!=NULL)
{
IPNode * pTemp=pHead;
pHead=pHead-pNext;
delete pTemp;
}
}
//Ip结点加入链表
void addNode(long sourceIP)
{
if(pHead==NULL) //当链表为空时
{
// coutthe first nodeendl; //测试用
pTail=new IPNode(sourceIP);
pHead=pTail;
pTail-pNext=NULL;
}
else
{
for(IPNode * pTemp=pHead;pTemp;pTemp=pTemp-pNext)
{
//如果链表中存在此IP,发送数据包个数加1
if(pTemp-getIPAddress()==sourceIP)
{
// coutsame sourceip endl; //测试用
pTemp-addCount();
break;
}
}
if(pTemp==NULL)
{
// couta new sourceipendl; //测试用
pTail-pNext=new IPNode(sourceIP);
pTail=pTail-pNext;
pTail-pNext=NULL;
}
}
}
//输出IP结点,即IP地址和其发送的IP包个数
void OutPut()
{
IPNode * pTemp=pHead;
ofstream fout(login.txt,ios::app);
foutSourceIP\tpacket numbersendl;
while(pTemp!=NULL)
{
long lTemp=pTemp-getIPAddress();
foutinet_ntoa(*(in_addr*)(lTemp))\t;
foutpTemp-getCount()endl;
coutinet_ntoa(*(in_addr*)(lTemp))\t;
coutpTemp-getCount()endl;
pTemp=pTemp-pNext;
foutinet_ntoa(*(in_addr*)(lTemp))\t;
foutpTemp-getCount()endl;
}
return;
}
};
//IP包头部结构
struct ip_header
{
unsigned char ver_ihl; //版本号(4位)+头部长度(4位)
unsigned char tos; //服务类型
unsigned short tlen; //总长度
unsigned short identification; //标识
unsigned short flags_fo; //标志+片偏移
unsigned char ttl; //生存时间
unsigned char proto; //协议
unsigned short crc; //校验和
DWORD saddr; //源地址
DWORD daddr; //目的地址
unsigned int op_pad; //选项+填充
};
void main(int argc,char * argv[])
{
pcap_if_t * alldevs,* d; //网络设备结构
pcap_t * fp; //网卡描述符
char errbuf[PCAP_ERRBUF_SIZE]; //错误信息
unsigned int netmask; //子网掩码
char packet_filter[]=ip; //过滤,选择IP协议
struct bpf_program fcode;
struct pcap_pkthdr * header;
const unsigned char * pkt_data;
//获取
原创力文档

文档评论(0)