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] schizobovine.livejournal.com 2004-07-06 06:50 am (UTC)(link)
This problem falls under "there is no good solution". Reading from /proc is a Linux-specific thing, making it teh suck if you need to port it to say, Solaris. Reading from ifconfig also sucks. Even parsing from proc is no good, since you need to know the interface ahead of time -- and it's not always eth0...

Two reasonable options come to mind: make a connection to another server you design and figure out the IP address you are connecting from there. Automated, but still might pick the wrong IP if the machine is multi-homed.

Otherwise, make it a command line parameter. If the user screws up, it's a configuration error. =)

[identity profile] falun.livejournal.com 2004-07-06 07:18 am (UTC)(link)
Otherwise, make it a command line parameter. If the user screws up, it's a configuration error. =)

you're a dirty dirty man :p