#include <windows.h>
#include <ras.h>
#include <stdio.h>
bool DialUp(char EntryName[],char UserName[],char Password[]);
bool DialDown(char EntryName[]);
bool DialExist(char EntryName[]);
bool IP_Entrada(char *IP,char EntryName[]);
void route(char IP[],char Rango[],char Mask[]);
int main(int argc, char* argv[])
{
if (argv[1] != NULL && argv[2] != NULL && argc == 3)
{
if(strcmpi(argv[1],"-d") == 0)
{
if(DialDown(argv[2]) == 0)
{
printf("Desconexion de %s con exito\n",argv[2]);
exit(0);
}
else
{
printf("%s no esta activa\n",argv[2]);
exit(1);
}
}
else
{
printf("Error Parametros\n");
exit(1);
}
}
if (argv[1] != NULL && argv[2] != NULL && argv[3] != NULL && argv[4] != NULL && argv[5] != NULL)
{
if(DialExist(argv[1]) == 1)
{
if(DialUp(argv[1],argv[2],argv[3]) == true)
{
printf("Conexion a %s ralizada con exito\n",argv[1]);
char ip[16];
if(IP_Entrada(ip,argv[1]) == 0)
{
route(ip,argv[4],argv[5]);
printf("Fin del comando con exito\n");
exit(0);
}
printf("No ha sido posible obtener la IP de %s\n",argv[1]);
exit(1);
}
exit(1);
}
printf("Conexion %s ya existe\n",argv[1]);
char ip[16];
if(IP_Entrada(ip,argv[1]) == 0)
{
route(ip,argv[4],argv[5]);
printf("Fin del comando con exito\n");
exit(0);
}
printf("No ha sido posible obtener la IP de %s\n",argv[1]);
exit(1);
}
else
{
printf("Error Parametros\n");
exit(1);
}
}
//Funciones;
//Funcion DialUp: Realiza una conexion usando los siguientes parametros;
//Nonbre de entrada de conecxiones, Usuario y Password
bool DialUp(char EntryName[],char UserName[],char Password[])
{
// Fill RASDIALPARAMS structure
RASDIALPARAMS rdParams;
rdParams.dwSize = sizeof(RASDIALPARAMS);
rdParams.szEntryName[0] = '\0';
//lstrcpy(rdParams.szPhoneNumber,szPhoneNumberToDial);
rdParams.szCallbackNumber[0] = '\0';
lstrcpy(rdParams.szEntryName,EntryName);
lstrcpy(rdParams.szUserName,UserName);
lstrcpy(rdParams.szPassword,Password);
rdParams.szDomain[0] = '\0';
HRASCONN hRasConn = NULL;
printf("Conectando con %s...\n",EntryName);
DWORD dwRet = RasDial(NULL,NULL,&rdParams,0L,NULL,&hRasConn);
// Everything OK?
if(dwRet == 0)
return true;
// Error occurred - get error description and alert user
char szBuf[256];
if(RasGetErrorString((UINT)dwRet,(LPSTR)szBuf,256) != 0)
wsprintf((LPSTR)szBuf,"Error: (%ld) Desconocido", dwRet );
RasHangUp(hRasConn);
printf("Error: %s",szBuf);
return false;
}
//Funcion DialDown: Se encarga de desconectar una entrda pasada por parametro
bool DialDown(char EntryName[])
{
RASCONN ras[20];
DWORD dSize,dNumber;
ras[0].dwSize = sizeof(RASCONN);
dSize = sizeof(ras);
if(RasEnumConnections(ras,&dSize,&dNumber) == 0)
{
DWORD x;
for(x=0;x<dNumber;x++)
{
if(strcmpi(ras
- .szEntryName,EntryName) == 0)
{
if(RasHangUp(ras
return(0);
else
return(1);
}
}
return(1);
}
else
return 1;
}
//Funcion DialExist: Comprueba si esta activa la entrada pasada por parametro
bool DialExist(char EntryName[])
{
RASCONN ras[20];
DWORD dSize,dNumber;
ras[0].dwSize = sizeof(RASCONN);
dSize = sizeof(ras);
if(RasEnumConnections(ras,&dSize,&dNumber) == 0)
{
DWORD x;
for(x=0;x<dNumber;x++)
{
if(strcmpi(ras
- .szEntryName,EntryName) == 0)
return(0);
}
}
return 1;
}
//Funcion IP_Entrada: Devuelve la IP que ha asignado a la entrada
bool IP_Entrada(char *IP,char EntryName[])
{
RASCONN ras[20];
DWORD dSize,dNumber;
ras[0].dwSize = sizeof(RASCONN);
dSize = sizeof(ras);
if(RasEnumConnections(ras,&dSize,&dNumber) == 0)
{
DWORD x;
for(x=0;x<dNumber;x++)
{
if(strcmpi(ras
- .szEntryName,EntryName) == 0)
{
RASPPPIP rip;
rip.dwSize = sizeof(RASPPPIP);
DWORD cb = sizeof(rip);
if (!RasGetProjectionInfo(ras
- .hrasconn,RASP_PppIp,(LPVOID)&rip,&cb))
strcpy(IP,rip.szIpAddress);//printf("IP asignada %s\n",rip.szIpAddress);
return 0;
}
}
}
return 1;
}
//Funcion route: Enruta un rango de IP con su respectiva mascara por la IP que le hemos pasado
void route(char IP[],char Rango[],char Mask[])
{
char route[360]="Route add ";
strcat(route,Rango);
strcat(route," MASK ");
strcat(route,Mask);
strcat(route," ");
strcat(route,IP);
puts(route);
system(route);
}
---------------------------
Los