#include <stdio.h> #include <stdlib.h> #include <errno.h> #include <string.h> #include <sys/types.h> #include <netinet/in.h> #include <sys/socket.h> #include <sys/wait.h> #include <sys/ioctl.h> #include <net/if.h> #include <netinet/in.h> #include <net/if_arp.h> #include <unistd.h> #include <arpa/inet.h> #include <pthread.h> int getPeerMacbySocketFd( int sockfd, char *buf, char* localethname ) { int ret =0; struct arpreq arpreq; struct sockaddr_in dstadd_in; socklen_t len = sizeof( struct sockaddr_in ); memset( &arpreq, 0, sizeof( struct arpreq )); memset( &dstadd_in, 0, sizeof( struct sockaddr_in )); if( getpeername( sockfd, (struct sockaddr*)&dstadd_in, &len ) < 0 ) { perror( "get peer name wrong, %s/n", strerror(errno) ); return -1; } else { memcpy( ( struct sockaddr_in * )&arpreq.arp_pa, ( struct sockaddr_in * )&dstadd_in, sizeof( struct sockaddr_in )); strcpy(arpreq.arp_dev, localethname); arpreq.arp_pa.sa_family = AF_INET; arpreq.arp_ha.sa_family = AF_UNSPEC; if( ioctl( sockfd, SIOCGARP, &arpreq ) < 0 ) { perror( "ioctl SIOCGARP wrong, %s/n", strerror(errno) ); return -1; } else { unsigned char* ptr = (unsigned char *)arpreq.arp_ha.sa_data; sprintf(buf, "%02x:%02x:%02x:%02x:%02x:%02x", *ptr, *(ptr+1), *(ptr+2), *(ptr+3), *(ptr+4), *(ptr+5)); } } return ret; } int gahGetPeerMacbyIp(char *ipaddr, char* buf, char* localethname) { int sockfd; unsigned char *ptr; struct arpreq arpreq; struct sockaddr_in *sin; struct sockaddr_storage ss; char addr[INET_ADDRSTRLEN+1]; memset(addr, 0, INET_ADDRSTRLEN+1); memset(&ss, 0, sizeof(ss)); sockfd = socket(AF_INET, SOCK_DGRAM, 0); if (sockfd == -1) { trace(3, "socket error"); return -1; } sin = (struct sockaddr_in *) &ss; sin->sin_family = AF_INET; if (inet_pton(AF_INET, ipaddr, &(sin->sin_addr)) <= 0) { trace(3, "inet_pton error"); return -1; } sin = (struct sockaddr_in *) &arpreq.arp_pa; memcpy(sin, &ss, sizeof(struct sockaddr_in)); strcpy(arpreq.arp_dev, localethname); arpreq.arp_ha.sa_family = AF_UNSPEC; if (ioctl(sockfd, SIOCGARP, &arpreq) < 0) { trace(3, "ioctl SIOCGARP: "); return -1; } ptr = (unsigned char *)arpreq.arp_ha.sa_data; sprintf(buf,"%02x:%02x:%02x:%02x:%02x:%02x", *ptr, *(ptr+1), *(ptr+2), *(ptr+3), *(ptr+4), *(ptr+5)); return 0; } |
相关推荐
用socket写的获取本地mac地址的编程文件,里面已经有生成器
用socket写的获取本地IP地址,里面已经具有生成器
本文实例讲述了Python3获取电脑IP、主机名、Mac地址的方法。分享给大家供大家参考,具体如下: # -*- coding:utf-8 -*- #! python3 ''' Created on 2019年4月11日 @author: Administrator ''' import socket import...
node.js实现使用socket.io实现通信,后台连接socket获取数据
简单的Android Socket ...客户端通过UDP广播获取到服务器端的IP地址,通过TCP/IP协议与服务器建立连接。代码实现心跳检测,当服务器断网或是结束进程,客户端可重新连接(重连部分自己实现);代码有点凌乱,仅供参考!
获取本地的“物理”网卡的IP地址和MAC地址,并区分是有线设备,还是无线设备!函数已经封装好,直接可以调用。发现BUG请反馈,多谢!
利用socket向ip.taobao.com发送GET请求,获得返回的Json格式的数据,利用jsoncpp对其解析以获取IP地址信息。 淘宝IP数据库接口见ip.taobao.com。
该socket程序可以实现对下层数据包的分析,从而获得数据包的很多参数,例如目的ip地址,源ip地址,目的MAC地址,源MAC地址等等
Socket获取远程连接者的IP ! 呵呵 有的朋友被这个问题难住了! 我来发布出来代码,解决问题
在jni中获取android 设备的mac地址
java socket nginx tcp转发 用户真实IP测试,文章请看我的博客
设置本机IP配置为自动获取或者手动设置 测试端口是否可访问 Ping IP 功能实现通过用Socket类、Process类、来调用命令行程序测试和Socket访问端口。 温习知识写的小工具,如果有bug,那么理解万岁
通过原始套接字使用arp协议通过对方ip地址获取mac地址
socket调试工具for mac tcp udp,mac 安装包,无需配置,自动获取本地ip,可配置ip, 客户端 服务端都支持
在VS2008上用C#编写的socket 通讯的发送端和接收端程序,其IP地址应该是网络的实际地址。实验成功。通讯很好。
Java实现Socket长连接和短连接,实现原理可参见个人博客
对于一个网段扫描MAC,可以建立一个socket,连续向多个不同IP发送NBNS包,然后等待接受,根据返回包就可以扫描一个网段多个IP的MAC啦。 而windows下可以运行命令:nbtstat -A ip-address来查看 windows c 要改改...
手机开通GPRS以后,我们的socket 程序还不能直接建立网络连接,需要用连接管理器来获取当前可用连接,并自动选择一个最佳的连接途径,然后启用这个连接,在连接启动成功以后再用socket 进行网络连接方可正常进行。...
C# Socket编程完成控制台服务器端和web客户端(调试通过)
罗克韦尔的AB PLC的EtherNet/IP Socket,通过该技术可以实现AB的Socket