如何写论文?写好论文?免费论文网提供各类免费论文写作素材!
当前位置:免费论文网 > 美文好词 > 优质好文 > linux,查看机器ip

linux,查看机器ip

来源:免费论文网 | 时间:2017-05-20 10:15 | 移动端:linux,查看机器ip

篇一:Linux 获取本机IP地址

IP地址分为IPv4 和IPv6,本文只验证了IPv4的获取,至于IPv6还没有验证。

说明:

family = AT_INET :IPv4

family = AT_INET6:IPv6

address: 提取得到的IP地址所要保存的地址

size =strlen(sampleIP) 192.168.123.128

MAX_IPv4 =15

某些头文件应在其他方面,在本程序中没用得上。不过不影响程序的编译。

program list:

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <sys/socket.h>

#include <netinet/in.h>

#include <arpa/inet.h>

#include <netdb.h>

#include <sys/types.h>

#include <net/if.h>

#include <ifaddrs.h>

#include <unistd.h>

#include <sys/stat.h>

#include <fcntl.h>

#include <termios.h>

#include <errno.h>

int GetIP_v4_and_v6_linux(int family, char *address, int size)

{

struct ifaddrs *ifap0, *ifap;

char buf[NI_MAXHOST];

char *interface = "eth0";

struct sockaddr_in *addr4;

struct sockaddr_in6 *addr6;

int ret;

if( NULL == address )

{

return -1;

}

if(getifaddrs(&ifap0))

{

return -1;

}

for( ifap = ifap0; ifap != NULL; ifap=ifap->ifa_next)

{

if(strcmp(interface, ifap->ifa_name) != 0) continue;

if(ifap->ifa_addr==NULL) continue;

if ((ifap->ifa_flags & IFF_UP) == 0) continue;

if(family != ifap->ifa_addr->sa_family) continue;

if(AF_INET == ifap->ifa_addr->sa_family)

{

addr4 = (struct sockaddr_in *)ifap->ifa_addr;

if ( NULL != inet_ntop(ifap->ifa_addr->sa_family,

(void *)&(addr4->sin_addr), buf, NI_MAXHOST) )

{

if(size < strlen(buf) ) break;

strcpy(address, buf);

printf("IPv4=%s\n",address);//testing

freeifaddrs(ifap0);

return 0;

}

else break;

}

else if(AF_INET6 == ifap->ifa_addr->sa_family)

{

addr6 = (struct sockaddr_in6 *)ifap->ifa_addr;

if(IN6_IS_ADDR_MULTICAST(&addr6->sin6_addr))

{ continue;

}

if(IN6_IS_ADDR_LINKLOCAL(&addr6->sin6_addr))

{continue;

}

if(IN6_IS_ADDR_LOOPBACK(&addr6->sin6_addr))

{ continue;

}

if(IN6_IS_ADDR_UNSPECIFIED(&addr6->sin6_addr))

{ continue;

}

if(IN6_IS_ADDR_SITELOCAL(&addr6->sin6_addr))

{continue;

}

if ( NULL != inet_ntop(ifap->ifa_addr->sa_family,

(void *)&(addr6->sin6_addr), buf, NI_MAXHOST) )

{ if(size < strlen(buf) ) break;

strcpy(address, buf);

printf("IPv6=%s\n",address);//testing

freeifaddrs(ifap0);

return 0;

}

else break;

}

}

}

void * getIPv4()

{

static int SIZE ;

static char IP[64];

char *sampleIPv4="192.168.123.128";

SIZE = strlen(sampleIPv4);

GetIP_v4_and_v6_linux(AF_INET ,IP ,SIZE);

printf("IP=%s\n",IP);

return IP;

}

本程序非原创,也不清楚原创作者是何人。本人只是拿来修改,并应用在实际的工程项目中去。感谢原创作者和网络上的无私奉献的 Linux工作者!让我们共同发扬Linux的精神!

Enjoy it!

篇二:获取linux设备的ip地址(shell实现)

Shell中获取当前IP地址

ifconfig返回的信息中包括IP地址,但要在Shell中获取当前IP地址,则要麻烦一些 获取方法,由于不同系统中ifconfig返回信息的格式有一定差别,故分开讨论:

[1]Linux:

LC_ALL=C ifconfig |grep 'inetaddr:'| grep -v '127.0.0.1' |cut -d: -f2 | awk'{ print $1}'

LC_ALL=C 英文输出

ifconfig输出ip相关信息

# LC_ALL=C ifconfig

eth0Link encap:EthernetHWaddr C2:AC:C3:E7:4A:33

inet addr:192.168.1.247 Bcast:0.0.0.0 Mask:255.255.255.0

UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

RX packets:84080 errors:0 dropped:80 overruns:0 frame:0

TX packets:3595264 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:1000

RX bytes:14627750 (13.9 MiB) TX bytes:417627051 (398.2 MiB)

Interrupt:27

lo Link encap:Local Loopback

inet addr:127.0.0.1 Mask:255.0.0.0

UP LOOPBACK RUNNING MTU:16436 Metric:1

RX packets:127 errors:0 dropped:0 overruns:0 frame:0

TX packets:127 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:0RX bytes:18079 (17.6 KiB) TX bytes:18079 (17.6 KiB)

grep 'inetaddr:' 截取包含ip的那两行

# LC_ALL=C ifconfig|grep "inetaddr:"

inet addr:192.168.1.247 Bcast:0.0.0.0 Mask:255.255.255.0

inet addr:127.0.0.1 Mask:255.0.0.0

grep -v '127.0.0.1'去掉本地指向的那行

# LC_ALL=C ifconfig|grep "inetaddr:"|grep -v "127.0.0.1"

inet addr:192.168.1.247 Bcast:0.0.0.0 Mask:255.255.255.0

cut -d: -f2 -d: 以:分割字符串 -f2:取第二组数据

# LC_ALL=C ifconfig|grep "inetaddr:"|grep -v "127.0.0.1"|cut -d: -f2

192.168.1.247 Bcast

awk '{ print $1}' $1 表示默认以空格分割的第一组同理 $2表示第二组

# LC_ALL=C ifconfig|grep "inetaddr:"|grep -v "127.0.0.1"|cut -d: -f2|awk '{print $1}' 192.168.1.247

# LC_ALL=C ifconfig|grep "inetaddr:"|grep -v "127.0.0.1"|cut -d: -f2|awk '{print $2}' Bcast

[2]FreeBSD/OpenBSD:

LC_ALL=C ifconfig |grep -E 'inet.[0-9]' | grep -v '127.0.0.1' |awk '{ print $2}'

[3]Solaris:

LC_ALL=C ifconfig -a | grepinet | grep -v '127.0.0.1' |awk '{ print $2}'

三段代码的原理类似,都是先获取含有IP的行,再去掉含有127.0.0.1的行,最后获取IP所在的列。

篇三:试试Linux下的ip命令

试试Linux下的ip命令,ifconfig已经过时了

文档链接:http://os.51cto.com/art/201406/441461.htm

Linux的ip命令和ifconfig类似,但前者功能更强大,并旨在取代后者。使用ip命令,只需一个命令,你就能很轻松地执行一些网络管理任务。ifconfig是net-tools中已被废弃使用的一个命令,许多年前就已经没有维护了。

AD:干货来了,不要等!WOT2015 北京站演讲PPT开放下载!

Linux的ip命令和ifconfig类似,但前者功能更强大,并旨在取代后者。使用ip命令,只需一个命令,你就能很轻松地执行一些网络管理任务。ifconfig是net-tools中已被废弃使用的一个命令,许多年前就已经没有维护了。iproute2套件里提供了许多增强功能的命令,ip命令即是其中之一。

要安装ip,请点击这里下载iproute2套装工具 。不过,大多数Linux发行版已经预装了iproute2工具。

从某种意义上说,iproute工具集几乎可以替代掉net-tools工具集,具体的替代方案是这样的:

你也可以使用git命令来下载最新源代码来编译:

1. $ git clone

https://kernel.googlesource.com/pub/scm/linux/kernel/git/shemminger/iproute2.git

设置和删除Ip地址

要给你的机器设置一个IP地址,可以使用下列ip命令:

1. $ sudo ip addr add 192.168.0.193/24 dev wlan0

请注意IP地址要有一个后缀,比如/24。这种用法用于在无类域内路由选择(CIDR)中来显示所用的子网掩码。在这个例子中,子网掩码是255.255.255.0。

在你按照上述方式设置好IP地址后,需要查看是否已经生效。

1. $ ip addr show wlan0

你也可以使用相同的方式来删除IP地址,只需用del代替add。

1. $ sudo ip addr del 192.168.0.193/24 dev wlan0

列出路由表条目

ip命令的路由对象的参数还可以帮助你查看网络中的路由数据,并设置你的路由表。第一个条目是默认的路由条目,你可以随意改动它。

在这个例子中,有几个路由条目。这个结果显示有几个设备通过不同的网络接口连接起来。它们包括WIFI、以太网和一个点对点连接。

1. $ ip route show

假设现在你有一个IP地址,你需要知道路由包从哪里来。可以使用下面的路由选项(译注:列出了路由所使用的接口等):

1. $ ip route get 10.42.0.47

更改默认路由

要更改默认路由,使用下面ip命令:

1. $ sudo ip route add default via 192.168.0.196

显示网络统计数据

使用ip命令还可以显示不同网络接口的统计数据。

当你需要获取一个特定网络接口的信息时,在网络接口名字后面添加选项ls即可。使用多个选项-s会给你这个特定接口更详细的信息。特别是在排除网络连接故障时,这会非常有用。

1. $ ip -s -s link ls p2p1

ARP条目

地址解析协议(ARP)用于将一个IP地址转换成它对应的物理地址,也就是通常所说的MAC地址。使用ip命令的neigh或者neighbour选项,你可以查看接入你所在的局域网的设备的MAC地址。

1. $ ip neighbour

监控netlink消息

也可以使用ip命令查看netlink消息。monitor选项允许你查看网络设备的状态。比如,所在局域网的一台电脑根据它的状态可以被分类成REACHABLE或者STALE。使用下面的命令:

1. $ ip monitor all

激活和停止网络接口

你可以使用ip命令的up和down选项来激某个特定的接口,就像ifconfig的用法一样。 在这个例子中,当ppp0接口被激活和在它被停止和再次激活之后,你可以看到相应的路由表条目。这个接口可能是wlan0或者eth0。将ppp0更改为你可用的任意接口即可。

1. $ sudo ip link set ppp0 down 2.

3. $ sudo ip link set ppp0 up

获取帮助


linux,查看机器ip》由:免费论文网互联网用户整理提供;
链接地址:http://www.csmayi.cn/meiwen/41247.html
转载请保留,谢谢!
相关文章