How can i find my LAN IP Address using std.socket?
Mike Shah
mshah.475 at gmail.com
Wed Feb 22 05:38:05 UTC 2023
On Tuesday, 4 February 2014 at 22:31:53 UTC, Dicebot wrote:
> On Tuesday, 4 February 2014 at 20:19:14 UTC, TheFlyingFiddle
> wrote:
>> I'm setting up a simple local network enabling me to connect
>> phones to the computer through the local wi-fi. The simplest
>> way i could think of to make this work without relying on an
>> external server was to simply broadcast the ip and port to all
>> machines in the network.(Btw by server i mean my / my project
>> groups windows boxes).
>>
>> So well the problem is that i need a way for the phones to
>> find running servers on the LAN.
>
> I think it is close to impossible to do in portable way. Most
> reliable approach is to get list of all configured network
> interfaces via posix functions (or via `system` call as least
> resort), filter out "lo" and broadcast message for every such
> interface. I think you can also filter only wireless interfaces
> that way relatively easily too.
Apologies that I am bumping a post that is 9 years old, but I
recently had to do this and thought this may help beginners. In a
way it's a hack as suggested from the second post, that you can
connect to a known ip address (e.g. google) from a socket and
then see the endpoints with the local and remote addresses.
```
import std.stdio;
import std.socket;
void GetIP(){
// A bit of a hack, but we'll create a connection from
google to
// our current ip.
// Use a well known port (i.e. google) to do this
auto r = getAddress("8.8.8.8",53); // NOTE: This is
effetively getAddressInfo
writeln(r);
// Create a socket
auto sockfd = new Socket(AddressFamily.INET,
SocketType.STREAM);
// Connect to the google server
import std.conv;
const char[] address = r[0].toAddrString().dup;
ushort port = to!ushort(r[0].toPortString());
sockfd.connect(new InternetAddress(address,port));
// Obtain local sockets name and address
writeln(sockfd.hostName);
writeln("Our ip address : ",sockfd.localAddress);
writeln("the remote address: ",sockfd.remoteAddress);
// Close our socket
sockfd.close();
}
```
More information about the Digitalmars-d-learn
mailing list