查看局域网内所有IP的mac地址

简介: 查看局域网内所有IP的mac地址

使用原套接字,在创建接收和发送线程,获取当前网段内所有IP的mac地址


#include <stdio.h>
#include <sys/socket.h>//socket
#include<arpa/inet.h>//htons
#include<netinet/ether.h>//ETH_P_ALL
#include <unistd.h>//close
#include <sys/ioctl.h>
#include <string.h>
#include <netpacket/packet.h>//sockaddr_ll
#include <net/if.h>
#include <pthread.h>
void *recvfroms(void *arg);
void *sendtos(void *arg);
int main(int argc, char const *argv[])
{    //创建一个原始套接字   
 int fd = socket(PF_PACKET,SOCK_RAW,htons(ETH_P_ALL));
    //创建一个发送线程和接收线程 
       pthread_t tid,tid1;   
        pthread_create(&tid,NULL,recvfroms,(void *)fd);//接收线程  
          pthread_create(&tid1,NULL,sendtos,(void *)fd);//发送线程  
            //线程分离 
               pthread_detach(tid);  
              pthread_detach(tid1);  
                while (1)  
                {
        } 
         close(fd); 
            return 0;
            }
            void *recvfroms(void *arg)
            {   
             int fd = (int)arg;  
               //组包  
                 int i = 0;  
                   for ( i = 0; i < 255; i++) 
                      {         
                         unsigned char msg[1500] = {0xff,0xff,0xff,0xff,0xff,0xff,                                    0x00,0x0c,0x29,0xca,0xc4,0xf5,                               0x08,0x06,                               0x00,0x01,                               0x08,0x00,                               6,                               4,                               0x00,0x01,                               0x00,0x0c,0x29,0xca,0xc4,0xf5,                               10,0,121,87,                               0x00,0x00,0x00,0x00,0x00,0x00,                                 10,0,121,i                           }; 
                            int len = 42; 
                               //从原始套接字发送数据   
                                //获取网络接口类型  
                                  struct ifreq ethreq;
                                      strncpy(ethreq.ifr_name,"eth0",IFNAMSIZ);  
                                        ioctl(fd,SIOCGIFINDEX,&ethreq);  
                                          //指明出去的网络接口   
                                           struct sockaddr_ll sll;  
                                             bzero(&sll,sizeof(sll)); 
                                                sll.sll_ifindex = ethreq.ifr_ifindex;  
                                                  sendto(fd,msg,len,0,(struct sockaddr *)&sll,sizeof(sll));  
                                                    }  
}
void *sendtos(void *arg)
{    
int fd = (int)arg; 
   //接收对方的应答  
     while (1)    {     
        unsigned char recv_buf[1500] = "";  
              recvfrom(fd,recv_buf,sizeof(recv_buf),0,NULL,NULL);   
                   if(ntohs(*(unsigned short *)(recv_buf+12)) == 0x0806)//判断是否为ARP报文
                           {         
                              if(ntohs(*(unsigned short *)(recv_buf+14+6))==2)     
                                     {       
                                              char mac[18] = "";          
                                                    sprintf(mac,"%02x:%02x:%02x:%02x:%02x:%02x:",\                recv_buf[6],recv_buf[7],recv_buf[8],recv_buf[9],recv_buf[10],recv_buf[11]);
                                                                    char ip[16] = "";                sprintf(ip,"%d.%d.%d.%d",recv_buf[28],recv_buf[29],recv_buf[30],recv_buf[31]);     
                                                                               printf("%s----->%s\n",ip,mac);            }        }    }}
相关文章
|
6月前
Mac下查看公网以及内网IP地址
Mac下查看公网以及内网IP地址
279 0
|
15天前
|
缓存 网络协议 网络架构
【计算机网络】第三章 数据链路层(MAC地址 IP地址 ARP协议)
【计算机网络】第三章 数据链路层(MAC地址 IP地址 ARP协议)
20 1
|
7月前
|
缓存 网络协议 网络架构
【计算机网络】第三章 数据链路层(MAC地址 IP地址 ARP协议)
【计算机网络】第三章 数据链路层(MAC地址 IP地址 ARP协议)
|
19小时前
|
网络协议 Linux Android开发
计算机网络:MAC地址 & IP地址 & ARP协议
计算机网络:MAC地址 & IP地址 & ARP协议
24 7
|
7月前
|
存储 网络协议 安全
IP地址、MAC地址、互联网、WLAN、运营商、子网掩码、网络地址、网段、网关、集线器、光纤、基站
IP地址、MAC地址、互联网、WLAN、运营商、子网掩码、网络地址、网段、网关、集线器、光纤、基站
81 0
|
4月前
|
Python
pytho3 urllib urllib3 获取本地ip地址和mac地址发送post到指定http服务器
pytho3 urllib urllib3 获取本地ip地址和mac地址发送post到指定http服务器
32 0
|
4月前
|
Python
pytho2 urllib urllib2 获取本地ip地址和mac地址发送post到指定http服务器
pytho2 urllib urllib2 获取本地ip地址和mac地址发送post到指定http服务器
19 0
|
4月前
|
Linux 开发工具
Linux配置静态ip及克隆出现Mac相同问题
Linux配置静态ip及克隆出现Mac相同问题
35 0
Linux配置静态ip及克隆出现Mac相同问题
|
7月前
Qt-获取计算机信息(MAC、IP、CPU、主机名等等)
Qt-获取计算机信息(MAC、IP、CPU、主机名等等)
244 0
|
9月前
|
网络协议
Qt获取本机IP、MAC、IPV6子网掩码等网络信息
Qt获取本机IP、MAC、IPV6子网掩码等网络信息
135 0