织梦CMS - 轻松建站从此开始!

罗索

获取IP地址函数(本地、域名转换)

罗索客 发布于 2007-02-05 16:23 点击:次 
前些天由于项目需要,自己整了一个比较全面的获取IP地址的函数:可以获取本地的IP地址,也可以根据域名获取IP地址,感觉比较有用特此奉献上,呵呵。
TAG:

前些天由于项目需要,自己整了一个比较全面的获取IP地址的函数:可以获取本地的IP地址,也可以根据域名获取IP地址,感觉比较有用特此奉献上,呵呵。

  下面是源代码

/* GetIp.c -- Get Local or remote Ip address by domain name
* Designed by falcon, 2006-9-16, Email: zhangjinw[at]gmail.com
* */

#include <sys/socket.h>
#include <sys/ioctl.h>
#include <net/if.h>
#include <netdb.h>
#include <string.h>
#include <errno.h>
#define h_addr h_addr_list[0]

char *
GetIp(char *dn_or_ip)
{
struct sockaddr_in addr;
struct hostent *host;
struct ifreq req;
int sock;

if (dn_or_ip == NULL) return NULL;

if (strcmp(dn_or_ip, "localhost") == 0) {
sock = socket(AF_INET, SOCK_DGRAM, 0);
strncpy(req.ifr_name, "eth0", IFNAMSIZ);

if ( ioctl(sock, SIOCGIFADDR, &req) < 0 ) {
printf("ioctl error: %s\\n", strerror (errno));
return NULL;
}

dn_or_ip = (char *)inet_ntoa(*(struct in_addr *) &((struct sockaddr_in *) &req.ifr_addr)->sin_addr);
shutdown(sock, 2);
close(sock);
} else {
host = gethostbyname(dn_or_ip);
if (host == NULL) return NULL;
dn_or_ip = (char *)inet_ntoa(*(struct in_addr *)(host->h_addr));
}
return dn_or_ip;
}

  下面是一个测试的代码
test_GetIp.c

/*test_GetIp.c*/
#include <stdio.h>
#include "GetIp.c"

int
main(int argc, char *argv[])
{
if (argc < 2) {
fprintf(stderr, "Usage: %s domain_name or ip_address\\n", argv[0]);
return -1;
}

char *current_ip_address;
current_ip_address = NULL;
if ((current_ip_address = GetIp( argv[1])) == NULL) {
printf ("Ip address convert error!\\n");
return -1;
} else {
printf("domain name or ip address : %s\\n", argv[1]);
printf("current ip address: %s\\n", current_ip_address);
}

return 0;
}

  具体使用演示


$./test_GetIp xxxy.lzu.edu.cn --这里是根据域名转换为IP地址
domain name or ip address : xxxy.lzu.edu.cn
current ip address: 202.201.0.237

$ ./test_GetIp 219.246.79.7 --输入地址返回地址
domain name or ip address : 219.246.79.7
current ip address: 219.246.79.7

$ ./test_GetIp localhost  --获取本地IP地址
domain name or ip address : localhost
current ip address: 219.246.79.4

(iwgh)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/200702/6568.html]
本文出处:网络博客 作者:iwgh
顶一下
(5)
100%
踩一下
(0)
0%
------分隔线----------------------------
相关文章
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容