Article View: es.comp.os.linux.programacion
Article #18392Re: Direccion IP en C y PPP.
From: Gonzalo Paniagua Javier
Date: Wed, 15 Sep 1999 00:00
Date: Wed, 15 Sep 1999 00:00
80 lines
3304 bytes
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-mailReferences:
<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