Find available network interfaces in C/C++?
See the getifaddrs man page. There is an example program towards the end.
How to enumerate all available network interfaces?
Have a look at http://www.codeproject.com/KB/IP/netcfg.aspx. It's a giant example of what you want to do.
Linux getting all network interface names
You could check which entries from getifaddrs belong to the AF_PACKET family. On my system that seems to list all interfaces:
struct ifaddrs *addrs,*tmp;
getifaddrs(&addrs);
tmp = addrs;
while (tmp)
{
if (tmp->ifa_addr && tmp->ifa_addr->sa_family == AF_PACKET)
printf("%s\n", tmp->ifa_name);
tmp = tmp->ifa_next;
}
freeifaddrs(addrs);
List of network interface names, using C with Winsock?
GetAdaptersAddresses()
does this.
Use GetIpAddrTable()
if you are interested in IPv4 addresses only.
Is there a way to get a list of disabled/enabled network interfaces in C#
I wasn't aware that NetworkInterface.GetAllNetworkInterfaces() didn't return disabled interfaces.
Anyway, you could try using the WMI api via System.Management.dll
that's available in the .NET framework (you must add this reference to your project), I did a test and it allows you to interact even with disabled network interfaces.
The following example give you an idea of how to work with WMI via this api, I pretty much extracted it from the documentation:
using System;
using System.Management;
...
void ListNetworkAdapters()
{
var query = new ObjectQuery("SELECT * FROM Win32_NetworkAdapter");
using (var searcher = new ManagementObjectSearcher(query))
{
var queryCollection = searcher.Get();
foreach (var m in queryCollection)
{
Console.WriteLine("ServiceName : {0}", m["Name"]);
Console.WriteLine("MACAddress : {0}", m["Description"]);
Console.WriteLine();
}
Console.ReadLine();
}
}
The documentation can be found here:
https://learn.microsoft.com/en-us/windows/desktop/cimwin32prov/win32-networkadapter
How can I enumerate the list of network devices or interfaces in C or C++ in FreeBSD?
getifaddrs
API get interface addresses. man getifaddrs
You can also use ioctl
to get network interfaces.
Code:
#include <sys/ioctl.h>
#include <net/if.h>
#include <netinet/in.h>
#include <stdio.h>
#include <arpa/inet.h>
int main(void)
{
char buf[1024];
struct ifconf ifc;
struct ifreq *ifr;
int sck;
int nInterfaces;
int i;
/* Get a socket handle. */
sck = socket(AF_INET, SOCK_DGRAM, 0);
if(sck < 0)
{
perror("socket");
return 1;
}
/* Query available interfaces. */
ifc.ifc_len = sizeof(buf);
ifc.ifc_buf = buf;
if(ioctl(sck, SIOCGIFCONF, &ifc) < 0)
{
perror("ioctl(SIOCGIFCONF)");
return 1;
}
/* Iterate through the list of interfaces. */
ifr = ifc.ifc_req;
nInterfaces = ifc.ifc_len / sizeof(struct ifreq);
for(i = 0; i < nInterfaces; i++)
{
struct ifreq *item = &ifr[i];
/* Show the device name and IP address */
printf("%s: IP %s",
item->ifr_name,
inet_ntoa(((struct sockaddr_in *)&item->ifr_addr)->sin_addr));
/* Get the broadcast address (added by Eric) */
if(ioctl(sck, SIOCGIFBRDADDR, item) >= 0)
printf(", BROADCAST %s", inet_ntoa(((struct sockaddr_in *)&item->ifr_broadaddr)->sin_addr));
printf("\n");
}
return 0;
}
Output:
lo: IP 127.0.0.1, BROADCAST 0.0.0.0
eth0: IP 192.168.1.9, BROADCAST 192.168.1.255
How to get all network interface name and information in c++
Not specially for C++, but you can use the C API and the 'getifaddrs' function to do so: http://man7.org/linux/man-pages/man3/getifaddrs.3.html
Related Topics
Fast Multiplication/Division by 2 for Floats and Doubles (C/C++)
How to Show Qsqlquerymodel in Qml
Mingw Error: 'Thread' Is Not a Member of 'Std'
What Is the Purpose of Unary Plus Operator on Char Array
Calling Constructor with Braces
Should "Delete This" Be Called from Within a Member Method
Mapping Elements in 2D Upper Triangle and Lower Triangle to Linear Structure
Why Are Designated Initializers Not Implemented in G++
How Many Decimal Places Does the Primitive Float and Double Support
What Does Afx_Manage_State(Afxgetstaticmodulestate()) Do Exactly
How to Statically-Initialize a Dynamically-Allocated Array in C++
Use of 'Auto Func(Int)' Before Deduction of 'Auto' in C++14
Opencv Fisheye Calibration Cuts Too Much of the Resulting Image