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

如何获取网卡的地址?

    来源: 互联网  发布时间:2014-10-24

    本文导语:  环境BLUEPOINT 1.0.THANKS. |Linux下,学内核分析时参考了别人的程序照着编的。 和内核有关的做了一点注释,见笑。 redhat6.0 正宗的源码可以从Linux的netkit源码包(rpm)里找到。 /* arp.c Programed by Terry Reffer...

环境BLUEPOINT 1.0.THANKS.

|
Linux下,学内核分析时参考了别人的程序照着编的。 和内核有关的做了一点注释,见笑。 redhat6.0 正宗的源码可以从Linux的netkit源码包(rpm)里找到。 /* arp.c Programed by Terry Reffered cpu's source code in bbs.gznet.edu.cn socket ban send arp request, get arp reply get the mac address of the hosts in a subnet gcc arp.c -o arp1 interface:default is eth0 Note : run it need root right or root has permitted it. Example: [root@46# work]# ./arp1 202.114.67.254 request mac 00:e0:4c:dd:79:e1, request IP  202.114.67.211 replied mac 00:e0:34:f0:18:08, replied IP  202.114.67.254 ----------------------------------------------------------------------------- Total Time Delay : 2314 us [root@46# work]# ./arp1 202.114.67.254 request mac 00:e0:4c:dd:79:e1, request IP  202.114.67.211 --User Break!-- Total Time Delay : 3294147 us */ #include         #include         #include         #include         #include                  /* struct in_addr : /usr/include/netinet/in.h */ #include         #include                  /* /usr/src/linux/include/linux/socket.h */ #include         #include                      /* use the ifreq  */ #include                  /* use the arphdr */ #include                /* use the ethernethdr */ #include         #include         #include                    /* use the timeval */ #define         DEF_INTERFACE   "eth0" #define         PACKET_SIZE     2048 struct arp_hdr {         /* ehter header from /net/ethernet.h */         u_char  ether_dhost[ETH_ALEN];  /* destination eth addr */         u_char  ether_shost[ETH_ALEN];  /* source ether addr    */         u_short ether_type;             /* packet type ID field */         /* arp or rarp header from /net/if_arp.h */         u_short ar_hrd;                 /* Format of hardware address.  */         u_short ar_pro;                 /* Format of protocol address.  */         u_char  ar_hln;                 /* Length of hardware address.  */         u_char  ar_pln;                 /* Length of protocol address.  */         u_short ar_op;                  /* ARP opcode (command).  */         u_char  ar_sha[ETH_ALEN];       /* Sender hardware address.  */         u_char  ar_sip[4];              /* Sender IP address.  */         u_char  ar_tha[ETH_ALEN];       /* Target hardware address.  */         u_char  ar_tip[4];              /* Target IP address.  */         u_char  padding[18];            /* padding */ }; struct  in_addr myself, dstaddr;        /* defined in /usr/include/netinet/in.h */                                         /* uint32_t s_addr;Internet address     */ int     fd_arp;                 /* socket fd for receiving packets */ struct  ifreq   ifr;            /* ifreq structure :                */                                 /* defined in /usr/include/net/if.h */ long    send_time,recv_time;    /* time that send & receive arp packet */ long time_now()                         /* return time passed by */                                         /* since 1970.1.1 00:00:00, */                                         /* in 1/1000000 second  */ {         struct timeval now;         long    lPassed;         gettimeofday(&now, 0);         lPassed = now.tv_sec * 1000000 + now.tv_usec; /* now.tv_sec in second */                                                       /* now.tv_usec in 1/1000000 second */         return lPassed; } void stat()                             /* signal process : quit */ {         printf( "n--User Break!--nTotal Time Delay : %ld usn",time_now()-send_time);         exit(-1);         } main(int argc, char *argv[]) {         char    device[32];     /* ethernet device name */         struct  sockaddr        from, to;         int     fromlen;         struct  sockaddr_in     * sin_ptr;         u_char  * ptr;         int     n;         u_char  buf[PACKET_SIZE];               /* buffer for send and recv */         struct  arp_hdr        * arp = (struct arp_hdr *)buf;         if (argc = 3) {                 strncpy(device, argv[2], 32);   /* interface name */                 device[31] = '';              /* make device a string */         } else                 strcpy(device, DEF_INTERFACE);         dstaddr.s_addr = inet_addr(argv[1]);    /* convert IP xx.xx.. to binary */         if ((fd_arp = socket(AF_INET, SOCK_PACKET, htons(0x0806))) ether_shost, 4);         arp->ether_type = htons(ETHERTYPE_ARP);         /* arp header */         arp->ar_hrd = htons(ARPHRD_ETHER);         arp->ar_pro = htons(ETHERTYPE_IP);         arp->ar_hln = 6;         arp->ar_pln = 4;         arp->ar_op = htons(1);         bcopy(ptr,arp->ar_sha, 6);         bcopy(&myself, arp->ar_sip, 4);         bzero(arp->ar_tha, 6);         bcopy(&dstaddr, arp->ar_tip, 4);         bzero(arp->padding, 18);         strcpy(to.sa_data, device);         if ((n = sendto(fd_arp, buf, sizeof(struct arp_hdr), 0,                 &to, sizeof(to))) ar_op == 0x0200 || !memcmp(arp->ar_sip, &dstaddr, 4)) {                         printf( "replied mac %02x:%02x:%02x:%02x:%02x:%02x, ",                                 arp->ar_sha[0], arp->ar_sha[1],                                 arp->ar_sha[2], arp->ar_sha[3],                                 arp->ar_sha[4], arp->ar_sha[5] );                         printf( "replied IP  %sn", inet_ntoa(dstaddr));                         printf( "-----------------------------------------------------------------------------n");                         printf( "Total Time Delay : %ld usn",recv_time-send_time);                         return;                 } else                         sigset(SIGINT, stat);   /* when press del or ctrl+c, call stat */                                                 /* to statistic the result , and then exit */                         goto Loop;         } }

    
 
 

您可能感兴趣的文章:

  • 获取网卡信息的方法
  • 急急急,求准确获取千兆网卡速率的方法!
  • linux下,如何获取未配置的网卡的mac地址。
  • CentOs ifconfig -a命令获取网卡信息 网卡标识出现__tmp146079472
  • 请教:如何将网卡ip地址由DHCP获取该为指定ip
  • 知道IP地址,请问如何获取这个IP地址对应网卡的mac地址?
  • 在Linux下用c编程怎么获取网卡序列号和硬盘序列号?
  • 多网卡环境用C语言怎么获取所有的IP列表
  • 多网卡多IP情况下如何通过脚本获取当前登录终端使用的ip?
  • VMWare的网卡使用桥连,为什么获取不到ip呢?????
  • 请教:如何在程序中获取本地网卡的默认网关?
  • 用C#获取硬盘序列号,CPU序列号,网卡MAC地址的源码
  • C#获取cpu序列号、硬盘ID、网卡MAC地址的实现代码
  • java中通过网卡名称获取IP地址
  • C语言如何获取嵌入式linux网卡上的mac地址
  • php如何获取网卡MAC地址(支持WIN与LINUX系统)
  • php获取网卡的MAC地址支持WIN/LINUX系统
  • Linux下如何获取网卡设备收发数据包相关统计数据?
  • 1.请问如何编程获取网关ip地址 2.如何在一块网卡中绑定多个ip地址?
  • php获取客户端网卡mac物理地址
  • php获取访客ip地址原理及提供七段代码供参考
  • php获取本机ip地址 php获取远程IP地址
  • 怎样获取物理内存在地址总线中的起始地址?
  • PHP获取局域网中计算机名、IP地址与MAC地址
  • 如何在LINUX中获取进程中某个虚拟地址所在物理内存地址
  • linux dhcpv6概率获取不到地址
  • linux下如何用C语言获取不同网段上设备的MAC地址
  • 请问硬件原理图如何分析,获取每个芯片各自的基地址和地址空间。
  • 如何获取数据包?如何读取包内的信息(如:ip 地址)?
  • asp.net获取用户ip地址公共类
  • 我想在web-inf/classes 下存文件, 怎样获取地址。
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Python获取网页编码的方法及示例代码
  • linux不用命令方式读文件获取网络流量,如何使用C函数调用获取网络流量信息?
  • java Servlet获取和设置cookie实例代码
  • 关于获取在jsp上获取客户端时间的问题
  • Python通过正则表达式获取,去除(过滤)或者替换HTML标签的几种方法
  • 关于Ganglia中的gmond组件收集到的资源信息如何获取(如何获取telnet后返回的信息)
  • java获取系统路径字体、得到某个目录下的所有文件名、获取当前路径
  • 利用sender的Parent获取GridView中的当前行(获取gridview的值)
  • linux获取主机名后用gethostbyname() 不能获取主机ip
  • javascript 获取url参数的正则表达式(用来获取某个参数值)
  • 在gtk下,怎样获取系统时间??怎样获取当前的目录路径???
  • C++获取文件哈希值(hash)和获取torrent(bt种子)磁力链接哈希值
  • linux根据pid获取进程名和获取进程pid(c语言获取pid)
  • Shell获取系统时间问题
  • android 如何获取MCC/MNC控制小区广播的开启
  • 新手问题:Linux下如何获取进程占用的系统资源
  • c++如何获取当前进程名
  • 怎么通过snmp获取远程主机指定进程信息?
  • C#获取路径的多种方法
  • 怎样获取终端的所有打印消息
  • linux 内核空间如何获取当前时间(常用格式)


  • 站内导航:


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

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3