怎么用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地址修改成功,并且会一直保留。
首先以根用户登录系统,然后使用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 手动设置地址
希望可以帮你,请采纳 , 谢谢
以上是关于怎么用C语言获取Linux系统的网卡IP地址的主要内容,如果未能解决你的问题,请参考以下文章
用java语言怎么修改linux下eth0网卡的ip地址,请高手指点下,最好有例子....