Script batch para ping

Iniciado por terrateck, 18 Junio 2013, 18:43 PM

0 Miembros y 1 Visitante están viendo este tema.

engel lex

no quiero criticas sobre mi codigo XD lo hice rapido y a los golpes

Código (cpp) [Seleccionar]

#include <Windows.h>
#include <iostream>
#include <string>
#include <ctime>
#include <fstream>
using namespace std;
//aqui la funcion del pipe
string exec(char* cmd) {
    FILE* pipe = popen(cmd, "r");
    if (!pipe) return "ERROR";
    char buffer[128];
    std::string result = "";
    while(!feof(pipe)) {
    if(fgets(buffer, 128, pipe) != NULL)
    result += buffer;
    }
    pclose(pipe);
    return result;
}



int main(int argc, char *argv[])
{
    int tiempo = 1;
    if(argc==3){
        tiempo = atoi(argv[2]);//no captura el "-t" porque en realidad es relleno
    }
   string a = "";
   
   int b = 0, c = 0;
   char bufer[80];
   time_t rawtime;
   
   struct tm * timeinfo;
//saca la direccion del exe, la recorta y le pone ping.txt
   string path =argv[0];
   b = path.find_last_of("/");
   path = path.substr(0,b)+ "/ping.txt";
   const char *sb = path.c_str() ;
   
       
    ofstream myfile;
     while(1){
        a = exec("ping www.google.com -n 1");//abre la llamada
        myfile.open (sb,ios::out|ios::app);
        //captura la hora
        time(&rawtime);
        timeinfo=localtime(&rawtime);
        strftime (bufer,80,"%F %I:%M%p.",timeinfo);
        //arregla el mensaje a mostrar
        b = (INT) a.find_first_of("\n")+1;
        b = (INT) a.find_first_of("\n",b)+1;
        c = (INT) a.find_first_of("\n",b);
        a = a.substr(b,c-b);
        cout << bufer << " - " << a << "\n";//muestra
        myfile << bufer << " - " << a << "\n";//envia a archivo
        myfile.close();//cierra por si el programa tiene un fin inesperado en la espera
        sleep(tiempo);//espera
        }
       return 0;
       
}


recomiendo recompilar XD el anterior codigo tiene un error XD solo hace un ping y dice el mimo resultado siempre! sorry!
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

Eleкtro

@EngelX
La intención es de agradecer, pero te recuerdo que estamos en la sección de Scripting, no en C.

Saludos!








Eleкtro

#12
Aquí tienes mi solución, es muy sencillo:

Código (dos) [Seleccionar]
@echo off

Set "URL=www.google.es"
Set "Interval=5" & REM Segundos
set "LogFile=.\Ping.txt"

:PingMe
Set /A "Count+=1"
Echo [+] Haciendo Ping [%Count%]

(
ping "%URL%" | FINDSTR "perdidos.=.0$"
) || (
Echo Paquetes perdidos.
Echo %DATE% %TIME% >> "%LogFile%"
)  

Ping "LOCALHOST" -n "%Interval%" 1>NUL | MORE
GoTo :PingMe



Output:
[+] Haciendo Ping [1]
   Paquetes: enviados = 4, recibidos = 4, perdidos = 0

[+] Haciendo Ping [2]
   Paquetes: enviados = 4, recibidos = 4, perdidos = 0

[+] Haciendo Ping [3]
Paquetes perdidos.


Saludos!








terrateck


engel lex

Cita de: EleKtro H@cker en 19 Junio 2013, 20:47 PM
@EngelX
La intención es de agradecer, pero te recuerdo que estamos en la sección de Scripting, no en C.

Saludos!
lo se XD solo respondia la peticion de terratek XD

CitarGracias engelx. También había pensado hacerlo en C que lo controlo más pero al no ser demasiado complejo pensé que no merecía la pena y esto sería más rápido. De todas formas sería interesante ver como lo implementaste, ¿no tendrás el código por ahí para echarle un vistazo?

disculpa si desvié el tema :P
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.