学习libpcap库,写例子代码--ether.hpp

#ifndef ETHER_HPP
#define ETHER_HPP
#include <iostream>
#include <string>
#include <netinet/ether.h>
#include "ip.hpp"
#include "arp.hpp"

void del_ether(u_char *args, const struct pcap_pkthdr* ptr_header, const u_char* ptr_packet)
{  
  //only 10Mb/s ether
  const struct ether_header* ptr_ethernet = NULL;
  const struct ip* ptr_ip; 

  ptr_ethernet = (struct ether_header*)ptr_packet;
  if (ptr_ethernet != NULL)
  { 
    std::string dest_mac_addr(ether_ntoa((const ether_addr*)ptr_ethernet->ether_dhost));     
    std::string src_mac_addr(ether_ntoa((const ether_addr*)ptr_ethernet->ether_shost));
    std::cout<<src_mac_addr<<_("---->")<<dest_mac_addr<<std::endl;
    std::string protocol;     
    switch (ntohs(ptr_ethernet->ether_type))
    {
       case ETHERTYPE_IP://[RFC791]
      //ptr_ip = (struct ip*)(ptr_ethernet+sizeof(struct ether_header));is error,i donot know why?
      //ptr_ip = (struct ip*)(ptr_packet+sizeof(struct ether_header));
          del_ip(ptr_packet, sizeof(struct ether_header));
          protocol = _("IP");
          break;
       case ETHERTYPE_ARP://[RFC826]
      del_arp(ptr_packet, sizeof(struct ether_header));
      protocol = _("ARP");
          break;
       case ETHERTYPE_REVARP:
     del_rarp(ptr_packet, sizeof(struct ether_header));
     protocol = _("RARP");
          break;
       case ETHERTYPE_PUP:
     protocol = _("Xerox PUP");
          break;
       default:
     protocol = _("undefined protocol");
          break;
     }
    std::cout<<_("protocol: ")<<protocol<<std::endl;   
  }   
}
#endif
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值