怎么用C语言获取Linux系统的网卡IP地址

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎么用C语言获取Linux系统的网卡IP地址相关的知识,希望对你有一定的参考价值。

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <net/if.h>
#include <netdb.h>
#include <arpa/inet.h>
#include <sys/ioctl.h>

//获取地址
//返回IP地址字符串
int getlocalip(char* outip)

int i=0;
int sockfd;
struct ifconf ifconf;
char buf = (char)malloc(512);
struct ifreq *ifreq;
char* ip;

//初始化ifconf
ifconf.ifc_len = 512;
ifconf.ifc_buf = buf;

if((sockfd = socket(AF_INET, SOCK_DGRAM, 0))<0)

return -1;

ioctl(sockfd, SIOCGIFCONF, &ifconf); //获取所有接口信息
close(sockfd);
//接下来一个一个的获取IP地址
ifreq = (struct ifreq*)buf;
i = ifconf.ifc_len/sizeof(struct ifreq);
char *pos = outip;
int count;
for(count = 0; (count < 5 && i > 0); i--)

ip = inet_ntoa(((struct sockaddr_in*)&(ifreq->ifr_addr))->sin_addr);

if(strncmp(ip,"127.0.0.1", 3)==0) //排除127.x.x.x,继续下一个

ifreq++;
continue;
else

printf("%s\\n", ip);
strcpy(pos,ip);
int len = strlen(ip);
pos = \'\\t\';
pos += len+1;
count ++;
ifreq++;


free(buf);
return 0;

//——————————-函数的调用方式————————————-
int main(int argc, char** argv)

char ip = \'*\';

if ( getlocalip( ip ) == 0 )

printf("本机IP地址是: %s\\n", ip );

else

printf("无法获取本机IP地址 ");

return 0;
参考技术A man exec里面的函数可以用来执行命令

linux系统下,如何永久设置网络接口的ip地址

图形化下

右键网络图标,点击编辑连接

点击编辑,当然了要是两个网卡,左边会有两个网卡的名称

这里就不说了吧,但是记住做上面的那两个勾 ,自动连接一定要勾上

命令行的如下:

[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0


DEVICE=eth0#网卡设备名称


ONBOOT=yes#启动时是否激活 yes | no


BOOTPROTO=static#协议类型 dhcp bootp none


IPADDR=192.168.1.90#网络IP地址


NETMASK=255.255.255.0#网络子网地址


GATEWAY=192.168.1.1#网关地址

BROADCAST=192.168.1.255#广播地址


HWADDR=00:0C:29:FE:1A:09#网卡MAC地址


TYPE=Ethernet#网卡类型为以太网


注:在修改文件ifcfg-ethx后还需要重新导入文件才能生效,具体命令如下:


[root@localhost ~]# service network restart   #(linux 6.X用此命令)

[root@localhost ~]# systemctl restart network   #(linux 7.X用此命令)

参考技术A

    首先以根用户登录系统,然后使用lspci | grep Ethernet命令检查计算机上的以太网卡设备是否被内核检测到。这里小编要提醒大家,在默认的情况下,只有root也就是根用户才有权限进行网络配置。红框内就是检测到的网卡信息。

    然后使用“ifconfig”命令查看系统已经识别并已激活的网络接口。如果没有找到可以用“ifconfig -a”命令找到所有已识别包括未激活的网络接口,然后使用”ifconfig 网卡名 up“激活。可以看出小编的CentOS6.4系统上有一块已激活的eth0网卡,下面就对这块网卡进行设置使它能够发挥作用。

    这里小编首先为大家演示如何临时指定IP地址。在命令行输入“ifconfig 网卡名 IP地址 netmask 子网掩码”就可以临时指定网卡的IP地址,但重启后失效。相对于上一张图,小编的IP临时设置已经生效。

    接下来为大家演示如何永久改变IP地址。第一步用“vi /etc/sysconfig/network-scripts/ifcfg-eth0”编辑网卡eth0的配置文件。这里小编要说明的是如果设置的是dhcp自动获取IP地址,那么IPADDR、NETMASK和GATWAY都可以不写。

    第二步就是使用“service network restart”命令重新启动network服务,使配置文件生效。四个状态都必须是OK,否则说明设置有问题,需要重新修改设置。

    最后再次使用“ifconfig”命令查看网卡参数,可以看出IP地址修改成功,并且会一直保留。

参考技术B

     首先以根用户登录系统,然后使用lspci | grep Ethernet命令检查计算机上的以太网卡设备是否被内核检测到。这里小编要提醒大家,在默认的情况下,只有root也就是根用户才有权限进行网络配置。红框内就是检测到的网卡信息。

    然后使用“ifconfig”命令查看系统已经识别并已激活的网络接口。如果没有找到可以用“ifconfig -a”命令找到所有已识别包括未激活的网络接口,然后使用”ifconfig 网卡名 up“激活。可以看出小编的CentOS6.4系统上有一块已激活的eth0网卡,下面就对这块网卡进行设置使它能够发挥作用。

    这里小编首先为大家演示如何临时指定IP地址。在命令行输入“ifconfig 网卡名 IP地址 netmask 子网掩码”就可以临时指定网卡的IP地址,但重启后失效。相对于上一张图,小编的IP临时设置已经生效。

    接下来为大家演示如何永久改变IP地址。第一步用“vi /etc/sysconfig/network-scripts/ifcfg-eth0”编辑网卡eth0的配置文件。这里小编要说明的是如果设置的是dhcp自动获取IP地址,那么IPADDR、NETMASK和GATWAY都可以不写。

    第二步就是使用“service network restart”命令重新启动network服务,使配置文件生效。四个状态都必须是OK,否则说明设置有问题,需要重新修改设置。

    最后再次使用“ifconfig”命令查看网卡参数,可以看出IP地址修改成功,并且会一直保留。


注意事项

如果设置的是dhcp自动获取IP地址,那么系统每次启动都会自动重新获取。

参考技术C

    设置静态ip

    命令行模式:使用vi vim nano ee 等文本编辑器修改网络配置文件

    桌面模式:网络管理 编辑连接 ipv4 手动设置地址 

    希望可以帮你,请采纳 , 谢谢

参考技术D 这个要说是啥版的,似乎是不同的,差别很大,除非自己装同一个tools

以上是关于怎么用C语言获取Linux系统的网卡IP地址的主要内容,如果未能解决你的问题,请参考以下文章

用java语言怎么修改linux下eth0网卡的ip地址,请高手指点下,最好有例子....

Linux C语言 获取本机(所有网卡)IP地址(IPV4)

linux系统自动获取ip地址

linux系统网络激活不了

Linux如何自动获取IP地址及配置静态IP地址上网

求助在linux下用c语言取得双网卡的网关地址