How to get an IP address from network interfaces

dangbinghoo dangbinghoo at gmail.com
Thu Apr 21 07:20:30 UTC 2022


On Thursday, 21 April 2022 at 07:04:18 UTC, Alexander Zhirov 
wrote:
> I want to get the IP address of the network interface. There is 
> both a wireless interface and a wired one. Is it possible, 
> knowing the name of the network interface, to get its IP 
> address?

```d
	import core.sys.posix.sys.ioctl;
	import core.sys.posix.arpa.inet;
	
	import core.stdc.string;
	import core.stdc.stdio;
	import core.stdc.errno;
	import core.sys.posix.stdio;
	import core.sys.posix.unistd;
	
	string ip;

	
	int get(string if_name)
	{
		int s = socket(AF_INET, SOCK_DGRAM, 0);
		if (s < 0) {
			fprintf(stderr, "Create socket failed!errno=%d", errno);
			return -1;
		}
	
		ifreq ifr;
		uint nIP, nNetmask, nBroadIP;

		strcpy(ifr.ifr_name.ptr, std.string.toStringz(if_name));
		try {
			if (ioctl(s, SIOCGIFHWADDR, &ifr) < 0) {
				return -2;
			}
		}
		catch (Exception e) {
			writeln("Error operation on netif " ~ if_name);
			return -2;
		}
		memcpy(macaddr.ptr, cast(char *)ifr.ifr_hwaddr.sa_data.ptr, 6);
	
		if (ioctl(s, SIOCGIFADDR, &ifr) < 0) {
			nIP = 0;
		}
		else {
			nIP = *cast(uint*)(&ifr.ifr_broadaddr.sa_data[2]);
			ip = fromStringz(inet_ntoa(*cast(in_addr*)&nIP)).idup;
		}
        }

```


More information about the Digitalmars-d-learn mailing list