ip地址比较问题

xotaots 2011-11-15 11:05:02
linux 里面写了一段代码想比较一下本机ip是不是指定的ip,代码如下,编译的时候就是不通过,提示:error: request for member `sin_addr' in something not a structure or union,出错代码是在这一行if(strcmp("192.168.1.1", inet_ntoa(sin.sin_addr)) == 0)。 问题出在哪里啊?请指点一下 啊!!

int sock;
struct sockaddr_in sin;
struct ifreq ifr;
sock = socket(AF_INET, SOCK_DGRAM, 0);
if (sock == -1)
{
perror("socket");
}
strncpy(ifr.ifr_name, ETH_NAME, IFNAMSIZ);
ifr.ifr_name[IFNAMSIZ - 1] = 0;
if (ioctl(sock, SIOCGIFADDR, &ifr) < 0)
{
perror("ioctl");
}
memcpy(&sin, &ifr.ifr_addr, sizeof(sin));
FILE *fp=NULL;
if(strcmp("192.168.1.1", inet_ntoa(sin.sin_addr)) == 0)
{
printf(“成功找到ip 1.1\n”);

}
...全文
72 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
JoeBlackzqq 2011-11-15
  • 打赏
  • 举报
回复

// 利用ioctl获取本机指定设备的MAC地址

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<sys/socket.h>
#include<sys/ioctl.h>
#include<net/if.h>
#include<netinet/ip.h>
#include<sys/sysctl.h>

int main(int argc, char **argv)
{
struct sockaddr_in *addr;
struct ifreq ifr;
char *address;
int sockfd;

sockfd = socket(AF_INET, SOCK_DGRAM, 0);
strncpy(ifr.ifr_name, "eth1", IFNAMSIZ - 1);
if (ioctl(sockfd, SIOCGIFADDR, &ifr) == -1)
{
perror("ioctl");
exit(1);
}
addr = (struct sockaddr_in *)&(ifr.ifr_addr);
address = inet_ntoa(addr->sin_addr);
printf("inet addr: %s\n", address);
if(strcmp("172.25.25.97", address) == 0)
printf("OK\n");
else
printf("NO\n");

return 0;
}



运行结果:
[zcm@t #195]$make
gcc -g -c -o a.o a.c
a.c: 在函数‘main’中:
a.c:27: 警告:赋值时将整数赋给指针,未作类型转换
gcc -g -o a a.o
[zcm@t #196]$./a
inet addr: 172.25.25.97
OK
[zcm@t #197]$
justkk 2011-11-15
  • 打赏
  • 举报
回复
有没有缺少头文件?
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
fengying0529 2011-11-15
  • 打赏
  • 举报
回复
应该是头文件少了的问题吧 先把上面的头文件加了看看
dd_zhouqian 2011-11-15
  • 打赏
  • 举报
回复
引用的头文件可能冲突,不明确,错误描述sin_addr可能是个结构或者一个联合体,楼主检查下包含的头文件

error: request for member ‘sin_addr' in something not a structure or union

23,114

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧