当前位置:  技术问答>linux和unix

我自己写得libpcap抓包,用libnet发送程序,但是编译通过以后,无法运行,错误为 段错误

    来源: 互联网  发布时间:2017-05-19

    本文导语:  我自己写得libpcap抓包,用libnet发送程序,但是编译通过以后,无法运行,错误为 段错误,我自己也按照网上说段错误的调试了,但是还是不知道怎么修改。 下面是源代码以及错误提示: #include  #include  #include  #...

我自己写得libpcap抓包,用libnet发送程序,但是编译通过以后,无法运行,错误为 段错误,我自己也按照网上说段错误的调试了,但是还是不知道怎么修改。

下面是源代码以及错误提示:

#include 
#include 
#include 

#include 
#include 
#include 


struct ether_header

{
    u_int8_t ether_dhost[6];

    u_int8_t ether_shost[6];

    u_int16_t ether_type;

};

void ethernet_protocol_packet_callback(u_char *argument, const struct pcap_pkthdr *packet_header, const u_char *packet_content)
{

    int packet_size;

     char error_buffer[LIBNET_ERRBUF_SIZE];

    char *dev1_ = "eth9"; 
    char *dev2_ = "eth8";

    libnet_t *l;
    static int k;

char *data;

u_int8_t len;

     int ethernet_protocol_tag  = 0;

u_short ethernet_type;
    
    struct ether_header *ethernet_protocol;
    
    u_int8_t *hardware_destination;

u_int8_t *hardware_source;

len = packet_header->len;

    data = packet_content;


    int i;
     
    for(i=0;iether_type);

    
    printf("%04xn", ethernet_type);

hardware_source = ethernet_protocol->ether_shost;

hardware_destination = ethernet_protocol->ether_dhost;

printf("Mac Source Address is : n"); 
    printf("%02x:%02x:%02x:%02x:%02x:%02xn", *hardware_source, *(hardware_source + 1), *(hardware_source + 2), *(hardware_source + 3),
*(hardware_source + 4), *(hardware_source + 5));

    printf("Mac Destination Address is : n"); 
    printf("%02x:%02x:%02x:%02x:%02x:%02xn", *hardware_destination, *(hardware_destination + 1), *(hardware_destination + 2), *(hardware_destination+ 3), 
        *(hardware_destination + 4), *(hardware_destination + 5));


    if(k%2==0)

  l = libnet_init(LIBNET_LINK,  dev1_, error_buffer);

else

  l = libnet_init(LIBNET_LINK,  dev2_, error_buffer);
     k++;

    ethernet_protocol_tag = libnet_build_ethernet(  
    
           hardware_destination,  
    
           hardware_source,      
    
           ethernet_type,         
    
                 data,           
 
                 len-14,             
    
                 l,           
    
       ethernet_protocol_tag );  
     
                    
    packet_size = libnet_write(l);  

printf("鍙戦€佺殑瀛楄妭鏁颁负%dn", packet_size);

libnet_destroy(l);




}
 
void main()
{
    pcap_t *pcap_handle;  

    int j = 0; 
    
    char error_content[PCAP_ERRBUF_SIZE];

    char *dev1 = "eth8"; 
    char *dev2 = "eth9";

   while(1)
   
     {

        if(j%2==0)
  {

    pcap_handle = pcap_open_live(dev1, BUFSIZ, 1,  0,  error_content);

if(pcap_handle = NULL)
  {
                              fprintf(stderr,"could not open device %s;%s",dev1,error_content);
                               return;
                            }

                pcap_loop(pcap_handle, 1,  ethernet_protocol_packet_callback,  NULL); 
    
                pcap_close(pcap_handle); 

         }

else

    {

    pcap_handle = pcap_open_live(dev2,   BUFSIZ, 1, 0,  error_content); 

 if(pcap_handle = NULL)
  {
                              fprintf(stderr,"could not open device %s;%s",dev2,error_content);
                               return;
                          }

                pcap_loop(pcap_handle,  1, ethernet_protocol_packet_callback, NULL); 
    
                pcap_close(pcap_handle); 

         }

j++;


      }



错误提示为:Program received signal SIGSEGV, Segmentation fault.
0x0014d282 in pcap_loop () from /usr/lib/libpcap.so.0.8

我自己设置断点以后确定错误在执行 pcap_loop () 时候产生,在这个回调函数  void ethernet_protocol_packet_callback  中无法执行,就是提示上面的错误。

请大神看看到底是哪里的错误呢? 谢谢了


|
 pcap_loop(pcap_handle,  1, ethernet_protocol_packet_callback, NULL);  应该是这个地方 打开错误后,后面接着又来关闭,产生的

|
一般这种问题是越界

    
 
 

您可能感兴趣的文章:

  • libpcap编译问题
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 使用libpcap读取tcpdump抓取的文件并解析c代码实例
  • libpcap --- No rule to make target `pcap-@V_PCAP@.o', needed by `libpcap.a`
  • libpcap工作原理及抓包主要函数介绍
  • 网络数据包捕获函数包 libpcap
  • 如何利用libpcap和Python嗅探数据包
  • (菜鸟飞飞)tcpdump和libpcap有啥区别?
  • libpcap库主要函数介绍
  • HELP! Libpcap与iptables之间的区别!
  • 使用libpcap实现抓包程序的步骤及代码示例
  • 请教菜鸟问题 libpcap达人路过看看
  • c语言基于libpcap实现一个抓包程序过程
  • libpcap和libnotify
  • 我想写一段代码,要调用到libpcap库的函数,要怎么做.
  • libpcap怎么设置过滤规则!我怎么老是抓到自己的包
  • libpcap
  • libpcap中的pcap_parse()定义
  • 关于用Libpcap过滤报文
  • 关于libpcap的Documention问题!
  • 高手请指教:libpcap的pcap_pkthdr结构
  • libpcap的安装
  • libpcap函数库的问题.


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,