After many years of doing maintenance work on various UNIX network daemons, I have gradually grown to believe that we do not have "reliable cross-platform methods of performing interface discovery", neither for Perl nor for C. In the case of Linux, the standard way was to parse /proc/net/dev
(it is not that hard, even with C), even though recent libcs provide the if_nameindex
API. For *BSD, coders usually rolled their own if_nameindex
implementation, because the BSD libc does not seem to porvide the API (at least, back those days when the daemons were written, this was the case).
Note that I do not want to foster these programming practices. I just want to stress that this paticular problem is really hard to solve in a cross-platform-way...