Anunţ

Caută printre mesajele de pe forum înainte de a scrie unul nou!
Formulează corect întrebarea sau problema pe care o ai.
Respectă regulile forumului și Codul de Conduită!

Sondaj

Cum ți se pare această idee?


Extraordinară

0% - 0
Foarte bună

0% - 0
Bună

50% - 2
Fără importanță

25% - 1
Rea

25% - 1
Participanți: 4

#1 12 Dec 2015 23:02:17

mesaros.ronel
Membru nou
Înregistrat: 12 Dec 2015
Mesaje: 4

Creare program Shell pentru chat

Este vorba despre un simplu program care permite comunicarea cu un alt utilizator prin intermediul terminalului si a unor comenzi. Nu este nevoie de utilizator si parola, ci ar putea funcționa cu ajutorul Ip-ului. De ex. run shellbox /connection 55.2_1.42 -aliasmode
Mesajul ar putea fi codificat si decodat cu ajutorul unei linii de cod, iar programul si mesajul sa nu fie detectat de firewall, doar lansezi terminalul si tastezi comanda pentru a te conecta la chatul prietenului.

Editat ultima oară de mesaros.ronel (12 Dec 2015 23:12:03)

Offline

 

#2 12 Dec 2015 23:22:26

Anca_Emanuel
Membru
Înregistrat: 28 Jan 2011
Mesaje: 1759

Re: Creare program Shell pentru chat

Vreau să văd un demo înainte de a vota.
https://asciinema.org

Alte soluții https://www.reddit.com/r/golang/comment … ver_in_go/
http://www.gopl.io , capitolul 8, pagina 253 chat server.

Offline

 

#3 13 Dec 2015 13:51:15

Alexandru.Cucu
Administrator
Locaţie: -21.8021247, -154.6975949
Înregistrat: 17 Jun 2008
Mesaje: 6960
Site web

Re: Creare program Shell pentru chat

Reinventezi roata? smile

Pe vremuri, cand IRC-ul (https://en.wikipedia.org/wiki/Internet_Relay_Chat) era foarte popular, foloseam "direct client to client" (https://en.wikipedia.org/wiki/Direct_Client-to-Client) pentru a comunica direct cu cineva, fara a mai trimite mesajele prin server. Legatura, adica schimbul de adresa IP si port se facea prin IRC, restul era direct.

Pe ideea asta se transferau si fisiere. Poate ati auzit de DC++ (https://en.wikipedia.org/wiki/DC%2B%2B) ?? Functioneaza similar smile

Au aparut implementari cu criptare cu tot, deci cam ce vrei tu sa faci smile

Clienti de IRC in linia de comanda:
irssi
weechat
bitchx
ii
quasel

Si poate mai sunt cateva zeci tongue
Foarte tare e Finch pentru ca se poate conecta la tot ce poate si Pidgin (ambele folosesc libpurple).

----

O implementare simpla de chat direct, din shell, se poate face cu netcat.
http://linoxide.com/tools/simple-chat-netcat-linux/
https://hak5.org/episodes/haktip-82

Daca vrei sa adaugi criptare, te ajuta OpenSSL.
Am gasit din prima un one-liner care face asta: http://www.commandlinefu.com/commands/v … -one-liner

Offline

 

#4 13 Dec 2015 14:54:04

geosoft1
Membru
Locaţie: Râmnicu Vâlcea
Înregistrat: 21 Sep 2009
Mesaje: 3735

Re: Creare program Shell pentru chat

^ avantajul redescoperirii rotii este.... ca o intelegi mai bine wink


Daca raspunsul nu te multumeste, probabil nu ai pus intrebarea potrivita.
Registered linux user #542751

Offline

 

#5 13 Dec 2015 16:43:02

mesaros.ronel
Membru nou
Înregistrat: 12 Dec 2015
Mesaje: 4

Re: Creare program Shell pentru chat

Nu prea stiu programare, la școala am facut Pascal, dar e cam 'vechi' acest limbaj, iar in ubuntu sunt nou-venit. big_smile
Ideea e ca am văzut acest proiect intr-un serial (Nikita), unde folosea acest 'Shellbox' pentru a comunica între 2 pc-uri, iar acest program nu putea fi detectat de firewall si nu era nevoie de ceva server extern, iar mesajul era encriptat cu niște cifre.

Offline

 

#6 13 Dec 2015 18:51:28

geosoft1
Membru
Locaţie: Râmnicu Vâlcea
Înregistrat: 21 Sep 2009
Mesaje: 3735

Re: Creare program Shell pentru chat

la școala am facut Pascal, dar e cam 'vechi' acest limbaj

si ce daca e vechi? daca il stii cat de cat ai ce face cu el. vezi aici.


Daca raspunsul nu te multumeste, probabil nu ai pus intrebarea potrivita.
Registered linux user #542751

Offline

 

#7 13 Dec 2015 20:25:24

Alexandru.Cucu
Administrator
Locaţie: -21.8021247, -154.6975949
Înregistrat: 17 Jun 2008
Mesaje: 6960
Site web

Re: Creare program Shell pentru chat

Nu era detectat de firewall? Astea sunt povesti smile

Offline

 

#8 13 Dec 2015 20:31:14

mesaros.ronel
Membru nou
Înregistrat: 12 Dec 2015
Mesaje: 4

Re: Creare program Shell pentru chat

geosoft1 a scris:

la școala am facut Pascal, dar e cam 'vechi' acest limbaj

si ce daca e vechi? daca il stii cat de cat ai ce face cu el. vezi aici.

Mulțumesc! Cred ca o sa imi reîmprospătez cunoștințele despre Pascal

Offline

 

#9 13 Dec 2015 20:32:52

mesaros.ronel
Membru nou
Înregistrat: 12 Dec 2015
Mesaje: 4

Re: Creare program Shell pentru chat

Alexandru.Cucu a scris:

Nu era detectat de firewall? Astea sunt povesti smile

Era un film... Doar eram curios dacă s-ar putea face asta

Offline

 

#10 13 Dec 2015 21:09:29

geosoft1
Membru
Locaţie: Râmnicu Vâlcea
Înregistrat: 21 Sep 2009
Mesaje: 3735

Re: Creare program Shell pentru chat

pe de alta parte daca te intereseaza genul asta de programare (linie comanda,aplicatii de retea) o alegere mult mai buna este limbajul go. vezi aici.

Editat ultima oară de geosoft1 (13 Dec 2015 21:10:59)


Daca raspunsul nu te multumeste, probabil nu ai pus intrebarea potrivita.
Registered linux user #542751

Offline

 

#11 14 Dec 2015 20:04:06

guletz2002
Membru
Locaţie: Brasov
Înregistrat: 09 Sep 2009
Mesaje: 1512

Re: Creare program Shell pentru chat

..... sau și mai bine e sa înveți cam cum funcționează rețelele și protocoalele de rețea. După ce ai baza asta, vezi cum e cu programarea.  Nu de alta dar pe măsură ce trece timpul observ ca sunt multi programatori capabili pe partea de programare dar care din păcate singura lor noțiune despre rețele este redusa doar la ping/icmp.  Prin urmare și aplicațiile lor sunt la fel de utile cum este și ping....  in unele cazuri punctuale este ok, dar nu în orice caz.  Sigur ca nu toți aceștia sunt habarnisti în rețele.  Dar în prezent e o cerere mare de programatori de aplicații de rețea.


Daca retea Nu e, atunci nimic nu e !!!
LiCo : Proud GNU/Linux User since 2003.

Offline

 

#12 15 Dec 2015 00:06:55

TARA24.
Membru
Înregistrat: 23 Dec 2010
Mesaje: 995

Re: Creare program Shell pentru chat

guletz2002 a scris:

..... sau și mai bine e sa înveți cam cum funcționează rețelele și protocoalele de rețea..

Asa este.

guletz2002 a scris:

După ce ai baza asta, vezi cum e cu programarea.

Gresesti.

guletz2002 a scris:

Nu de alta dar pe măsură ce trece timpul observ ca sunt multi programatori capabili pe partea de programare dar care din păcate singura lor noțiune despre rețele este redusa doar la ping/icmp.

Si cum ai Ajus tu la Concluzia asta? Sti sa programezi?


guletz2002 a scris:

Prin urmare și aplicațiile lor sunt la fel de utile cum este și ping....  in unele cazuri punctuale este ok, dar nu în orice caz.  Sigur ca nu toți aceștia sunt habarnisti în rețele.  Dar în prezent e o cerere mare de programatori de aplicații de rețea.

Aici cred ca ma abtin, dar spune-mi intelegi ceva de aici:

server.c:

#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <netdb.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <arpa/inet.h>

void setData(void *, char , unsigned int);
void start_server(void);

int main(void){
    start_server();
    return 0;
}

void start_server(void){
    int listening = 0,connecting = 0;
    struct sockaddr_in serv_addr;
    char buffer[1025];

    listening = socket(AF_INET, SOCK_STREAM, 0);
    printf("Receptie Socket cu Succes\n");

    setData(&serv_addr, '0', sizeof(serv_addr));
    setData(buffer, '0', sizeof(buffer));

    serv_addr.sin_family = AF_INET;
    serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);
    serv_addr.sin_port = htons(5000);

    bind(listening, (struct sockaddr*)&serv_addr,sizeof(serv_addr));

    if(listen(listening, 10) == -1){
      printf("Failed to listen\n");
      exit(1);
    }


    while(1){
      connecting = accept(listening, (struct sockaddr*)NULL ,NULL); // accept awaiting request
      strcpy(buffer, "Salutari de la TARA24");
      write(connecting, buffer, strlen(buffer));

      close(connecting);
      sleep(1);
    }
}

void setData(void *ptr, char ch, unsigned int bytes){
    unsigned int index = 0;
    char* buf = (char*)ptr;

    if(!ptr){
      exit(1);
   }

   for(index = 0; index < bytes; index++){
      *buf = ch;

      buf++;
   }
}

client.c:

#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <netdb.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <arpa/inet.h>

void setData(void *, char , unsigned int);
void start_client(void);

int main(void){
    start_client();
    return 0;
}

void start_client(void){
    int sockfd = 0;
    ssize_t n = 0;
    char buffer[1024];
    struct sockaddr_in serv_addr;

    setData(buffer, '0' ,sizeof(buffer));
    if((sockfd = socket(AF_INET, SOCK_STREAM, 0))< 0){
      printf("\n Eroare : Socket-ul nu se poate crea \n");
      exit(1);
    }

    serv_addr.sin_family = AF_INET;
    serv_addr.sin_port = htons(5000);
    serv_addr.sin_addr.s_addr = inet_addr("127.0.0.1");

    if(connect(sockfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr))<0)
    {
      printf("\n Eroare : Eroare conectare \n");
      exit(2);
    }

    while((n = read(sockfd, buffer, sizeof(buffer)-1)) > 0){
      buffer[n] = 0;
      if(fputs(buffer, stdout) == EOF){
          printf("\n Error : Fputs error");
          exit(3);
        }
      printf("\n");
    }

    if( n < 0){
      printf("\n Read Error \n");
    }
}

void setData(void *ptr, char ch, unsigned int bytes){
    unsigned int index = 0;
    char* buf = (char*)ptr;

    if(!ptr){
      exit(1);
   }

   for(index = 0; index < bytes; index++){
      *buf = ch;

      buf++;
   }
}

1)

tara24@tara24-laptop:~$ ./server
Receptie Socket cu Succes

2)

tara24@tara24-laptop:~$ ./client
Salutari de la TARA24

Sau daca vrei ceva mai elaborat:

#define _BSD_SOURCE
#include<sys/socket.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<sys/socket.h>
#include<errno.h>
#include<netdb.h>
#include<arpa/inet.h>
#include<unistd.h>
#include<errno.h>

#define MAXHOSTNAMELEN 256

struct hostent *he;
struct in_addr a;

void setData(void *ptr, char ch, unsigned int bytes);
char *getHN(void);
void start_server(void);

int main (void){
    start_server();
    return 0;
}

char *getHN(void){
    char *hostname = malloc(MAXHOSTNAMELEN );
    setData( hostname , 0 , MAXHOSTNAMELEN );
    gethostname( hostname,MAXHOSTNAMELEN );

    he = gethostbyname (hostname);
    if (he){
        while (*he->h_aliases){
            printf(" alias: %s\n", *he->h_aliases++);
        }

        while (*he->h_addr_list){
            bcopy(*he->h_addr_list++, (char *) &a, sizeof(a));
        }
    }else{
        printf("error \n");
        exit(1);
    }
    free(hostname);
    return inet_ntoa(a);
}

void start_server(void){
    char *hostName = getHN();
    int listening = 0,connecting = 0;
    struct sockaddr_in serv_addr;
    char buffer[1025];

    listening = socket(AF_INET, SOCK_STREAM, 0);
    printf("Receptie Socket cu Succes\n");

    setData(&serv_addr, '0', sizeof(serv_addr));
    setData(buffer, '0', sizeof(buffer));

    serv_addr.sin_family = AF_INET;
    serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);
    serv_addr.sin_port = htons(5000);

    bind(listening, (struct sockaddr*)&serv_addr,sizeof(serv_addr));

    if(listen(listening, 10) == -1){
      printf("Failed to listen\n");
      exit(1);
    }


    while(1){
      connecting = accept(listening, (struct sockaddr*)NULL ,NULL);
      strcpy(buffer, hostName);
      write(connecting, buffer, strlen(buffer));

      close(connecting);
      sleep(1);
    }
}

void setData(void *ptr, char ch, unsigned int bytes){
    unsigned int index = 0;
    char* buf = (char*)ptr;

    if(!ptr){
      exit(1);
   }

   for(index = 0; index < bytes; index++){
      *buf = ch;

      buf++;
   }
}

Sau ne bagam si noi in seama?
Nu contrazic, ca nu esti in tema cu retelistica, dar nu folosii termenul "Programare" daca nu sti despre ce se vorbste. Te rog sa ma contrazici.

Editat ultima oară de TARA24. (15 Dec 2015 00:34:02)


Orice decizie pe care esti pe cale sa o iei, gandeste-o de cel putin 3 ori.
Din momentul in care ai luat-o nu mai conteaza de cate ori ai gandit-o.
Fi destept, foloseste ce ti se potriveste nu ce ti se impune.

Offline

 

#13 15 Dec 2015 18:37:23

Mese
Membru
Locaţie: Deva
Înregistrat: 18 Oct 2008
Mesaje: 452

Re: Creare program Shell pentru chat

Conteaza la discutie "multimea" asta de cod? Nu prea cred.
Toti putem sa "trantim" o tona de linii de cod si sa zicem/intrebam ce face respectivul cod. Nu cred ca ii important lucrul asta. Poate de asta nici nu raspunde @g...

Era vorba in discutie despre a pune caru' inaintea boilor... ceea ce se cam intampla des prin it-ul de acuma. Oricine poate invata ceva. Dar este important pentru tine/individ/evolutie sa inveti asa cum trebe. O baza buna iti asigura o evolutie buna.

La fel, un cod bun iti asigura o aplicatie buna... sau nu.

Offline

 

#14 15 Dec 2015 20:54:35

Alexandru.Cucu
Administrator
Locaţie: -21.8021247, -154.6975949
Înregistrat: 17 Jun 2008
Mesaje: 6960
Site web

Re: Creare program Shell pentru chat

Ii dau dreptate lui guletz2002. Sunt multi programatori care stiu un limbaj de programare mai mult sau mai putin bine, dar nu stiu nimic despre retelistica, sisteme de operare, securitate, etc.

Traiesc din outsourcing IT si am vazut muuuulti programatori, colaboratori ai clientilor, care nu au habar de nimic si vin cu tot felul de cereri sau plangeri stupide legate de serverele pe care le administram.

Era un nene care mi-a cerut sa activez pe un server web functia "exec" din PHP pentru ca nu-i mergea lui nu stiu ce.
I-am demonstrat ca functia e activa (stiam ca o folosesc si am avut grija sa fie activa) si i-am cerut sa-mi spuna exact cum apeleaza. Se pare ca omul incerca sa ruleze comanda "GET" pe care am descoperit mai apoi ca e prin ceva pachet cu scule scrise in Perl (cel putin pe Cent OS). Avea o solutie nu foarte eleganta pentru a face un GET pe HTTP, dar daca omul asa a vazut pe cine stie ce forum, asa folosea, fara sa inteleaga nici macar ce e aia o functie, ce parametri accepta, cum functioneaza, etc. A trebuit sa-l trimit elegant la documentatie.

E important sa cunosti bine curtea ta si cate putin din ceea ce se afla in curtea vecinilor, macar sa stii ce sa ceri.

Desi lucrez ca sysadmin, programarea imi este utila in fiecare zi. Administrez servere cu Linux, dar stiu destule despre Windows, chiar daca personal nu il folosesc din 2007.

Offline

 

#15 16 Dec 2015 01:11:29

TARA24.
Membru
Înregistrat: 23 Dec 2010
Mesaje: 995

Re: Creare program Shell pentru chat

Toata treaba tine de judecata si nu de contextul discutiei. Ce ma deranjat este faptul ca se arunca tot felul de acuzatii asupra unor oameni bazandu-se pe decalratiile altora si nici decum din experienta proprie.

Este intradevar adevarat , ca a avea cunostinte in Networking este vital cand se face un Socket Programing, insa daca arunci cu pietre trebuie sa intelegi defectul nu doar sa il recunosti, deoarece cienva undeva a spus asta iar tu ai citit-o (generalizez aici).

@Mese
Nu, nu conteaza in acest topic destul de mult pe cat poate ar trebui, insa nu trebuie facuta polemica pe modul cum a fost scris codul (cate linii de cod are), ci faptul, ca este intr-o asa maniera (compilabil) scris, ca sa poata fi utilizat.
Poate am facut exces cu functia "setData", memset era poate suficient insa nu este de explicat aici de ce folosesc propria functie in loc de memset.
Acesta este un Forum, deci se pune in discutie mult experienta fiecaruia pe o parte, iar pe de alta parte, altii pot profita. Imagineaza-ti ce se intampla daca nu este adevarat.
Asa ca, daca cineva isi permite sa faca anumite afirmatii atunci trebuie sa fie pregatita sa faca fata si consecintelor ce urmeaza,nu ?

@Alex
guletz2002 este si nu este foarte bun in retelistica, nu este interesant aici, insa accept ca stie sa faca tutoriale mai mult sau mai putin sigure. Eu unul nu am nevoie de ele...asta nu inseamna, ca nu sunt bune sau sigure.
Se pune in discutie (si sper ca doar la asta s-a rezumat guletz2002) doar cine le-a scris, si atat. Daca este vorba de un Proiect Open-Surse, No-Ofense, cine poarta vine mai mare ? Toate vin sub o licenta minimal, dar precisa.
Ar fi de discutat, daca s-ar folosii softuri platite, si cu suport platit, dar nu cele Open-Source.

Pe de alta parte, daca un incepator creaza un program in Windows si il da mai departe, iar acesta rezulta ca are acces la un anumit block de memorie care nu ii apartine sau are un "memory-leak" (vedeti Android), este de vina Microsoft ?....sau Windows cum il acuza lumea?
Multa lume acuza Windows, dar,  daca ii intrebi de ce, te apuca rasul.

@guletz2002
Fara suparare, personal nu am nimic cu tine, insa, nu imi place, ca faci afirmatii care nu le intelegi/cunosti.

Editat ultima oară de TARA24. (16 Dec 2015 01:14:18)


Orice decizie pe care esti pe cale sa o iei, gandeste-o de cel putin 3 ori.
Din momentul in care ai luat-o nu mai conteaza de cate ori ai gandit-o.
Fi destept, foloseste ce ti se potriveste nu ce ti se impune.

Offline

 
Feed

Antet forum

Powered by FluxBB