QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 4730|回复: 6

不用ifconfig,普通用户如何获得本机内网ip和外网ip

[复制链接]
发表于 2006-2-3 16:35:59 | 显示全部楼层 |阅读模式
如题!
发表于 2006-2-3 17:58:58 | 显示全部楼层
[code:1]/* 分别读出MAC、NETMASK、IP ADDRESS:*/
#include<stdio.h>
#include<string.h>
#include<netdb.h>
#include<arpa/inet.h>
#include<netinet/in.h>
#include<sys/socket.h>
#include<sys/ioctl.h>
#include<net/if.h>
#include<net/if_arp.h>
#include<net/ethernet.h>
#include<signal.h>
#include<netinet/ip.h>

struct in_addr myip,mymask;
int fd_arp; /* socket fd for receive packets */
struct ifreq ifr; /* ifr structure */
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;
strcpy(device,"eth0");
if((fd_arp = socket(AF_INET,SOCK_PACKET,htons(0x0806)))<0)
exit(-1);
}
strcpy(ifr.ifr_name,device);
/* ifr.ifr_addr.sa_family = AF_INET; */
/* get ip address of my interface */
if(ioctl(fd_arp,SIOCGIFADDR,&ifr)<0)
{
perror("ioctr SIOCGIFADDR error");
exit(-1);
}
sin_ptr = (struct sockaddr_in *)&ifr.ifr_addr;
myip = sin_ptr->sin_addr;
/* get network mask of my interface */
if(ioctl(fd_arp,SIOCGIFNETMASK,&ifr)<0)
{
perror("ioctr SIOCGIFNETMASK error");
exit(-1);
}
sin_ptr = (struct sockaddr_in *)&ifr.ifr_addr;
mymask = sin_ptr->sin_addr;
/* get mac address of the interface */
if(ioctl(fd_arp,SIOCGIFHWADDR,&ifr)<0)
{
perror("ioctr SIOCGIFHWADDR error");
exit(-1);
}
ptr = (u_char *)&ifr.ifr_ifru.ifru_hwaddr.sa_data[0];
printf("request mac: %02x:%02x:%02x:%02x:%02x:%02x\n",*ptr,*(ptr+1),*(ptr+2),*(ptr+3),*(ptr+4),
*(ptr+5));
printf("request netmask: %s\n",inet_ntoa(mymask));
printf("request IP: %s\n",inet_ntoa(myip));
}
/* end of main */[/code:1]

外网IP 不知道么意思?  网关?
回复

使用道具 举报

 楼主| 发表于 2006-2-3 22:34:07 | 显示全部楼层
大哥你误会了,小弟只是个使用linux系统的,小弟对编程没有太大的兴趣。小弟的意思是,不用ifconfig这个root才能用的命令,其他还有别的什么命令也可以获得ip地址,比如像windows下的ipconfig命令什么的,内网ip比如说是192.168.0.1这样的局域网ip,外网ip就是拨号后的外网ip如221.xxx.xxx.xxx。还是十分感谢大哥百忙中给小弟回复。
回复

使用道具 举报

发表于 2006-2-3 23:27:01 | 显示全部楼层
这个  还真不知道
hostname -i

要不还有一种方法
chmod +s /sbin/ifconfig
(有点不好)
这样别的用户也可以使用ifconfig了
回复

使用道具 举报

发表于 2006-2-3 23:29:51 | 显示全部楼层
ip addr
试一试
回复

使用道具 举报

 楼主| 发表于 2006-2-4 10:53:22 | 显示全部楼层
我试试,谢谢了。
回复

使用道具 举报

发表于 2006-2-4 22:27:04 | 显示全部楼层
netstat 可以看到
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-16 05:10 , Processed in 0.059384 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表