Chinaunix首页 | 论坛 | 博客
  • 博客访问: 330741
  • 博文数量: 73
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1293
  • 用 户 组: 普通用户
  • 注册时间: 2013-03-07 11:17
个人简介

爱运动,爱看书,爱生活!

文章分类

全部博文(73)

文章存档

2014年(7)

2013年(66)

分类: C/C++

2013-08-11 17:09:24

1.pcap_findalldevs得到所有网卡接口
举例:

点击(此处)折叠或打开

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <unistd.h>
  5. #include <pcap/pcap.h>
  6. #include <arpa/inet.h>

  7. main()
  8. {
  9.   char errbuf[PCAP_ERRBUF_SIZE];//存放错误信息的缓冲
  10.   pcap_if_t *it;
  11.   int r;
  12.   
  13.   r=pcap_findalldevs(&it,errbuf);
  14.   if(r==-1)
  15.   {
  16.     printf("err:%s\n",errbuf);
  17.     exit(-1);
  18.   }
  19.   
  20.   while(it)
  21.   {
  22.     printf(":%s\n",it->name);
  23.     
  24.     it=it->next;

  25.   }
  26. }
把使用方法也从man手册拷贝过来了:
SYNOPSIS
       #include


       char errbuf[PCAP_ERRBUF_SIZE];


       int pcap_findalldevs(pcap_if_t **alldevsp, char *errbuf);


DESCRIPTION
       pcap_findalldevs()  constructs  a  list  of network devices that can be
       opened with pcap_create() and pcap_activate() or with pcap_open_live().
       (Note  that  there  may be network devices that cannot be opened by the
       process calling pcap_findalldevs(), because, for example, that  process
       might not have sufficient privileges to open them for capturing; if so,
       those devices will not appear on the list.)  alldevsp is set  to  point
       to  the  first element of the list; each element of the list is of type
       pcap_if_t, and has the following members:


              next   if not NULL, a pointer to the next element in  the  list;
                     NULL for the last element of the list


              name   a  pointer  to  a  string giving a name for the device to
                     pass to pcap_open_live()

              description
                     if not NULL, a pointer to a string giving  a  human-read‐
                     able description of the device


              addresses
                     a pointer to the first element of a list of addresses for
                     the interface


              flags  interface flags:


                     PCAP_IF_LOOPBACK
                            set if the interface is a loopback interface


       Each element of the list of addresses is of type pcap_addr_t,  and  has
       the following members:


              next   if  not  NULL, a pointer to the next element in the list;
                     NULL for the last element of the list


              addr   a pointer to a struct sockaddr containing an address

             netmask
                     if not NULL, a pointer to a struct sockaddr that contains
                     the  netmask  corresponding  to the address pointed to by
                     addr


              broadaddr
                     if not NULL, a pointer to a struct sockaddr that contains
                     the   broadcast  address  corresponding  to  the  address
                     pointed to by addr; may be null if the interface  doesn't
                     support broadcasts


              dstaddr
                     if not NULL, a pointer to a struct sockaddr that contains
                     the destination  address  corresponding  to  the  address
                     pointed  to by addr; may be null if the interface isn't a
                     point-to-point interface


       Note that not all the addresses in the list of addresses are  necessar‐
       ily IPv4 or IPv6 addresses - you must check the sa_family member of the
       struct sockaddr before interpreting the contents of the address.


       The list of devices must be freed with pcap_freealldevs().


RETURN VALUE
       pcap_findalldevs() returns 0 on success and -1 on failure.   If  -1  is
       returned,  errbuf  is  filled  in  with  an  appropriate error message.
       errbuf is assumed to be able to hold at least PCAP_ERRBUF_SIZE chars.




阅读(16312) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~