免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1843 | 回复: 4
打印 上一主题 下一主题

[SCO UNIX] 紧急求助!!!!为什么取客户主机MAC地址失败? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-04-16 17:34 |只看该作者 |倒序浏览
程序如下:

#include <stdio.h>;
#include <errno.h>;
#include <sys/param.h>;
#include <sys/socket.h>;
#include <sys/types.h>;
#include <sys/sio.h>;
#include <sys/ioctl.h>;
#include <netinet/in.h>;
#include <netinet/tcp.h>;
#include <net/if.h>;
#include <net/if_arp.h>;
#include <netdb.h>;
#include <unistd.h>;
#include <stropts.h>;
#include <arpa/inet.h>;
#include <paths.h>;

#include "all.h"


int GetMac(struct in_addr *addrptr )
{
char *ptr;
struct arpreq arp;

struct sockaddr_in *arptr;

int sockfd;

int iRet;

char str[5];



        sockfd = socket(AF_INET, SOCK_DGRAM, 0);

        if( sockfd < 0 ) {

                errcall(ERROR,"socket fail[%d] error[%d][%s]",

                        sockfd,strerror(errno));

                return -1;

        }



        arptr = (struct sockaddr_in *)&arp.arp_pa;

        bzero(arptr, sizeof(struct sockaddr_in));

        arptr->;sin_family = AF_INET;

        memcpy(&arptr->;sin_addr,addrptr,sizeof(struct in_addr));



        iRet = ioctl(sockfd, SIOCGARP, &arp);

        if( iRet ) {

                errcall(ERROR,"ioctl error[%d][%s]", iRet,strerror(errno));

                LogHex("arp_pa",arp.arp_pa.sa_data,14);

                memcpy(str,arp.arp_pa.sa_data+2,4);

                str[4] = 0;

                errcall(ERROR,"addr=[%s]",inet_ntoa(arptr->;sin_addr));

                return -1;

        }



        errcall(ERROR,"addr=%s,macstr[%s]mac=%ux %ux %ux %ux %ux %ux %ux %ux",

                inet_ntoa(arptr->;sin_addr), arp.arp_ha.sa_data,

                arp.arp_ha.sa_data[0], arp.arp_ha.sa_data[1],

               errcall(ERROR,"ioctl error[%d][%s]", iRet,strerror(errno));
               LogHex("arp_pa",arp.arp_pa.sa_data,14);
               memcpy(str,arp.arp_pa.sa_data+2,4);
               str[4] = 0;
               errcall(ERROR,"addr=[%s]",inet_ntoa(arptr->;sin_addr));
               return -1;
       }

       errcall(ERROR,"addr=%s,macstr[%s]mac=%ux %ux %ux %ux %ux %ux %ux %ux",
               inet_ntoa(arptr->;sin_addr), arp.arp_ha.sa_data,
               arp.arp_ha.sa_data[0], arp.arp_ha.sa_data[1],
               arp.arp_ha.sa_data[2], arp.arp_ha.sa_data[3],
               arp.arp_ha.sa_data[4], arp.arp_ha.sa_data[5],
               arp.arp_ha.sa_data[6], arp.arp_ha.sa_data[7] );

       ptr = arp.arp_ha.sa_data;
       errcall(ERROR,"mac = %x:%x:%x:%x:%x:%x",
               *(ptr)&0xff, *(ptr+1)&0xff, *(ptr+2)&0xff,
               *(ptr+3)&0xff, *(ptr+4)&0xff, *(ptr+5)&0xff);

       return 0;
}

运行环境:SCO openserver 5.0.5

运行后报错:
2000-04-16 17:16:41:220 getmac.c(43) : ioctl error[-1][No such device or address
]

论坛徽章:
1
15-16赛季CBA联赛之北控
日期:2022-03-04 22:35:50
2 [报告]
发表于 2004-04-16 21:30 |只看该作者

紧急求助!!!!为什么取客户主机MAC地址失败?

http://unix-cd.com/article/ShowArticle.asp?ArticleID=682

论坛徽章:
0
3 [报告]
发表于 2004-04-19 13:30 |只看该作者

紧急求助!!!!为什么取客户主机MAC地址失败?

[quote]原帖由 "sdccf"]http://unix-cd.com/article/ShowArticle.asp?ArticleID=682[/quote 发表:


我要取的是客户端的MAC地址,不是本机网卡的MAC地址。

谁能告诉我以上程序出错的原因?谢谢

论坛徽章:
0
4 [报告]
发表于 2004-04-19 18:08 |只看该作者

紧急求助!!!!为什么取客户主机MAC地址失败?

请参看有关TCP/IP的书.
IP报文在网络中递送时,封装成链路层数据帧首的MAC地址在每一个网段都发生变化。但从网络系统数据中是取不到的。你需要把客户端MAC数据放到你的交易报文中就可以得到。

论坛徽章:
0
5 [报告]
发表于 2004-04-26 15:14 |只看该作者

紧急求助!!!!为什么取客户主机MAC地址失败?

原帖由 "zhuxguang" 发表:
请参看有关TCP/IP的书.
IP报文在网络中递送时,封装成链路层数据帧首的MAC地址在每一个网段都发生变化。但从网络系统数据中是取不到的。你需要把客户端MAC数据放到你的交易报文中就可以得到。



我只需要在局域网中实现,以上代码就是书上的例子,但为什么出错, 我需要答案。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP