#include #include #include #include #include #include int main() { char iface[] = "eth0"; char ip[] = "192.168.1.3"; IP_SetIP(iface,ip); return 0; } int IP_SetIP(const char* interface, const char * ip_address ) { int sock=0; struct sockaddr_in* addr=NULL; struct ifreq ifr; sock = socket( AF_INET, SOCK_DGRAM, 0 ); if( sock == -1 ) { printf("Can't get a socket!"); return (-1); } memset(&ifr,0,sizeof( struct ifreq ) ); strncpy(ifr.ifr_name,interface,IFNAMSIZ); if( ioctl( sock, SIOCGIFADDR, &ifr ) < 0 ) { printf("Can't get IP '%s' because: '%s'\n",interface,strerror(errno)); } else { if( ioctl( sock, SIOCDIFADDR, &ifr ) < 0 ) { printf("Can't remove '%s' because: '%s'\n",interface,strerror(errno)); } } memset( &ifr, 0, sizeof( struct ifreq ) ); addr= (struct sockaddr_in *)&(ifr.ifr_addr); memset(addr, 0, sizeof( struct sockaddr_in) ); addr->sin_family=AF_INET; addr->sin_addr.s_addr=inet_addr(ip_address); strncpy(ifr.ifr_name,interface,IFNAMSIZ); if( ioctl( sock, SIOCSIFADDR, &ifr ) != 0 ) { printf("Can't fix IP of '%s' with '%s' because '%s'\n", interface,ip_address,strerror(errno)); close(sock); return (-1); } else { printf("IP for '%s' set to'%s'\n",interface,inet_ntoa(addr->sin_addr)); } close(sock); return(0); }