[MREPRO] 2. laboratorijska vježba - 2019/2020
angello2
huba buba to je to da, nista samo roknes FD_SET na master za svaki socket koji ti treba i ta funkcija ti ih dodaje u set (master i read_fds su setovi), ne trebas array radit
Ovo drugo da pretty much, provjeris koji se tocno socket javio sa ifovima, ako je stdin obradis komande, ak je tcp radis njegov accept i recv i ak je udp recvfrom
Ne znam meni je oke ovaj select nije tak strasno
Gussy
angello2 aha znači imam 3 file descriptora, još jedan za stdin
a ovo za fd_set bi ovako otprilike izgledalo
FD_SET(tcp_socket, &master);
FD_SET(udp_socket, &master);
FD_SET(stdin_fd, &master);
i onda samo moram u toj infinite petlji na pocetku staviti read_fds = master;
kao što je u primjeru ili moram isto u petlji uvijek dodavati ove FD_SETove?
angello2
huba buba dobro je to, nemoras ih ponovo jedan po jedan jer ti master ostaje dobar, kolko sam skuzio select cleara set koji mu das (read_fds ovdje) svaki put nakon sto se neki socket javi pa je zato taj dio potreban
Cvija
Jel moguće ovaj dio u bot-u kad treba “prisluškivati” STOP i poruke od žrtava, riješiti pomoću selecta?
angello2
Cvija je, ja sam tako
Cvija
angello2 Polling ili s nekom vremenskom blokadom?
Doslovno sam zapeo samo na tom dijelu
angello2
Cvija stavio sam select sa timeout 0 sec 0 microsec, mislim da je to onda polling? basically provjerim prije svakog slanja jel neko nes poslo, ak nije onda select odma izade
angello2
Cvija kak si podijelio payloade? ja sam strtok sa dvotockom al nije bas dobro, npr ako imam payload1:payload2:payload3 prvoj zrtvi posalje payload1, payload2, pa payload3 i onda svima nakon samo payload1, ne kuzim zas
Gussy
angello2 upravo to i meni radi, zato što izmijeni početni string, ali ne znam kako to riješiti.
Npr. probao sam sa
char *tmp = payload;
ali ovo svejedno izmjenjuje taj originalni string jer tmp pokazuje na isti dio memorije kao i payload, tj. originalni string, bar ja mislim da je zato. Ne znam kako to popraviti.
I jel mogu ovaj stop i quit za bota jednostavno riješiti sa procesima? Tipa run() je zaseban proces/thread nebitno, i onda kad main dobije stop ili quit on samo killa taj child proces. To mi je onako najjednostavnije rješenje ovako napamet.
Cvija
huba buba Problem možeš riješiti sa funkcijom strcpy
Što se tiče ovog drugog, lakše ti je sa select, bar sam ja uspio na kraju
Slično ti je kao u programu server, samo što ti je bolje da namjestiš na Polling, a to napraviš tako da ti je vrijeme (0, 0), a ne null, tj. select ti onda ne blokira program
Mislim, ne znam je li lakše, no pretpostavljam da će asistenti inzistirati da se sve riješi selectom
Gussy
Cvija taman mi palo strcpy napamet. Al to za proces, u botu nisu nigdje rekli da moramo sa selectom. Ne znam, trebalo bi biti svejedno.
angello2
huba buba a mozes al iskreno sa selectom mi se cini puno jednostavnije
Gussy
jel vama ispis na netcatu ne radi kada pokušate drugi put slati podatke? meni prvi put radi kako treba, ali kad opet probam pokrenuti napad, nema nikakvog ispisa na netcatu
angello2
huba buba meni radi
Gussy
angello2 kako pokreneš? ja pokrenem sa nc -ul 6789
angello2
huba buba isto, vjerojatno ti je s kodom nes
Gussy
angello2 a u kurac hahaha
menace_master
huba buba jesi uspio skuzit? imam isti problem
Gussy
menace_master ne, bot šalje podatke pravilno, u wiresharku sam vidio. problem je u netcatu ja mislim, jer za te pakete piše destination unreachable.
menace_master
huba buba tako je i meni isto, valjda nije neka velika greska
Gussy
menace_master jesi li možda koristio procese za slanje paketa na žrtve kod bota?
ili možda radio novi socket što već?
ovo je jedino objasnjenje sto sam ja nasao
However, once the first packet is received, netcat6 will only receive packets from that client in future. This is done by putting the UDP socket into “connected” state (see udp(4) and connect(2)). Packets from other sources are discarded by the kernel and an ICMP unreachable response is sent. This is discussed in the nc6(1) man page (“UDP”), but is applicable to socat and nc as well: