当前位置: 技术问答>linux和unix
shell编程如何取得本机IP地址并存入一个变量中
来源: 互联网 发布时间:2015-01-11
本文导语: 请各位大拿多多赐教。如果本机有多个IP地址,如何取得当前正在使用的IP地址(即正在当前局域网内使用的网段的IP地址) | #include #include #include #include #include #include #include #include ...
请各位大拿多多赐教。如果本机有多个IP地址,如何取得当前正在使用的IP地址(即正在当前局域网内使用的网段的IP地址)
|
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define DEBUG 1
struct tm tmn;
time_t now;
int main(int argc,char *argv[])
{
int sockfd;
char SOCKIP[15];
char SOCKPORT[6];
char MyName[20];
char MSG[MAXMSG];
char *IP, *hostname, *ptr;
struct hostent *HostIP;
struct sockaddr_in dest;
struct in_addr inip;
/* 得到该运行程序所在主机的主机名称 */
if( gethostname(MyName,sizeof(MyName))h_name;
inip.s_addr=*((unsigned long *)HostIP->h_addr_list[0]);
if(!(ptr=(char *)inet_ntoa(inip)))
memcpy(&inip,HostIP->h_addr,HostIP->h_length);
#if DEBUG
printf("My IP is %sn",ptr);
#endif
return 0;
}
#include
#include
#include
#include
#include
#include
#include
#include
#define DEBUG 1
struct tm tmn;
time_t now;
int main(int argc,char *argv[])
{
int sockfd;
char SOCKIP[15];
char SOCKPORT[6];
char MyName[20];
char MSG[MAXMSG];
char *IP, *hostname, *ptr;
struct hostent *HostIP;
struct sockaddr_in dest;
struct in_addr inip;
/* 得到该运行程序所在主机的主机名称 */
if( gethostname(MyName,sizeof(MyName))h_name;
inip.s_addr=*((unsigned long *)HostIP->h_addr_list[0]);
if(!(ptr=(char *)inet_ntoa(inip)))
memcpy(&inip,HostIP->h_addr,HostIP->h_length);
#if DEBUG
printf("My IP is %sn",ptr);
#endif
return 0;
}
|
这里假设
'当前正在使用的IP地址' 是 指与 缺省路由地址 同网段的地址
(vv 变量中是缺省路由地址前3位,ipaddress 是结果)
你看看对不对,我在一台sco unix 5双网卡机器上试了可以。
vv=`netstat -rn|grep default |awk '{ print $2}'|awk -F'.' '{printf("%d.%d.%d",$1,$2,$3);}'`
ipaddress=`netstat -rn|grep "UC " |awk -v aa=$vv 'match($2,aa){ print($2)}'`
echo $ipaddress
'当前正在使用的IP地址' 是 指与 缺省路由地址 同网段的地址
(vv 变量中是缺省路由地址前3位,ipaddress 是结果)
你看看对不对,我在一台sco unix 5双网卡机器上试了可以。
vv=`netstat -rn|grep default |awk '{ print $2}'|awk -F'.' '{printf("%d.%d.%d",$1,$2,$3);}'`
ipaddress=`netstat -rn|grep "UC " |awk -v aa=$vv 'match($2,aa){ print($2)}'`
echo $ipaddress
|
一般主机HOST表里面都有一个IP地址和主机名称的对应关系的,如:
10.110.10.110 myhost
这样可不可以呢:
grep `hostname` /etc/hosts |awk '{print $1}'
可能是问题是:
如果主机名称对应的域有多个和`hostname`相匹配的话,得到的IP地址就是多个了。
不能够用C吗!?
10.110.10.110 myhost
这样可不可以呢:
grep `hostname` /etc/hosts |awk '{print $1}'
可能是问题是:
如果主机名称对应的域有多个和`hostname`相匹配的话,得到的IP地址就是多个了。
不能够用C吗!?
|
继续取第二个地址HostIP->h_addr_list[0]);直到返回为空为止。