Just gimme the IP!

Scott Kitterman ubuntu at kitterman.com
Tue Jun 14 02:06:19 UTC 2011

On Monday, June 13, 2011 09:58:21 PM Dustin Kirkland wrote:
> Howdy ubuntu-devel!
> I'm seeing quite a bit of code duplication in scripts and packaging in
> Ubuntu around the determination of IP addresses.
> Most are permutations of 'ifconfig' or 'ip addr', and four to six
> pipes through awk, grep, sed, and/or cut.  Some others dig through
> /proc.  Some are buggy (ie, more than one ip address on the system,
> foreign locale but does not set LC_ALL=C, etc).  Many of them do their
> job well enough, but I can't help but think there's some room for
> improvement.
> Here are a few I've found in some server packages:
>   IP=`ifconfig  | grep 'inet addr:'| grep -v '' | cut -d: -f2
> | awk '{ print $1}'|head -n 1`
>   MYIP=$(ifconfig eth0 | grep "inet addr" | awk -F":" '{print $2}' |
> awk '{print $1}')
>   addr_withprefix=$(ip addr show label $default_interface scope global
> | awk '$1 == "inet" { print $2 }' | sed "s:/.*::")
> In the interest of consistency, I'm wondering if it would make sense
> to create and maintain a stable, definitive utility somewhere in
> Ubuntu's default seed to provide the system's ip address,
> *succinctly*, quickly, and reliably.
> I'd think it should:
>  a) default to ipv4, but support a -6|--ipv6 option
>  b) default to the interface providing the default route, but support
> an optional interface parameter
>  c) be very, very fast (ie, I looked at facter, but it's pretty slow)
> I have what I think is a decent working implementation of the above at:
>  * http://people.canonical.com/~kirkland/ipaddr
> $ ipaddr
> $ ipaddr virbr0
> $ time ./ipaddr tap0
> real    0m0.011s
> What do you think?  Have you seen scripts or packaging in Ubuntu that
> would benefit from a solid, recommended ip determination utility?
> Where should it live?  net-tools?  iproute?  Somewhere else?

I'm not sure where it should live, but I think it should have a different name 
as it's not a generic IP address utility, but one for a single specific 
purpose.  Maybe sysip?

Scott K

More information about the ubuntu-devel mailing list