监控IP包流量-代码.docVIP

  • 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)

1亿VIP精品文档

相关文档