I used the following program to obtain mac address and ip of network adpaters. It works fine with 1.5 but not with 1.7.
Output with 1.5: sock=3 trying eth0 mac: 00.1f.3c.57.XX.XX, ip: XXX.XXX.XXX.XXX trying eth1 mac: 00.1d.09.df.XX.XX, ip: XXX.XXX.XXX.XXX trying eth2 mac: 08.00.27.00.XX.XX, ip: XXX.XXX.XXX.XXX trying eth3 ... Output with 1.7: sock=3 trying eth0 trying eth1 trying eth2 trying eth3 ... Any clue? Frédéric #include <iostream> #include <iomanip> #include <netdb.h> #include <sys/ioctl.h> #include <net/if.h> void read_hwaddr(const struct ifreq &ifr) { std::cout << "mac: " ; const struct sockaddr &hwaddr=ifr.ifr_hwaddr ; for (size_t k=0 ; k<6 ; ++k) { if (k) std::cout << '.' ; unsigned int v=static_cast<unsigned char>(hwaddr.sa_data[k]) ; std::cout << std::hex << std::setw(2) << std::setfill('0') << static_cast<int>(v) ; } } void read_ip(const struct ifreq &ifr) { std::cout << "ip: " ; const struct sockaddr &addr=ifr.ifr_addr ; for (size_t k=0 ; k<4 ; ++k) { unsigned int v=static_cast<unsigned char>(addr.sa_data[k+2]) ; if (k) std::cout << '.' ; std::cout << std::dec << static_cast<int>(v) ; } } int main() { std::string eth("eth") ; struct protoent *proto=NULL ; if (proto=getprotobyname("tcp")) { int sock=socket(PF_INET, SOCK_STREAM, proto->p_proto) ; std::cout << "sock=" << sock << '\n' ; struct ifreq ifr ; for (char k='0' ; k<='9' ; ++k) { std::cout << "trying " << (eth+k) << '\n' ; std::memset(&ifr, 0, sizeof(struct ifreq)) ; std::strcpy(ifr.ifr_name, (eth+k).c_str()) ; // MAC address if (ioctl(sock, SIOCGIFHWADDR, &ifr)!=0) continue ; read_hwaddr(ifr) ; std::cout << ", " ; // IP address if (ioctl(sock, SIOCGIFADDR, &ifr)==0) read_ip(ifr) ; std::cout << '\n' ; } close(sock) ; } return 0 ; } -- Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple Problem reports: http://cygwin.com/problems.html Documentation: http://cygwin.com/docs.html FAQ: http://cygwin.com/faq/