您的位置:首页 > 其它

根据网卡名获取IP地址,以及掩码地址

2012-07-11 13:45 495 查看
nterface name is something like “eth0″ and the ip address of the interface can be retrieved using the ioctl function.
Here is a simple piece of code that demonstrates how :

Code

1
#include <stdio.h>
2
#include <string.h>
3
#include <sys/types.h>
4
#include <sys/socket.h>
5
#include <sys/ioctl.h>
6
#include <netinet/in.h>
7
#include <net/if.h>
8
#include <unistd.h>
9
#include <arpa/inet.h>
10
11
int
main()
12
{
13
int
fd;
14
struct
ifreq ifr;
15
 
16
char
iface[] =
"eth0"
;
17
 
18
fd = socket(AF_INET, SOCK_DGRAM, 0);
19
20
//Type of address to retrieve - IPv4 IP address
21
ifr.ifr_addr.sa_family = AF_INET;
22
23
//Copy the interface name in the ifreq structure
24
strncpy
(ifr.ifr_name , iface , IFNAMSIZ-1);
25
26
ioctl(fd, SIOCGIFADDR, &ifr);
27
28
close(fd);
29
30
//display result
31
printf
(
"%s - %s\n"
, iface , inet_ntoa(( (
struct
sockaddr_in *)&ifr.ifr_addr )->sin_addr) );
32
33
return
0;
34
}

Output

1
$ gcc ioctl.c && ./a.out
2
eth0 - 192.168.0.6
The socket used can be a TCP socket (SOCK_STREAM) as well.

If you also need the netmask then use the SIOCGIFNETMASK value in ioctl like this :

1
#include <stdio.h>
2
#include <string.h>
3
#include <sys/socket.h>
4
#include <sys/ioctl.h>
5
#include <net/if.h>
6
#include <unistd.h>
7
#include <arpa/inet.h>
8
9
int
main()
10
{
11
int
fd;
12
struct
ifreq ifr;
13
 
14
char
iface[] =
"eth0"
;
15
 
16
fd = socket(AF_INET, SOCK_DGRAM, 0);
17
18
//Type of address to retrieve - IPv4 IP address
19
ifr.ifr_addr.sa_family = AF_INET;
20
21
//Copy the interface name in the ifreq structure
22
strncpy
(ifr.ifr_name , iface , IFNAMSIZ-1);
23
 
24
//get the ip address
25
ioctl(fd, SIOCGIFADDR, &ifr);
26
 
27
//display ip
28
printf
(
"IP address of %s - %s\n"
, iface , inet_ntoa(( (
struct
sockaddr_in *)&ifr.ifr_addr )->sin_addr) );
29
 
30
//get the netmask ip
31
ioctl(fd, SIOCGIFNETMASK, &ifr);
32
 
33
//display netmask
34
printf
(
"Netmask of %s - %s\n"
, iface , inet_ntoa(( (
struct
sockaddr_in *)&ifr.ifr_addr )->sin_addr) );
35
 
36
close(fd);
37
 
38
return
0;
39
}
Output :

view source

print?

1
$ gcc ioctl.c && ./a.out
2
IP address of eth0 - 192.168.0.6
3
Netmask of eth0 - 255.255.255.0
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: