- 论坛徽章:
- 0
|
通过ioctl系统调用来实现本机指定网卡的IP地址。
#include stdio.h>
#include stdlib.h>
#include string.h>
#include assert.h>
#include net/if.h>
#include netinet/in.h>
#include sys/socket.h>
#include sys/ioctl.h>
int getHostIP(char *ipaddr, int interface)
{
int sockfd;
struct ifreq req;
if ((sockfd = socket(PF_INET, SOCK_DGRAM, 0)) 0)
{
perror ("socket");
return -1;
}
memset(&req, 0, sizeof(struct ifreq));
sprintf(req.ifr_name, "eth%d", interface);
// get current ip addr
if (ioctl(sockfd, SIOCGIFADDR, (char*)&req))
{
perror(req.ifr_name);
return -1;
}
else
{
struct in_addr ip_addr;
char * tmpstr;
ip_addr.s_addr = *((int*) &req.ifr_addr.sa_data[2]);
tmpstr = inet_ntoa(ip_addr);
strcpy(ipaddr, tmpstr);
}
close(sockfd);
return 0;
}
int main(int argc, char **argv)
{
char tmp_str[32];
int interface = 0;
if (argc > 1)
{
interface = atoi(argv[1]);
}
if (0 == getHostIP(tmp_str, interface))
{
printf("eth%d IP address is %s\n", tmp_str, interface);
}
}
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/73948/showart_1134214.html |
|