linux獲取活動網絡卡ip地址
1、根據ioctl機制列印當前所有網絡卡
程式碼:
#include <sys/ioctl.h>
#include <net/if.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <string.h>
#include <stdio.h>
int get_local_ip(char *ip)
{
int fd, intrface, retn = 0;
struct ifreq buf[INET_ADDRSTRLEN];
struct ifconf ifc;
if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) >= 0)
{
ifc.ifc_len = sizeof(buf);
// caddr_t,linux核心原始碼裡定義的:typedef void *caddr_t;
ifc.ifc_buf = (caddr_t)buf;
if (!ioctl(fd, SIOCGIFCONF, (char *)&ifc))
{
intrface = ifc.ifc_len/sizeof(struct ifreq);
while (intrface-- > 0)
{
if (!(ioctl(fd, SIOCGIFADDR, (char *)&buf[intrface])))
{
ip=(inet_ntoa(((struct sockaddr_in*)(&buf[intrface].ifr_addr))->sin_addr));
printf("IP:%s\n", ip);
}
}
}
close(fd);
return 0;
}
}
int main()
{
char ip[64];
memset(ip, 0, sizeof(ip));
get_local_ip(ip);
return 0;
}
編譯:
[[email protected] get_ip]# gcc -Wall -g ip.c
[[email protected] get_ip]# ./a.out
IP:192.168.2.53
IP:192.168.2.55
IP:127.0.0.1
程式碼解析:
<netinet/in.h>中定義了 #define INET_ADDRSTRLEN 16
2、通過列舉網絡卡列印當前所有網絡卡
程式碼:
#include <stdio.h>
#include <ifaddrs.h>
#include <netinet/in.h>
#include <string.h>
#include <arpa/inet.h>
int get_local_ip(char *ip) {
struct ifaddrs *ifAddrStruct;
void *tmpAddrPtr=NULL;
getifaddrs(&ifAddrStruct);
while (ifAddrStruct != NULL) {
if (ifAddrStruct->ifa_addr->sa_family==AF_INET) {
tmpAddrPtr=&((struct sockaddr_in *)ifAddrStruct->ifa_addr)->sin_addr;
inet_ntop(AF_INET, tmpAddrPtr, ip, INET_ADDRSTRLEN);
printf("%s IP Address:%s\n", ifAddrStruct->ifa_name, ip);
}
ifAddrStruct=ifAddrStruct->ifa_next;
}
//free ifaddrs
freeifaddrs(ifAddrStruct);
return 0;
}
int main()
{
char ip[16];
memset(ip, 0, sizeof(ip));
get_local_ip(ip);
return 0;
}
編譯:
[[email protected] get_ip]# gcc -Wall -g ip.c
[[email protected] get_ip]# ./a.out
lo IP Address:127.0.0.1
eth0 IP Address:192.168.2.55
eth1 IP Address:192.168.2.53
程式碼解析:
API介面可檢視man 7 netdevice
3、多網絡卡情況下,將所有IP地址以字串形式打印出,用逗號(“,”)隔開,形式如:“127.0.0.1,192.168.2.55,192.168.2.53”
程式碼:
#include <stdio.h>
#include <ifaddrs.h>
#include <netinet/in.h>
#include <string.h>
#include <arpa/inet.h>
int get_local_ip(char *ips) {
struct ifaddrs *ifAddrStruct;
void *tmpAddrPtr=NULL;
char ip[INET_ADDRSTRLEN];
int n = 0;
getifaddrs(&ifAddrStruct);
while (ifAddrStruct != NULL) {
if (ifAddrStruct->ifa_addr->sa_family==AF_INET) {
tmpAddrPtr=&((struct sockaddr_in *)ifAddrStruct->ifa_addr)->sin_addr;
inet_ntop(AF_INET, tmpAddrPtr, ip, INET_ADDRSTRLEN);
printf("%s IP Address:%s\n", ifAddrStruct->ifa_name, ip);
if (n == 0){
strncat(ips, ip, INET_ADDRSTRLEN);
} else {
strncat(ips, ",", 1);
strncat(ips, ip, INET_ADDRSTRLEN);
}
n++;
}
ifAddrStruct=ifAddrStruct->ifa_next;
}
//free ifaddrs
freeifaddrs(ifAddrStruct);
return 0;
}
int main()
{
char ip[64];
memset(ip, 0, sizeof(ip));
get_local_ip(ip);
printf("IP:%s\n", ip);
return 0;
}
編譯:
[[email protected] get_ip]# gcc -Wall -g ip.c
[[email protected] get_ip]# ./a.out
lo IP Address:127.0.0.1
eth0 IP Address:192.168.2.55
eth1 IP Address:192.168.2.53
IP:127.0.0.1,192.168.2.55,192.168.2.53
4、多網絡卡情況下,將多個ip地址放入字串陣列中(去掉"127.0.0.1"地址)
程式碼:
#include <stdio.h>
#include <ifaddrs.h>
#include <netinet/in.h>
#include <string.h>
#include <arpa/inet.h>
int get_local_ip(char *ip_list) {
struct ifaddrs *ifAddrStruct;
void *tmpAddrPtr;
char ip[INET_ADDRSTRLEN];
int n = 0;
getifaddrs(&ifAddrStruct);
while (ifAddrStruct != NULL) {
if (ifAddrStruct->ifa_addr->sa_family==AF_INET) {
tmpAddrPtr=&((struct sockaddr_in *)ifAddrStruct->ifa_addr)->sin_addr;
inet_ntop(AF_INET, tmpAddrPtr, ip, INET_ADDRSTRLEN);
if (strcmp(ip, "127.0.0.1") != 0) {
// printf("%s IP Address:%s\n", ifAddrStruct->ifa_name, ip);
if (n == 0){
memcpy(ip_list, ip, INET_ADDRSTRLEN);
} else {
memcpy(ip_list+INET_ADDRSTRLEN, ip, INET_ADDRSTRLEN);
}
n++;
}
}
ifAddrStruct=ifAddrStruct->ifa_next;
}
//free ifaddrs
freeifaddrs(ifAddrStruct);
return n;
}
int main()
{
char ip[3][INET_ADDRSTRLEN];
memset(ip, 0, sizeof(ip));
int n;
for (n=get_local_ip(*ip); n>0; n--) {
printf("IP:%s\n", ip[n-1]);
}
return 0;
}
編譯:
[[email protected] get_ip]# gcc -Wall -g ip.c
[[email protected] get_ip]# ./a.out
IP:192.168.2.53
IP:192.168.2.55
相關推薦
linux獲取活動網絡卡ip地址
1、根據ioctl機制列印當前所有網絡卡 程式碼: #include <sys/ioctl.h> #include <net/if.h> #include <netinet/in.h> #include <arpa/inet.h> #include <
delphi 獲取多網絡卡IP地址列表和Mac地址
1、宣告windows系統的sendarp函式 function sendarp(ipaddr: ulong; temp: dword; ulmacaddr: pointer; ulmacaddrleng: pointer): Dword; StdCall;External
LINUX下獲取網絡卡IP地址和MAC地址,子網掩碼程式參考
/* mode time:20120727 LINUX下獲取IP地址和MAC地址.程式相關結構體在程式後面。 列印網絡卡的ip地址 子網掩碼 廣播地址 mac地址 環境: [[email protected] temp]# uname -a Linux b
C#之獲取網絡卡IP地址
有時候不想讀取配置檔案來進行網路監聽,預設把本級所有IP地址監聽一遍,這個時候就需要獲取本級所有IP地址。 如下: string name = Dns.GetHostName(); IPAddress[] ipadrlist = Dns.Get
從ip addr add和ifconfig的區別看linux網絡卡ip地址的結構
今天一個老外在郵件列表上問了一個問題,就是ip addr add和ifconfig的區別,我給他進行了解答,可能因為英語不好吧,解答的很簡單,因此我還是要在這裡詳細說明一下。其實它們之間沒有什麼區別,只 是表述方式不同罷了。如果你非常理解網路協議的原理以及網路的分層架構那麼我想
python獲取網絡卡IP地址
#!/usr/bin/env python # -*- coding: utf-8 -*- import socket import fcntl import struct def get_ip_address(ifname): s = sock
shell 獲取網絡卡IP地址 子網掩碼 預設閘道器 廣播地址 MAC地址
# IP地址 ifconfig eth0 | grep "inet addr:" | awk -F " " '{print $2}' | awk -F ":" '{print $2}' # 廣播地址 ifconfig eth0 | grep "inet addr:" |
linux配置網絡卡IP地址命令詳細介紹及一些常用網路配置命令
Linux命令列下配置IP地址不像圖形介面下那麼方 便,完全需要我們手動配置,下面就給大家介紹幾種配置的方法: 即時生效(重啟後失效): ifconfig eth0 192.168.1.102 netmask 255.255.255.0 //新增IP地址 rout
socket 通過 ioctl獲取 設定 網絡卡 IP 子網掩碼 本地廣播地址
參看 http://blog.chinaunix.net/uid-20692625-id-3172833.html 類別 Request 說明 資料型別 套 接 口 SIOCATMARK SIOCSPGRP SIOCGPGRP 是否位於帶外標
在安卓6.0(及以上)裝置上無法獲取無線網絡卡MAC地址的解決方案
在安卓6.0以下的裝置上,通過WifiManager.getConnectionInfo().getMacAddress()即可獲取WLAN實體地址, 而在6.0及以上,以此方式獲取到的MAC地址為固定值02:00:00:00:00:00,而非真實值 解決方案 WlanMacAddressGetter.
linux下修改網絡卡MAC地址
linux下可以通過ethtool工具來修改MAC地址,方法如下: 1、下載ethtool,下載tar.gz包,路徑如下: https://mirrors.edge.kernel.org/pub/software/network/ethtool/ 2、拷貝到linux機器,解壓:
linux中檢視網絡卡mac地址
1. ifconfig -a 其中 HWaddr欄位就是mac地址2. cat /sys/class/net/eth0/address 檢視eth0的mac地址3. cat /proc/net/arp 檢視連線到本機的遠端ip的mac地址4. 程式中使用SIOCGIFHW
linux c/c++按規則獲取網絡卡ip
linux c/c++按規則獲取網絡卡ip 輸出專案到雲或者輸出給外部客戶,會遇到伺服器多網絡卡多ip的情形,如果有多個應用都需要這個主機ip,而且多應用需要獲取相同的ip,此時可以約定一種規則來獲取相同的ip,比如: 獲得所有網絡卡名,然後對網絡卡名按從小到大排序,查詢最小
獲取指定網絡卡對應的IP地址
1 #include <stdio.h> 2 #include <string.h> 3 #include <sys/socket.h> 4 #include <sys/types.h> 5 #include <sys/ioctl.h>
配置Linux的eth0網絡卡設定IP地址以及啟動方式
// 進入網絡卡設定配置目錄 [[email protected] ~]# cd/etc/sysconfig/network-scripts/ // 選擇需要配置的網絡卡,用vi編輯器開啟 [[email protected]]#vi ifcfg-eth
一句話腳本系列之獲取eth0網絡卡的IP地址(或MAC地址)
引言 使用場景: 我使用的Linux伺服器上有多個網絡卡,有時候就需要在指令碼中使用到指定網絡卡的IP地址或MAC地址,那麼這個時候就有兩種做法,一是預先讀取網絡卡的IP地址或MAC地址,然後寫入到指令碼中;另外一種方法就是通過shell命令實時獲取指定網絡卡上的當前IP
linux環境下單網絡卡配置多個IP地址
即時生效: ifconfig eth0 192.168.1.102 netmask 255.255.255.0 啟動生效: vim /etc/sysconfig/network-scripts/ifcfg-eth0 加入 IPADDR=192.168.1.102 NETMASK=255.255.255.0 修
linux下C語言獲取網絡卡MAC地址
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <sys/ioctl.h>#include <sys/socket.h&g
linux檢視裝置網絡卡MAC和IP地址以及設定MAC ip的注意事項
1 檢視裝置的MAC和IPLinux/Unix作業系統熟悉的人都通常是用console命令控制檯來進行相應的操作。 Linux/Unix作業系統檢視網絡卡mac地址的方法可以通過以下命令獲得:1.ifconfig -a2.ip link show3.ip address
linux設定網絡卡ip為靜態地址
修改 /etc/network/interfaces。 安裝一下格式編輯: auto eth0 iface eth0 inet static address 192.168.x.xxx netmask 255.255.255.0 gateway 192.168.x.x