Linux下获取网络接口ip地址

Linux 下 可以使用ioctl()函数以及结构体 struct ifreq和结构体struct ifconf来获取网络接口的各种信息。

如图,有br0和br1两个接口,当前需要获取br1的ip地址(当然其他接口信息如mac、子网掩码等都可以),方法如下:

具体过程是先通过ictol获取本地的所有接口信息,存放到ifconf结构中,再从其中取出每个ifreq表示的ip信息(一般每个网卡对应一个IP地址,如:”eth0…、eth1…”)。

头文件:

1 #include <arpa/inet.h>
2 #include <net/if.h>
3 #include <sys/ioctl.h>
4 #include <sys/socket.h>

代码:

 1 static int cmc_lanGetBr1IpAddr(const char *ifName, char *ipAddr, UINT32 addrLen)
 2 {
 3     int ret = -1;
 4     struct ifreq ifr;
 5     struct sockaddr_in *sin;
 6     int sock;
 7
 8     printf("ifname:%s", ifr.ifr_name);
 9     sock = socket(AF_INET, SOCK_DGRAM, 0);
10     UTIL_STRNCPY(ifr.ifr_name, ifName, sizeof(ifr.ifr_name));
11
12     if (0 > (ret = ioctl(sock, SIOCGIFADDR, &ifr)))
13     {
14         printf("ioctl get SIOCGIFADDR failed!!");
15         return -1;
16     }
17     close(sock);
18
19     sin = (struct sockaddr_in *)&(ifr.ifr_addr);
20     if (NULL == inet_ntoa(sin->sin_addr))
21     {
22         return -1;
23     }
24     UTIL_STRNCPY(ipAddr, inet_ntoa(sin->sin_addr), addrLen);
25
26     return ret;
27 }

获取成功存入数据库并给前台:

原文地址:https://www.cnblogs.com/xuqiushuo/p/10246612.html

时间: 2024-12-14 04:18:52

Linux下获取网络接口ip地址的相关文章

Java-No.01 Java Linux下获取服务器ip地址

1.在window下获取本机ip地址 InetAddress inet = InetAddress.getLocalHost();   System.out.println("本机的ip=" + inet.getHostAddress()); 该方法在linux下获取到的ip为127.0.0.1,原因是你linux服务器上hosts配置了 127.0.0.1 localhost 可以修改hosts下将127.0.0.1改成你的本机真实ip地址 2.linux下代码获取本机ip地址 pu

Linux下获取公网IP地址

直接CURL获取,页面返回结果 [[email protected]~]$ curl http://members.3322.org/dyndns/getip 218.1.1.10

Linux下获取网络接口信息

Linux下的网络接口信息在shell下可以很方便地使用ifconfig查看.同样,使用C/C++也可以很方便地获取接口信息. netdevice是一个低级别的访问Linux网络设备的方法.此方法通过ioctl来获取网络接口的相关信息. 这里需要借助<net/if.h>头文件中定义的ifreq结构体.此结构体包含了网络接口的名称.IP地址.广播地址.网络地址. 掩码等相关信息.在获取上述相关信息的时候需要指明网络接口的名称. 1 struct ifreq { 2 char ifr_name[I

Linux下如何修改ip地址

在Linux的系统下如何才能修改IP信息 以前总是用ifconfig修改,重启后总是得重做.如果修改配置文件,就不用那么麻烦了- A.修改ip地址 即时生效: # ifconfig eth0 192.168.0.20 netmask 255.255.255.0 启动生效: 修改/etc/sysconfig/network-s/ifcfg-eth0 B.修改default gateway 即时生效: # route add default gw 192.168.0.254 启动生效: 修改/etc

Linux 下获取通讯IP

#!/bin/sh # filename: get_net.sh default_route=$(ip route show) default_interface=$(echo $default_route | sed -e 's/^.*dev \([^ ]*\).*$/\1/' | head -n 1) address=$(ip addr show label $default_interface scope global | awk '$1 == "inet" { print $2

linux下命令取IP地址的多种方法

经常会遇到在命令行取ip地址,或写脚本引用ip地址,需要使用命令取出来:下面的方法根据实际情况调整 下面的命令环境为centos6.6系统: [[email protected] ~]# ifconfig eth0 eth0      Link encap:Ethernet  HWaddr 00:0C:29:2A:03:61             inet addr:192.168.20.50  Bcast:192.168.20.255  Mask:255.255.255.0         

Linux下扫描服务器IP地址是否冲突(arp-scan)

部署服务突然发现,连接的服务器断开了,因为服务器用户名密码是一样的,所以重新连接后,发现文件变了,跟之前不一样. 猜想是不是ip地址冲突了,两次连接的服务器不同. 网上查找资料说可以用工具扫描.工具:arp-scan. 服务器:Centos 7.X 工具:arp-scan:1.9.2 服务器上直接 使用 yum安装 提示找不到资源.官网已经将源码放在git上. 所以安装环境需要以下几个: git gcc libpcap libpcap-devel 安装完成后,使用命令下载文件 git clone

Linux下获取和设置IP

在Linux下获取关于IP和网关的操作:重点是对struct ifreq 的操作. 那么进入目录/usr/include/net/if.h下看查找struct ifreq结构体. /* Interface request structure used for socket ioctl's. All interface ioctl's must have parameter definitions which begin with ifr_name. The remainder may be in

Linux下的静态IP配置【weber出品】

配置Linux下的静态IP地址 因为服务器的IP地址是固定的,不像我们自己家的笔记本的IP是动态的.所以我们要将这个地址给写成静态的. 直接编辑这个这个配置文件即可: vi /etc/sysconfig/network-scripts/ifcfg-ethx DEVICE=eth0 BOOTPROTO=static HWADDR= ;这里是你网卡的物理地址,不用输入 ONBOOT=yes IPADDR=192.168.0.1 NETMASK=255.255.255.0 NETWORK=192.16