alexr_rwx: (coffee)
Alex R ([personal profile] alexr_rwx) wrote2004-07-06 05:01 am

It's another "it's one of those days" posts...

There are days when you're poking around in /proc/net, and you see "2A00000A" and immediately recognize that as "10.0.0.42"... but you can't seem to figure out how to determine your own machine's ip address in any clever way... this is one of those days.

Because ifconfig (and busybox, actually... oh my goodness, busybox is huge, and I've now looked at more of it than I would have liked to...) know how to do it, but they do it in disgustingly convoluted ways that would be unpleasant to pull out...

So this is a question for you, O my hackerly readers -- how do you figure out what all of your IP addresses are? It seems like the information would be hidden in /proc/net somewheres, but is there a syscall or something? ... Because, elrond is not just called 127.0.0.1, and if I was cool for this proxying thing, I'd recognize when he's referred to as 10.0.0.1 as well... *bangs fist on table* *opts to say "hot dammit!" for emphasis*... hot dammit!

My apologies to the readers for whom that made no sense a'tall.

[identity profile] falun.livejournal.com 2004-07-06 06:08 am (UTC)(link)
*whimper*

wish i knew

[identity profile] neuroticmonk.livejournal.com 2004-07-06 07:30 am (UTC)(link)
You can determine the IP addresses associated with a the interfaces fairly easily. Determining your internet routable IP is a different thing, but just getting your IP is easy in C. Look in the Pocket Sockets Guide, as I think they have an example. If not, go pull the SNORT project from sorcefordge and look in SNORT.c. It's nicely commented and shows you how to find all the interfaces you have and get all their IPs.

Ooh, quiz time.

[identity profile] ryanov.livejournal.com 2004-07-08 07:13 am (UTC)(link)
Seems you've already decided that /proc/net is not the way to go (though honestly, seems to me it's a small enough block of code to get the address that you'd want to make it platform specific anyway -- after all, the command line args to external programs are not all the same on different platforms anyway), but you can determine via the routing table pretty easily which interface is the one connected to the gateway (/proc/net/route) and then you will know which interface to be concerned with. < shrug > HTH, and if not, I didn't spend much time on it. ;)