
Forumul dedicat sistemului de operare Ubuntu în România
Forumul Ubuntu România
Forumul de discuții și asistență al comunității Ubuntu din România
Forumul dedicat sistemului de operare Ubuntu în România
Forumul de discuții și asistență al comunității Ubuntu din România
Neautentificat.
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 |
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
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
Reinventezi roata?
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
Au aparut implementari cu criptare cu tot, deci cam ce vrei tu sa faci
Clienti de IRC in linia de comanda:
irssi
weechat
bitchx
ii
quasel
Si poate mai sunt cateva zeci
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
^ avantajul redescoperirii rotii este.... ca o intelegi mai bine
Offline
Nu prea stiu programare, la școala am facut Pascal, dar e cam 'vechi' acest limbaj, iar in ubuntu sunt nou-venit.
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
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.
Offline
Nu era detectat de firewall? Astea sunt povesti
Offline
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
Alexandru.Cucu a scris:
Nu era detectat de firewall? Astea sunt povesti
Era un film... Doar eram curios dacă s-ar putea face asta
Offline
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)
Offline
..... 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.
Offline
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)
Offline
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
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
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)
Offline