🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: es.comp.os.linux.programacion
Article #18392

Re: Direccion IP en C y PPP.

#18392
From: Gonzalo Paniagua Javier
Date: Wed, 15 Sep 1999 00:00
80 lines
3304 bytes
Ander <sarratea@mixmail.com> escribi� en es.comp.os.linux.programacion:
> Hola,
> Teniendo el PPP en marcha, como consigo en C la direccion IP asignada por el
> proveedor ?
> Gracias.
> ASarratea @msi.mcc.es

	En algun fichero de log, posiblemente /var/log/messages, te lo dice
en las �ltimas l�neas. Desde el programa podr�as cogerla, pero es m�s
elegante esta otra opci�n.

	Aqu� tienes c�digo para conseguir lo que quieres.

	Lo que hace es:
		-Prepara un socket.
		-Se conecta a un host REMOTO (si lo haces en local,
		posiblemente obtengas como direcci�n local la 127.0.0.1).
		-Obtiene datos del socket, entre los que est� la direcci�n
		local.

/***********************************************************************/
/* Los includes (m�s vale que sobren que no que falten :)
#include <netdb.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/socket.h>
/*
/**	sockfd: descriptor del socket
/**	lenlocal: almacena tama�o de 'localhost'
*/
	int sockfd, lenlocal;
/*
/**	ptr: Al final contiene una cadena con la direcci�n de nuestro host
*/
	char *ptr;
/*
/**	host: direcci�n del host remoto
*/
	struct hostent *host;
/*
/**	para almacenar direcciones en formato de red
*/
 	struct sockaddr_in remote, localhost;
	
	/* Creamos el socket */
    	sockfd = socket (AF_INET, SOCK_STREAM, 0);
    	if (sockfd != -1){
/* Un host que siempre funcione y que no sea el propio */
#define HOSTNAME "ftp.rediris.es"

    		if ((host = gethostbyname(HOSTNAME)) != NULL){
		     remote.sin_family = AF_INET;
		     remote.sin_addr.s_addr = *(long *)host->h_addr;
/* Puerto de ftp */
#define PUERTO_SERVIDOR	21

		     remote.sin_port = htons(PUERTO_SERVIDOR);
			/* Conectamos con el host remoto */
		     if (connect (sockfd, (struct sockaddr *)&remote, sizeof(remote)) == -1){
	    	     	close(sockfd);
	    	     	printf("Error en connect: %s\n", strerror(errno));
	    	     	}
	    	     	else {
				lenlocal = sizeof(localhost);
				/* Obtiene el 'nombre' del socket */
				if (getsockname(sockfd, 
					(struct sockaddr *)&localhost, 
					&lenlocal) <0)
					{
					printf("Error en getsockname.\n");	
					}	    	    		
	    	     		}
		     }
		}
	/* Ahora tenemos en localhost.sin_addr la direcci�n en formato de
	/* red de nuestro ordenador */
	ptr = inet_ntoa(localhost.sin_addr);
	printf("Dir. local: %s\n", ptr);

/**********************************************************************/
Technical Details
Message-ID: <7rooq5$tnf$1@batcher.rediris.es>
Path: arc1-ca.pugleaf.net!unknown!not-for-mail
References: <7rlgo6$lgm$1@batcher.rediris.es>

Show Full Headers
Complete Article Headers
X-Google-Language: SPANISH,ASCII
X-Google-Thread: f86c8,50e1a3e59813ade5
X-Google-Attributes: gidf86c8,public
From: Gonzalo Paniagua Javier <gpanjav@NOSPAM.ribera.tel.uva.QUENOes>
Subject: Re: Direccion IP en C y PPP.
Date: 1999/09/15
Message-ID: <7rooq5$tnf$1@batcher.rediris.es>
X-Deja-AN: 525526892
Distribution: es
Content-Transfer-Encoding: 8bit
References: <7rlgo6$lgm$1@batcher.rediris.es>
Content-Type: text/plain; charset=ISO-8859-1
X-Complaints-To: newsmanager@rediris.es
X-Trace: batcher.rediris.es 937420421 30447 157.88.129.100 (15 Sep 1999 18:33:41 GMT)
Organization: RedIRIS.
Mime-Version: 1.0
User-Agent: tin/pre-1.4-981002 ("Phobia") (UNIX) (SunOS/5.6 (sun4u))
NNTP-Posting-Date: 15 Sep 1999 18:33:41 GMT
Newsgroups: es.comp.os.linux.programacion