manatane En vous remerciant, bonsoir | sous linux on peut utiliser un appel ioctl (SIOCGIFADDR)
Code :
- // choppe_ip eth0 par exemple, ce qui renvoie "IP Adress of 'eth0' is '192.168.1.10'" sur ma babasse
- #include <stdio.h>
- #include <errno.h>
- #include <string.h>
- #include <unistd.h>
- #include <sys/types.h>
- #include <sys/socket.h>
- #include <sys/types.h>
- #include <netinet/in.h>
- #include <arpa/inet.h>
- #include <sys/ioctl.h>
- #include <net/if.h> // struct ifreq
- int get_my_extern_ip(const char * interface) {
- int test_sock=0;
- struct sockaddr_in *addrp = NULL;
- struct ifreq ifr;
- test_sock = socket( PF_INET, SOCK_DGRAM, 0 );
- if( test_sock == -1 ) {
- fprintf( stderr, "Cannot obtain socket :%s\n",strerror(errno));
- return -1;
- }
- memset( &ifr, 0, sizeof( struct ifreq ) );
- strncpy( ifr.ifr_name, interface, IFNAMSIZ);
- // on obtient l'adresse de l'adresse l'interface via SIOCGIADDR
- if( ioctl( test_sock, SIOCGIFADDR, &ifr ) == -1 ) {
- fprintf( stderr, "Cannot obtain IP address of '%s': %s\n",interface,strerror(errno));
- close(test_sock);
- return -1;
- }
- close(test_sock);
- addrp = (struct sockaddr_in *)&(ifr.ifr_addr);
- fprintf(stdout, "IP Adress of '%s' is '%s'\n",interface,inet_ntoa(addrp->sin_addr));
- return 0;
- }
- int main( int argc, char ** argv ) {
- get_my_extern_ip( argv[1] );
- return 0;
- }
|
|