centos7 如何shell 提取出所有网卡的名字

centos7 如何shell 提取出所有网卡的名字,第1张

第二个ip adds | sed -r -n ’s/^[0-9]+: ():/\1/p’

正确的是ip addr | sed -r -n ' s/^[0-9]+: ():/\1/p'

一个是 ip addr 的拼写 还有一个是 ' 是英文的

不过谢谢了

一、查看命令1启动 linux *** 作系统,进入到桌面。

2启动终端。

3在终端键入命令 ifconfig eth0,回车。如下图所示:

二、信息解读

第一行说明了网卡类型和MAC地址

第二行说明了IPV4地址,广播地址和子网掩码。

第三行说明了IPV6地址。

第五行说明了接收的数据包总数,以及错误的包数、丢失的数据包数。

第六行与第五行相对应,分别是发送的数据包总数,以及错误的包数、丢失的数据包数。

第八行则分别是接收和发送的字节数。

有时候,写程序的时候需要获取计算机的网络信息,比如IP地址、电脑名称、DNS等信息。IP地址和电脑名称是比较容易获取到的,而要想获取地址掩码、DNS、网关等信息就有些麻烦了。在Windows下我们一般都是通过从注册表读取这些信息。在Linux怎么做呢?其实,Linux下更加容易一些。因为我们可以拿现成的程序看它的源代码。通过阅读其源代码找到解决该问题的方法。那么,看哪个程序的源代码呢?如果你使用过Linux,并且比较熟悉的话就肯定知道一个命令ifconfig。这个命令和Windows下的ipconfig差不多,都可以输出网卡的信息,其中就包含DNS、掩码等信息。所以,我们可以通过看它的源代码来找到解决该问题的方法。获取系统中的网卡数量 并没有那个系统调用提供网卡数量的获取。但是,我们可以通过强大的proc文件系统获取网卡数量的信息。实际上,ifconfig也是这样做的,请看示例代码如下:0001 #include <stdioh>0002 #include <stringh>0003 #include <errnoh>0004 0005 int GetNetCardCount()0006 {0007 int nCount = 0;0008 FILE f = fopen("/proc/net/dev", "r");0009 if (!f)0010 {0011 fprintf(stderr, "Open /proc/net/dev failed!errno:%d\n", errno);0012 return nCount;0013 }0014 0015 char szLine[512];0016 0017 fgets(szLine, sizeof(szLine), f); 0018 fgets(szLine, sizeof(szLine), f);0019 0020 while(fgets(szLine, sizeof(szLine), f))0021 {0022 char szName[128]= {0};0023 sscanf(szLine, "%s", szName);0024 int nLen = strlen(szName);0025 if (nLen <= 0)continue;0026 if (szName[nLen - 1] == ':') szName[nLen - 1]= 0;0027 if (strcmp(szName, "lo") == 0)continue;0028 nCount++;0029 }0030 0031 fclose(f);0032 f= NULL;0033 return nCount;0034 }0035 0036 int main(int argc, char argv[])0037 {0038 printf("NetCardCount: %d\n", GetNetCardCount());0039 return 0;0040 }获取IP、掩码、MAC及网关获取IP、掩码、MAC和广播地址是比较容易的,只需要调用对应的IOCTL即可。只是大家对Linux下的IOCTL可能不太熟悉。却看示例代码: 0001 void DispNetInfo(constchar szDevName)0002 {0003 int s = socket(AF_INET, SOCK_DGRAM, 0);0004 if (s < 0)0005 {0006 fprintf(stderr, "Create socket failed!errno=%d", errno);0007 return;0008 }0009 0010 struct ifreq ifr;0011 unsignedchar mac[6];0012 unsignedlong nIP, nNetmask, nBroadIP;0013 0014 printf("%s:\n", szDevName);0015 0016 strcpy(ifrifr_name, szDevName);0017 if (ioctl(s, SIOCGIFHWADDR, &ifr) < 0)0018 {0019 return;0020 }0021 memcpy(mac, ifrifr_hwaddrsa_data, sizeof(mac));0022 printf("\tMAC: x-x-x-x-x-x\n",0023 mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);0024 0025 strcpy(ifrifr_name, szDevName);0026 if (ioctl(s, SIOCGIFADDR, &ifr) < 0)0027 {0028 nIP = 0;0029 }0030 else0031 {0032 nIP =(unsignedlong)&ifrifr_broadaddrsa_data[2];0033 }0034 printf("\tIP: %s\n", inet_ntoa((in_addr)&nIP));0035 0036 strcpy(ifrifr_name, szDevName);0037 if (ioctl(s, SIOCGIFBRDADDR, &ifr) < 0)0038 {0039 nBroadIP = 0;0040 }0041 else0042 {0043 nBroadIP =(unsignedlong)&ifrifr_broadaddrsa_data[2];0044 }0045 printf("\tBroadIP: %s\n", inet_ntoa((in_addr)&nBroadIP));0046 0047 strcpy(ifrifr_name, szDevName);0048 if (ioctl(s, SIOCGIFNETMASK, &ifr) < 0)0049 {0050 nNetmask = 0;0051 }0052 else0053 {0054 nNetmask =(unsignedlong)&ifrifr_netmasksa_data[2];0055 }0056 printf("\tNetmask: %s\n", inet_ntoa((in_addr)&nNetmask));0057 close(s);0058 } 那么如何获取网关地址呢?更加容易,但是,好像很少有人知道。反正我在网上没有找到有人知道。最后看了nslookup的源代码以后才知道正确的做法。代码如下: res_init(); for (int i = 0; i < _resnscount; i++) { struct sockaddr server = (struct sockaddr)&_resnsaddr_list[i]; printf("Server: %s\n", inet_ntoa((in_addr)&(server->sa_data[2]))); }代码很简单,就不做解释了。 怎么获取网关呢?这个稍微有点麻烦一些,不过和获取网卡数量相似,都是通过proc文件系统。这次分析的/proc/net/route文件。我就不再贴出示例代码了。最后,我把运行示例程序获取到的信息附上,以供大家有个直观的认识:eth0: MAC: 08-00-27-98-bf-f3 IP: 1921681106 BroadIP: 255255255255 Netmask: 2552552550Gateway: 19216811eth1: MAC: 08-00-27-16-f4-bf IP: 1921681108 BroadIP: 1921681255 Netmask: 2552552550Gateway: 0000eth2: MAC: 08-00-27-37-9c-91 IP: 0000 BroadIP: 0000 Netmask: 0000Gateway: 0000eth3: MAC: 08-00-27-5a-d2-39 IP: 0000 BroadIP: 0000 Netmask: 0000Gateway: 0000NetCardCount: 4DNS 0: 21821351DNS 1: 61147371

struct hostent pHost;

int i,j;

if( gethostname(szHostName, 128) == 0 )

{

pHost = gethostbyname(szHostName);

for( i = 0; pHost!= NULL && pHost->h_addr_list[i]!= NULL; i++ )

{ /对每一个IP地址进行处理/

pszAddr=inet_ntoa ((struct in_addr )pHost->h_addr_list[i]);

printf("%s\n",pszAddr);/打印/

}

}

1 首先确定机子是处于联网状态的。 进入Android-x86的终端模拟器(相当于Win系统的命令提示符)。 2 输入命令逗ip a地获取所有网卡配置如果可以发现eth0网卡,那么恭喜,系统已经认出了VM的虚拟网卡,可以继续看下面了。如果没发现这个eth0,那么还是将此系统删除,重新安装别的版本吧。Android-x86有好几个版本,我试验之后发现eeepc的版本对网卡的支持比较好。 3 用su命令获取最高权限。 4 为网卡指定ip、掩码、网关等信息。如果DHCP可用,则执行逗dhcpcd eth0地自动获取,如果没有DHCP服务可用,则可以手动指定,命令是:su ifconfig eth0 19216810250 netmask 2552552550 up route add default gw 192168101 dev eth0。相信能看到本文此处的小盆友都能看明白,就不再解释了。 5 设置dns。执行如下命令:setprop netdns18888,如果你不想用google的这个dns服务器,也可以使用本地的,不过要保证可用。 6 至此,我们已经为eth0网卡配置了ip和dns信息,登录Android-x86,打开自带的浏览器,可以发现浏览网页已经木有问题了,但是想要下载某些软件的时候,还是无法下载,下载进度条会一直停止不动,一些系统自带的服务(如地图)也仍然无法使用。这是因为系统只认wifi,没有wifi设备系统就认为没有上网,为以太网卡配置IP和DNS之后可以骗过浏览器,但是系统不认那一套,所以上网的问题只能是初步解决,希望有高手可以解决这个问题。(貌似网上已经有一位日本友人做出了VirtualBox虚拟机下的镜像,VMware下的还有待高手继续开发)另,看到有的网友提出了别的解决方案:通过逗电子邮件地设置好自己的账户,然后在电脑上将需要安装的APK文件发给自己,在虚拟上打开收件箱就可以直接安装了。这倒是一种不错的解决方案。

using SystemNetNetworkInformation;

namespace ConsoleApplication1

{

class Program

{

static void Main(string[] args)

{

NetworkInterface[] adapters = NetworkInterfaceGetAllNetworkInterfaces();//获取本地计算机上网络接口的对象

ConsoleWriteLine("适配器个数:" + adaptersLength);

ConsoleWriteLine();

foreach (NetworkInterface adapter in adapters)

{

ConsoleWriteLine("描述:" + adapterDescription);

ConsoleWriteLine("标识符:" + adapterId);

ConsoleWriteLine("名称:" + adapterName);

ConsoleWriteLine("类型:" + adapterNetworkInterfaceType);

ConsoleWriteLine("速度:" + adapterSpeed 0001 0001 + "M");

ConsoleWriteLine(" *** 作状态:" + adapterOperationalStatus);

ConsoleWriteLine("MAC 地址:" + adapterGetPhysicalAddress());

// 格式化显示MAC地址

PhysicalAddress pa = adapterGetPhysicalAddress();//获取适配器的媒体访问(MAC)地址

byte[] bytes = paGetAddressBytes();//返回当前实例的地址

StringBuilder sb = new StringBuilder();

for (int i = 0; i < bytesLength; i++)

{

sbAppend(bytes[i]ToString("X2"));//以十六进制格式化

if (i != bytesLength - 1)

{

sbAppend("-");

}

}

ConsoleWriteLine("MAC 地址:" + sb);

ConsoleWriteLine();

}

ConsoleReadKey();

}

}

}

Linux查看网卡信息,可以通过nmcli命令来进行获取:

1、查看网卡信息

2、查看网卡的连接状态

3、查看网卡的详细信息

以上就是关于centos7 如何shell 提取出所有网卡的名字全部的内容,包括:centos7 如何shell 提取出所有网卡的名字、如何在linux中获取网卡信息、Linux下如何获取网卡信息等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9355158.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存