Hyper program es una aplicación que nos permitirá programar de una forma sencilla en lenguaje C. Permite que te enfoques en el desarrollo de tu código y tener el código organizado. Permite que emplees el mínimo código para lograr tus resultados al integrar la haylemapi que es una librería de mi autoría con funciones diversas que siempre has deseado existan en tu lengiaje favorito. Puedes aislar el apihack para crear una librería de enlace dinámico o estático y poder hacer un framework en otro lenguaje como java o python, es totalmente legal puesto que todo el software es libre y estable.
La haylem api está orientada a la acción o funciones permitiéndote concentrarte realmente en el funcionamiento de tu aplicación en vez de confundirte con la interacción entre objetos y ayudándote a entender tu código a lo largo de los años.
Enlace directo paquete debian9 requiere gcc instalado para poder compilar:
haylemapi (api ligera con funciones C muy interesantes). Para usarla copie los dos archivitos .h en el directorio de su codigo fuente e incluya:
#include «fun.h»
#include «haylemapi.h»
en su programa, debe agregar la opcion -pthread a su gcc.
El código fuente se encontrará en /usr/src/hyperprogram.
cuando guarde su proyecto se hará en la carpeta personal/hyperprogram-proyectos/ que contendra la carpeta de su proyecto junto al compilado y por supuesto el haylemapi.
Aquí un resumen de las funciones implementadas hasta el momento en la haylemapi para los curiosos:
/*
Esta api es software libre con licencia GPLv2 o superior.
Creada por Haylem Candelario Bauza.
*/
#define PROCESOMATADO 0
#define PROCESONOMATADO 256
#define SSHNOCOMERROR 0
#define NOHAYIP «NOHAYIP»
#define NOHAYMAC «NOHAYMAC»
#define NOHAYPASARELA «NOHAYPASARELA»
#define PAR 1
#define NOPAR 0
#define DIOPING 0
#define PINGINTERRUMPIDO 2
#define PINGHOSTNODISPONIBLE 1
#define PI 3.14159
#define HAYINTERNET 1
#define NOHAYINTERNET 0
#define ESTAASOCIADO «ESTAASOCIADO»
#define NOESTAASOCIADO «NOESTAASOCIADO»
#define PINGNORMAL 0
#define PINGFLOOD 1
#define TARJETAREDAPAGADA 1
#define TARJETAREDENCENDIDA 0
#define ERRORCAPTURA 1
#define FRAGAUTO «auto»
#define RTSAUTO «auto»
#define TXPOWERAUTO «auto»
#define DNSARCHPREDET «/etc/resolv.conf»
#define NOMACVICTIMA «NO_MAC_VICTIMA»
#define NOMACFUENTE «NO_MAC_FUENTE»
#define NOIPVICTIMA «NO_IP_VICTIMA»
#define NOBSSIDVICTIMA «NO_BSSID_VICTIMA»
#define TMPCARPETA «/tmp»
#define ARCHCAP «captrout»
#define REPITE_ESTO 1
#define ARCHIVONOCARGADO «ARCHIVO_NO_CARGADO»
#define SONIGUALES 0
#define TRAFICOSINSSID 0
#define TRAFICOCONSSID 1
#define CLS «clear»
#define MTU «1500»
#define RATE «11M»
#define FRAG «off»
#define RTS «off»
#define MAXCONT 200 /* Maximo limite del contador de reintentos fallidos */
#define NOBSSIDLOCAL «NO_ANCLADO_A_NINGUN_BSSID»
#ifndef PROTOTIPOS_H
#define PROTOTIPOS_H
/* Variable uso interno */
char _interface[80] = {‘\0’};
char _bssid[80] = {‘\0’};
char _ssid[80] = {‘\0’};
char _gw[80] = {‘\0’};
char _ip[80] = {‘\0’};
unsigned long int _seg = 0;
/* Ejecutar un comando o programa despues de pasar unos segundos */
void ejecutardespuesdeseg(void *proceso, unsigned long int seg);
/* Asociar a wifi con iw de forma en modo roaming y actualiza _essid */
void asociarawifiauto(const char *interfacered, const char *ssid);
/* Asociar mediante iw anclando a la vez el router */
void asociaranclawifi(const char *interfacered, const char *ssid, const char *bssid);
/* Hace sync o sincroniza discos del sistema para liberar cargas */
void sincronizardiscos(void);
/* Define la mascara de red de la tarjeta ej 255.255.255.0 */
void ponermascarared(const char *interfacered, const char *mascara);
/* Agrega datos a un archivo, se crea si no existe */
void file_save_data(const char *filename, const char *data);
/* Copiar archivo de un lugar a otro */
void * sys_copy_file(const char *orig, const char *dest);
/* Desabilita ipv6 en el sistema para que todo valla a ipv4 */
void sys_disable_ipv6(void);
/* Habilita ipv6 en el sistema para que todo valla a ipv4 */
void sys_enable_ipv6(void);
/* Definir regulacion de pais para la wifi ej US, puede usar tambien ES, UK, etc */
void sys_wifi_set_country(const char *country);
/* Activa la baja latencia en redes tcp */
void sys_tcp_low_latency(void);
/* Desactiva la baja latencia en redes tcp */
void sys_tcp_high_latency(void);
/* Borrar la pantalla */
void limpiapantalla(void);
/* Generar paquetes ICMP y mantener bucle mientras haya INTERNET con modo TRAFICOCONSSID o no TRAFICOSINSSID */
void generartraficored(const char *interfacered, const char *essid, unsigned short int modo);
/* Ejecutar un proceso en un hilo separado por un tiempo determinado, luego se mata con killall */
/* Debe tener a killall disponible en su sistema */
void ejecutaprochilotiempo(void *orden , unsigned long int tiempo);
/* Matar un proceso con killall en vez de pkill pues pkill mata todos los procesos que contienen parte del nombre */
void killallproceso(const char *proceso);
/* Restaura el terminal para liberarlo de caracteres raros y bloqueos */
void restaurarterminal(void);
/* Ejecutar una funcion de usuario en un hilo separado y esperar por el */
/*
Ejemplo de uso de funcion de usuario:
void* abrexterm(void *x)
{
system(«xterm»);
}
ejecutahilofuncjoined(abrexterm);
*/
void ejecutahilofuncjoined(void *(*func) (void *));
/* Ejecutar una funcion de usuario en un hilo separado y continuar la ejecucion del programa */
/* Asegurese de poner un retardo luego de esta funcion si el programa sale rapido para dar tiempo se ejecute la funcion completa */
void ejecutahilofuncindepend(void *(*func) (void *));
/* Obtener la mac fuente de la victima del archivo de captura despues de usar tcpdumpcaptrafport */
const char *obtienemacfuentecap(const char *carpetacap, const char *archivocapt);
/* Obtener la mac del bssid de la victima del archivo de captura despues de usar tcpdumpcaptrafport */
const char *obtienebssidvictimacap(const char *carpetacap, const char *archivocapt);
/* Obtener la mac de la victima del archivo de captura despues de usar tcpdumpcaptrafport si no encuentra devuelve entero NOMACVICTIMA */
const char *obtienemacvictimacap(const char *carpetacap, const char *archivocapt);
/* Obtener la ip de la victima del archivo de captura despues de usar tcpdumpcaptrafport */
const char *obtieneipvictimacap(const char *carpetacap, const char *archivocapt);
/* Cargar un archivo de 16MB maximo y devuelve el contenido como un puntero const char * */
const char * cargararchivo(const char *carpeta, const char *nombrearchivo);
/* Imprime la tabla de conversion de fahrenheit a celsius */
void imprimirtablagradosfc(int limitebajo, int limitealto, int incremento);
/* Convierte de grados fahrenheit a celsius */
float conviertefahrcelsius(float tempf);
/* Calcula la velocidad en movimiento mru */
float calculavelmru(float distancia, float tiempo);
/* Calcula distancia recorrida mru */
float calculadistmru(float velocidad, float tiempo);
/* Calcula tiempo de demora movimiento mru */
float calculatiempomru(float distancia, float velocidad);
/* Para un servicio del sistema ej network-manager */
void pararservicio(const char *servicio);
/* Inicia un servicio del sistema ej network-manager */
void iniciarservicio(const char *servicio);
/* Mata un proceso con pkill, devuelve codigo de error pkill PROCESONOMATADO */
int matarproceso(const char *nombreproceso);
/* Ejecuta una orden en una pc remota via ssh, si no hay error devuelve SSHNOCOMERROR */
int ejecutarcomremotssh(const char *comando, const char *usuario, const char *ipremota);
/* Devuelve la ip de la red o NOHAYIP */
const char * obteneriplocal(const char *interfacered);
/* Veririca si un numero es par o inpar */
long int espar(long int num);
/* Devuelve el codigo ascii de un caracter */
unsigned short int asctocod(const char car);
/* Imprime la primera potencia de x superior a y */
long int imprprimpotxsupy(long int x, long int y);
/* Calcula voltaje en R dado el voltaje de la fuente VF y el de la carga C */
float voltenrdesdecarga(float voltfuente, float voltcarga);
/* Calcula la resistencia serie necesaria para limitar el voltaje(Volt)/corriente(Amperes) de la carga */
float resistlimcarga(float voltfuente, float voltcarga, float intenscarga);
/* Eleva x al cuadrado */
double alcuadrado(double x);
/* Eleva x al cubo */
double alcubo(double x);
/* Calcula porciento de un numero */
long int porcientodenum(float num, float maximo);
/* Dar ping a un host ej google.com o 192.160.1.2 */
short int darping(const char *host, unsigned int cantidad, unsigned int seg);
/* Verifica si hay internet y si hay devuelve HAYINTERNET */
unsigned short int verificainternet(const char *host);
/* Obtener la mac local */
const char *obtenermaclocal(const char *interfacered);
/* Obtener la pasarela actual */
const char *obtenerpasarela(const char *interfacered);
/* Verifica si esta asociado a una wifi y devuelve ESTAASOCIADO o NOESTAASOCIADO */
const char *estaasociado(const char *interfacered);
/* Esperar un tiempo en segundos antes de continuar la siguiente orden*/
void retardoenseg(unsigned long int seg);
/* Definir el canal wifi a donde unicamente se asocia la antena */
void anclarcanalwifi(const char *interfacered, const char *canal);
/* Hacer ping a un host de forma natural de tipo PINGFLOOD o PINGNORMAL */
void pingcompleto(const char *host, unsigned short int flood);
/* Definir el rate de la wifi */
void defineratewifi(const char *interfacered, const char *rate);
/* Definir limite de reintentos wifi */
void defretrylim(const char *interfacered, const char *retry);
/* Devuelve si la tarjeta de red esta apagada(TARJETAREDAPAGADA) o encendida(TARJETAREDENCENDIDA) */
unsigned short int tarjetaredapagada(const char *interfacered);
/* Ejecutar un proceso aislado en un tiempo durante un tiempo en segundos */
/* Ej
char *args[] = {«xterm», «-bg», «red», «-fg», «yellow», NULL};
exectimeout(args , 3);
*/
void exectimeout(char *args[] , unsigned long int seg);
/* Poner tarjeta de red wifi en modo managed */
void ponermodowifimanaged(const char *interfacered);
/* Activa la tarjeta de red */
void activatarjetared(const char *interfacered);
/* Desactia la tarjeta de red */
void desactivatarjetared(const char *interfacered);
/* Desactivar el modo monitor de la wifi de forma sencilla y rapida */
void wifimonitoroff(const char *interfacered);
/* captura un paquete de la red que este navegando por un puerto si no se puede capturar devuelve ERRORCAPTURA */
/* Ej tcpdumpcaptrafport(«wlan0», «10.240», «443», «10.240.0.1») */
unsigned short int tcpdumpcaptrafport(const char *interfacered, const char *rangored, const char *puertocap, const char *pasarela);
/* Liberar la ip de la tarjeta de red especificada */
void liberaiplocal(const char *interfacered);
/* Desactiva el powersave de la wifi */
void nopowersavewifi(const char *interfacered);
/* Anclar la mac del router remoto a la wifi */
void iwconfig_fijarbssidap(const char *interfacered, const char *bssid);
/* Definir umbral RTS de la wifi puede poner «auto» para automatico o bien RTSAUTO */
void iwconfig_fijarts(const char *interfacered, const char *rts);
/* Definir umbral FRAG de la wifi puede poner «auto» para automatico o bien FRAGAUTO */
void iwconfig_fijafrag(const char *interfacered, const char *rts);
/* Definir la potencia wifi ejemplos: 30 para 30dbm o auto puede usar TXPOWERAUTO */
void definetxpowerwifi(const char *interfacered, const char *potencia);
/* Definir mac local de la red */
void definemac(const char *interfacered, const char *mac);
/* Definir la ip local */
void defineip(const char *interfacered, const char *ip);
/* Definir la pasarela de la red en un dispositivo de red */
void definepasarela(const char *interfacered, const char *pasarela);
/* Definir el mtu de red con ifconfig */
void ifconfig_definemtu(const char *interfacered, const char *mtu);
/* Definir el mtu */
void definemtu(const char *interfacered, const char *mtu);
/* Iniciar el network-manager */
void startnmanager(void);
/* Parar el network-manager */
void stopnmanager(void);
/* Devuelve una lista que contiene los dns actuales del /etc/resolv.conf */
/*
ejemplo de uso
const char **dns;
int y = 0;
dns = obtenerdnslist();
while(dns[y] != NULL)
puts(dns[y++]);
*/
const char **obtenerdnslist(void);
/* Asociarse a una wifi solamente */
void asociarawifi(const char *interfacered, const char *essid);
/* Desasociarse de la wifi */
void desasociarawifi(const char *interfacered);
/* Limpiar el archivo de dns */
/* ej limpiadnsfile(«/etc/resolv.conf») */
void limpiadnsfile(const char *rutaresolvconf);
/* Vaciar un archivo */
void vaciarchivo(const char *rutarchivo);
/* Crea un archivo vacio si no existe y si existe lo reemplaza */
void creararchivovacio(const char *rutaresolvconf);
/* Agrega un dns al archivo de dns del sistema puede usar DNSARCHPREDET como ruta si usa /etc/resolv.conf */
void agregardns(const char *rutaresolvconf , const char *dns);
/* manera facil de llamar a pkill */
void sys_pkill(const char *process);
#endif