1. 程式人生 > >LINUX c++ 遍歷網絡卡列表

LINUX c++ 遍歷網絡卡列表

直接扔程式碼:

#include <iostream>
#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>

using namespace std;
void show_all_if()
{	
	int fdSock = 0;
	struct ifconf ifMyConf;
	struct ifreq ifMyReq;
	char szBuf[20480] = {0};
	char * ip;
	
	
	ifMyConf.ifc_len = 2048;
	ifMyConf.ifc_buf = szBuf;

	if((fdSock = socket (AF_INET, SOCK_DGRAM, 0)) < 0  )
	{
		cout << "socket error" <<endl;
		return;
	}

	if(ioctl (fdSock, SIOCGIFCONF, &ifMyConf))
	{
		close(fdSock);
		cout << "ioctl error \n"<<endl;
		return;
	}
	
	ifreq *it = ifMyConf.ifc_req;
	const struct ifreq * const end = it + (ifMyConf.ifc_len / sizeof(struct ifreq));


	for(;it != end; ++it)
	{
		strcpy(ifMyReq.ifr_name, it->ifr_name);
		cout<< ifMyReq.ifr_name <<endl;
		if(ioctl(fdSock, SIOCGIFADDR, &ifMyReq) == 0)
		{
			string strAddr;
			struct sockaddr_in *sin;
			sin = (struct sockaddr_in*) &ifMyReq.ifr_addr;

			strAddr = (const char *) inet_ntoa(sin->sin_addr);
			cout << "ip addr : "<<strAddr.c_str()<<endl;
		}
		else
		{
			cout << "get mac info error \n"<<endl;
		}


		if(ioctl(fdSock, SIOCGIFNETMASK, &ifMyReq) == 0)
		{
			string strMask;
			struct sockaddr_in *sin;
			sin = (struct sockaddr_in*) &ifMyReq.ifr_netmask;

			strMask = (const char *) inet_ntoa(sin->sin_addr);
			cout << "net mask : "<<strMask.c_str()<<endl;
		}
		else
		{
			cout << "get mask info error \n"<<endl;
		}

		if(strstr(ifMyReq.ifr_name, "ppp"))
		{
			if((ioctl(fdSock, SIOCGIFDSTADDR, &ifMyReq)) == 0)
			{
				string strAddr;
				struct sockaddr_in *sin;
				sin = (struct sockaddr_in*) &ifMyReq.ifr_dstaddr;
				strAddr = (const char *) inet_ntoa(sin->sin_addr);
				cout << "P-T-P : "<<strAddr.c_str()<<endl;
			}
			else
			{
				cout << "get P-T-P info error \n"<<endl;
			}
		}
	}







	



	close(fdSock);

	
}


int main ()
{
	show_all_if();
	system("read");
}


相關推薦

LINUX c++ 列表

直接扔程式碼: #include <iostream> #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h>

linux C語言獲取對應IP地址

int get_gw_ip(char *eth, char *ipaddr){ int sock_fd; struct  sockaddr_in my_addr; struct ifreq ifr;  /**//* Get socket file descriptor */ 

C# 多個資訊列表

  private static void ShowAdapterInfo()        {            NetworkInterface[] adapters = NetworkInterface.GetAllNetworkInterfaces();     

linuxC語言獲取MAC地址

#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <sys/ioctl.h>#include <sys/socket.h&g

linux c++模擬簡易爬蟲

soc argv 爬蟲 and gethostby ddr rec cep use /* * To change this license header, choose License Headers in Project Properties. * To change t

linux c 目錄及文件

cup close logs sed mode 文件 void struct readdir #include <dirent.h>void recovery_backend() { DIR * pdir ; struct dirent *

Linux移除虛擬

今天上大資料實踐課時,使用學校提供的雲主機平臺建立了幾臺vps,但是安全組配置好之後發現無法用ssh無法登入,ping也不通,提示網路無法到達。 但是拿別人的電腦試了下能順利使用ssh連線。 有人說是我電腦防火牆的問題,對於這個說法我是萬萬不信的。 反覆觀察後發現: vps的地址是172.19.241.45

Linux中USB無線實現AP模式(hostapd交叉編譯環境下)

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

LINUX核心升級 - 更新驅動

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

linux部署二:配置和Yum源的替換

  一,初次登陸: 1.登陸(用root登陸)(1).賬戶名root(2).密碼 。。。。2.工作介面切換A.Ctrl + alt + F1 : 圖形化介面B.Ctrl + alt + F2----F6 : 5個命令列介面3.ls 命令:瀏覽目錄 cd 命令:切換目錄 Ctrl +l 或 cle

VM虛擬機器中linux centOS 聯網單配置教程

      VM虛擬機器提供了三種聯網模式:主機模式,nat模式,橋接模式    1.主機模式 真實環境和虛擬環境是隔離開的;在這種模式下,所有虛擬系統可惜相互通訊,但是虛擬系統和真實網路是被隔開的,但主機可以上網。 2.

Linux Namespace Veth虛擬

Linux Namespace Network Namespace 建立networ

複製linux虛擬機器後不能用的解決方法

複製Linux虛擬機器,發現原eth0網絡卡無法使用。原來只有eth0網絡卡,卻新增了一個eth1網絡卡,IP地址配置在eth0上。 原因: VM複製後,MAC地址變動,Linux認為新網絡卡,那原網絡卡不可用了。       1、編輯udev下的70-persist

Linux】萬兆82599驅動安裝

在Debian系的Linux中編譯並安裝ixgbe驅動的教程 遇到bug 實測可以使用的: failed to

Linux基礎——sar 檢視流量 網路io

  2017年03月23日 13:21:07 Citizen_Wang 閱讀數:17993 版權宣告:本文為 Cityzen Wang 原創文章,歡迎轉載!轉載請註明出處:http://blog.csdn.net/cityzenoldwang https://b

C#之獲取IP地址

有時候不想讀取配置檔案來進行網路監聽,預設把本級所有IP地址監聽一遍,這個時候就需要獲取本級所有IP地址。 如下: string name = Dns.GetHostName(); IPAddress[] ipadrlist = Dns.Get

linux配置bond雙繫結

第一步:# vi /etc/sysconfig/network-scripts/ifcfg-bond0 DEVICE=bond0 BONDING_OPTS="mode=0 miimon=100"

linux如何新增新並修改配置檔案

如何給linux虛擬機器新增網絡卡,並給配置修改網絡卡資訊 環境:VMware Workstation  系統:Centos  步驟一:關機、新增網絡卡硬體: 1、網路介面卡 2、新增 3、選中網路介面卡   下一步 4、

VM linux虛擬機器新增修改ip 並修改mac地址

修改ip 開啟終端 vi /etc/sysconfig/network-script/ifcfg-eth0; 具體是哪個可以到這個目錄地下檢視一下,我的是ifcfg-system-eth0. 開啟檔案後修改裡面的ip地址,IPADRR這一項是填寫ip地址的地方。 然後開啟拎一個檔案檢視我

Linux c : 並刪除指定目錄下的所有檔案

系統:ubuntu17.10 遍歷並刪除指定目錄下的所有檔案 #include <dirent.h> #include <stdio.h> #include <string.h> int main() {     &