1:  #include"pcap.h"
   2:  #include<WinSock.h>
   3:  #define IPTOSBUFFERS    12
   4:  char *iptos(u_long in){
   5:      static char output[IPTOSBUFFERS][3*4+3+1];
   6:      static short which;
   7:      u_char *p=(u_char*)&in;
   8:      which=(which+1==IPTOSBUFFERS?0:which+1);
   9:      sprintf(output[which],"%d. %d. %d. %d",p[0],p[1],p[2],p[3]);
  10:      return output[which];
  11:  }
  12:  char* ip6tos(struct sockaddr *sockaddr,char*address,int addrlen){
  13:      socklen_t sockaddrlen=sizeof(sockaddr_in6);
  14:      if(getnameinfo(sockaddr,sockaddrlen,address,addrlen,NULL,0,NI_NUMERICHOST)!=0)
  15:          address=NULL;
  16:      return address;
  17:  }
  18:  void ifprint(pcap_if_t *d){
  19:   
  20:      char ip6str[128];
  21:   
  22:      //device name
  23:      printf("Device Name: %s\n",d->name);
  24:      printf("Description: %s\n",d->description);
  25:   
  26:      //loopback address
  27:      if(d->flags&&PCAP_IF_LOOPBACK)
  28:          printf("loopback: yes\n");
  29:      else
  30:          printf("loopback: yes\n");
  31:   
  32:      for(pcap_addr_t *a=d->addresses;a;a=a->next){
  33:          printf("Address Family: %d\n",a->addr->sa_family);
  34:          switch(a->addr->sa_family){
  35:          case AF_INET:
  36:              printf("Address Family: AF_INTET\n");
  37:              if(a->addr)
  38:                  printf("Address: %s\n",iptos(((struct sockaddr_in *)a->addr)->sin_addr.s_addr));
  39:              if(a->netmask)
  40:                  printf("Netmask: %s\n",iptos((((struct sockaddr_in *)a->netmask)->sin_addr.s_addr)));
  41:              if(a->broadaddr)
  42:                  printf("Broadcast Address: %s\n",iptos(((struct sockaddr_in *)a->broadaddr)->sin_addr.s_addr));
  43:              if(a->dstaddr)
  44:                  printf("Destination Address: %s\n",iptos(((struct sockaddr_in *)a->dstaddr)->sin_addr.s_addr));
  45:              break;
  46:          case AF_INET6:
  47:              printf("Address Family Name: AF_INET6\n");
  48:              if(a->addr)
  49:                  printf("Address: %s\n",ip6tos(a->addr,ip6str,sizeof(ip6str)));
  50:              break;
  51:          default:
  52:              printf("Adress Family Name: Unknown\n");
  53:                  break;
  54:          }
  55:      }
  56:  }
  57:   
  58:   
  59:  int main(){
  60:      pcap_if_t *all_devs,*d;
  61:   
  62:      char errBuf[PCAP_ERRBUF_SIZE+1],source[PCAP_ERRBUF_SIZE+1];
  63:      printf("Enter the device you want to list:\n");
  64:      printf("rpcap://==>list interface int the machine\n");
  65:      printf("rpcap://hostname:port==>list interface in a remote machine\n");
  66:      printf("file ://foldname==>list all pcap files in the give folder\n");
  67:      printf("Enter your choice: ");
  68:      fgets(source ,PCAP_ERRBUF_SIZE,stdin);
  69:      source[PCAP_ERRBUF_SIZE]='\0';
  70:   
  71:   
  72:      //get local device list\n
  73:      if(pcap_findalldevs_ex(source,NULL,&all_devs,errBuf)==-1){
  74:          fprintf(stderr,"ERROR:%s\n",errBuf);
  75:          exit(1);
  76:      }
  77:   
  78:      //print list
  79:      for(pcap_if_t *d=all_devs;d;d=d->next){
  80:          ifprint(d);
  81:      }
  82:      
  83:      //fianlly free any resource
  84:      pcap_freealldevs(all_devs);
  85:  }

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

试验结果:

ARPSpoofing教程(二) - 获取网络设备中的详细地址信息的更多相关文章

  1. android笔记---百度地图api应用 (二) 获取公交路线的详细信息

    package com.example.bdtest; import com.baidu.mapapi.MKEvent; import com.baidu.mapapi.MKPlanNode; imp ...

  2. 获取系统中所有进程&线程信息

    读书笔记--[计算机病毒解密与对抗] 目录: 遍历进程&线程程序 终止进程 获取进程信息 获取进程内模块信息 获取进程命令行参数 代码运行环境:Win7 x64 VS2012 Update3 ...

  3. eHR自动同步获取LDAP中的邮箱地址

    背景:公司里有eHR系统,有网域,IBM Lotus Notes邮件系统,新人入职会在eHR系统里提前建好档案,网域帐号.邮箱帐号均会在入职前提前建好,因为邮箱帐号是晚于eHR建档的,因此在eHR建档 ...

  4. 根据高德API知道坐标获取详细地址信息

    /** * 根据坐标获取具体地址 * @param coor 坐标字符串 * @return */ public static String getAdd(String coor){ String u ...

  5. GetAdaptersInfo获取网卡配置和Ip地址信息

    一台机器上可能不只有一个网卡,但每一个网卡只有一个MAC地址,而每一个网卡可能配置有多个IP地址:如平常的笔记本电脑中,就会有无线网卡和有线网卡(网线接口)两种:因此,如果要获得本机所有网卡的IP和M ...

  6. JavaScript 入门教程二 在HTML中使用 JavaScript

    一.使用 <script> 元素的方式有两种:直接在页面中嵌入 JavaScript 代码和引用外部 JavaScript 文件. 二.使用内嵌方式,一般写法为: <script t ...

  7. Navicat使用教程:获取MySQL中的高级行数(第2部分)

    Navicat Premium是一个可连接多种数据库的管理工具,它可以让你以单一程序同时连接到MySQL.Oracle及PostgreSQL数据库,让管理不同类型的数据库更加的方便. 在上篇文章中,我 ...

  8. Navicat使用教程:获取MySQL中的行数(第1部分)

    下载Navicat Premium最新版本 Navicat Premium是一个可连接多种数据库的管理工具,它可以让你以单一程序同时连接到MySQL.Oracle及PostgreSQL数据库,让管理不 ...

  9. Spring Security教程(二):通过数据库获得用户权限信息

    上一篇博客中,Spring Security教程(一):初识Spring Security,我把用户信息和权限信息放到了xml文件中,这是为了演示如何使用最小的配置就可以使用Spring Securi ...

随机推荐

  1. 让 HTML5 来为你定位

    Geolocation HTML5 的 geolocation 是一个令人兴奋的 API,通过这套 API,Javascript 代码就能够访问到用户的当前位置.当然,访问之前必须得到用户的明确认可, ...

  2. HDU5892~HDU5901 2016网络赛沈阳

    A.题意: 有一个n×n的格子, 有50种怪物. 有m个操作, 每次操作会往一个矩形区域放怪物, 每个格子放相同数目的怪物, 或者查询当前50种怪物的奇偶性. 分析:用2^50表示怪物的奇偶,然后就是 ...

  3. [CF#290 Div.1 C]Fox And Dinner(最大流)

    题目:http://codeforces.com/contest/512/problem/C 题目大意:给你若干个数,让你分成k组,每组围成一个圆,使得相邻两个数和均为素数,且每组人数应>=3个 ...

  4. 网络功能虚拟化(NFV)

    你造什么是网络功能虚拟化(NFV)吗? NFV将网络功能整合到行业标准的服务器.交换机和存储硬件上,提供了优化的虚拟化数据平面,NFV通过服务器上运行的软件让管理员取代传统物理网络设备,并降低成本.能 ...

  5. Android开发之SlidingMenu开源项目的使用和问题

    一.关于如何导入lib 第一步:New Module  点击+: 第二步:选择Import Eclipse ADT Project: 第三步:选择你想引入的lib文件,选择完成后,会开始编译你添加的项 ...

  6. 【转】Java 项目UML反向工程转化工具

    原文链接:http://www.cnblogs.com/bakari/p/3561207.html 今天在看一个模拟器的源码,一个包里有多个类,一个类里又有多个属性和方法,如果按顺序看下来,不仅不能对 ...

  7. RabbitMQ 路由选择 (Routing)

    让日志接收者能够订阅部分消息.例如,我们可以仅仅将致命的错误写入日志文件,然而仍然在控制面板上打印出所有的其他类型的日志消息. 1.绑定(Bindings) 在前面中我们已经使用过绑定.类似下面的代码 ...

  8. oracle数据泵实现不同用户之间的导出导入

    来源于:http://www.cnblogs.com/kevinsun/archive/2007/02/03/638803.aspx http://blog.sina.com.cn/s/blog_68 ...

  9. 分布式学习材料Distributed System Prerequisite List

    接下的内容按几个大类来列:1. 文件系统a. GFS – The Google File Systemb. HDFS1) The Hadoop Distributed File System2) Th ...

  10. RAP在centos上的部署

    在centos7上部署RAP(非官方) 作者批注:该部署文档为网友贡献,仅供参考.war请参考主页README.md下载最新版本哟~~~ 感谢热情网友的Wiki整理!万分感谢! 系统: centos7 ...