Código de C/Visual C - ESNIFFER.

Imágen de perfil

ESNIFFER.gráfica de visualizaciones


C/Visual C

Publicado el 21 de Junio del 2023 por Hilario (122 códigos)
4.307 visualizaciones desde el 21 de Junio del 2023
Amare et sapere vix deo conceditur.
**********************************************************
Hilario Iglesias Martínez.
*********************************************************

Este programa realizado en lenguaje ANSI C, bajo consola en plataforma LINUX Ubuntu 20.04.6 LTS.
******************************************************************************************
Realiza el esnifado de paquetes de la red wifi, detectando previamente el dispositivo de red
y los datos básicos del paquete.

-También puedes saber tus dispositivos de red utilizando el comando bajo consola ifconfig-.

Detecta las características básicas del paquete, y reproduce por consola, la disposición
en exadecimal y en código ASCII.

----------------------------------------------------------------------------------------------------------------------------

Este programa utiliza la biblioteca libpcap para capturar paquetes de red en tiempo real.
Por lo tanto deberás tenerla instalada en el sistema.

Instala libpcap ejecutando el siguiente comando:
sudo apt install libpcap-dev
Una vez que la instalación se haya completado, puedes verificar que libpcap esté instalado correctamente ejecutando el siguiente comando:
pcap-config --version

--------------------------------------------------------
Conpilar el programa con este comando.
gcc -Werror programa.c -o programa -lpcap

Ejecutar el programa con este comando.
sudo ./programa

Como se ve hay que utilizar sudo para su ejecución
ya que es necesario tener privilegios de root
**********************************************

Requerimientos

Este programa realizado en lenguaje ANSI C,
bajo consola en plataforma LINUX Ubuntu 20.04.6 LTS.
Se utilizó como IDE Sublime Text.

V-1

Actualizado el 1 de Agosto del 2023 (Publicado el 21 de Junio del 2023)gráfica de visualizaciones de la versión: V-1
4.308 visualizaciones desde el 21 de Junio del 2023
estrellaestrellaestrellaestrellaestrella
estrellaestrellaestrellaestrella
estrellaestrellaestrella
estrellaestrella
estrella

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
/*
Conpilar el programa con este comando.
gcc -Werror programa.c -o programa -lpcap
Ejecutar el programa con este comando.
sudo ./programa
Como se ve hay que utilizar sudo para su ejecución
ya que es necesario tener privilegios de root
*/
 
 
#include <stdio.h>
#include <pcap.h>
#include <netinet/ip.h>
#include <netinet/tcp.h>
#include <netinet/udp.h>
#include <netinet/if_ether.h>
#include <net/ethernet.h>
#include <time.h>
#include <ctype.h>
 
void packet_handler(u_char *userData, const struct pcap_pkthdr* pkthdr, const u_char* packet) {
    struct ethhdr *ethHeader = (struct ethhdr *)packet;
    struct ip *ipHeader = (struct ip *)(packet + sizeof(struct ethhdr));
    struct tcphdr *tcpHeader = (struct tcphdr *)(packet + sizeof(struct ethhdr) + sizeof(struct ip));
 
    printf("La IP de origen: %s\n", inet_ntoa(ipHeader->ip_src));
    printf("La IP de destino: %s\n", inet_ntoa(ipHeader->ip_dst));
    printf("Longitud del paquete: %d\n", pkthdr->len);
    printf("Time del paquete: %s", ctime((const time_t *)&pkthdr->ts.tv_sec));
    printf("Ethernet Tipo: %d\n", ntohs(ethHeader->h_proto));
    printf("Puerto de origen: %d\n", ntohs(tcpHeader->source));
    printf("Puerto de destino: %d\n", ntohs(tcpHeader->dest));
    printf("------------------------------------------------------\n");
 
    // Mostrar el paquete en formato digital
    printf("Paquete (Exadecimal):\n");
    for (int i = 0; i < pkthdr->len; i++) {
        printf("%02X ", packet[i]);
        if ((i + 1) % 16 == 0) {
            printf("\n");
        }
    }
    printf("\n");
 
    // Mostrar el paquete en formato ASCII
    printf("Paquete (ASCII):\n");
    for (int i = 0; i < pkthdr->len; i++) {
        if (isprint(packet[i])) {
            printf("%c ", packet[i]);
        } else {
            printf(". ");
        }
        if ((i + 1) % 16 == 0) {
            printf("\n");
        }
    }
    printf("\n");
    printf("------------------------------------------------------\n");
    printf("\n");
}
 
int main() {
    pcap_t *handle;
    char errbuf[PCAP_ERRBUF_SIZE];
    struct pcap_pkthdr header;
    struct pcap_if *devices;
    struct pcap_if *dev;
 
    if (pcap_findalldevs(&devices, errbuf) == -1) {
        printf("Error buscando dispositivos: %s\n", errbuf);
        return 1;
    }
 
    dev = devices;
 
    handle = pcap_open_live(dev->name, BUFSIZ, 1, 1000, errbuf);
    if (handle == NULL) {
        printf("Error abriendo dispositivo %s: %s\n", dev->name, errbuf);
        return 1;
    }
 
    printf("Dispositivo capturado: %s\n", dev->name);
 
    pcap_loop(handle, -1, packet_handler, NULL);
 
    pcap_freealldevs(devices);
    pcap_close(handle);
 
    return 0;
}



Comentarios sobre la versión: V-1 (0)


No hay comentarios
 

Comentar la versión: V-1

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad

http://lwp-l.com/s7383