Ovu stranicu je najbolje pregledavati u modernom internet pregledniku s omogućenim JavaScriptom.

[MREPRO] 2. laboratorijska vježba - 2020/2021

ruza0001

super im je primjer pozivanja koji je samo kopiran s prvog labosa i na drugom ni ne radi uopce….


BigZ1

kako je netko ostvario onaj stop komandu kad dobije?


__builtin_popcount

BigZ1
Pomoću poll ili select treba ionako provjeravati je li neka od žrtvi odgovorila, pa sam u listu socketa koji se provjeravaju ubacio i C&C-ov i kad on nešto pošalje provjerim je li STOP i ako je, breakam iz slanja.


kolega_kolega
Ako simuliraš jedan od programa pomoću netcata, probaj s -I smanjiti receive buffer ako simuliraš bota ili s -O smanjiti send buffer ako simuliraš server.

Može biti da ti bot ostane čekati kraj poruke, iako je server već sve poslao. Za to mi se čini da ima nekoliko rješenja:

  • bot ima timeout za čekanje payloada: čini mi se kao najbolje rješenje jer tako bot ne može ostati zauvijek u čekanju,
  • bot čita ~1024 ili koliko već znakova odjednom, a server zatvara vezu čim sve pošalje: bot može zauvijek ostati čekati ako server ne zatvori svoj socket kad je gotov sa slanjem,
  • bot čita znak po znak dok ne dođe do \n: bot može ostati zauvijek čekati ako server ne pošalje \n i ne zatvori konekciju, a ako neki od payloada sadrži \n će se izgubiti sve poslije njega.

Samo prvo rješenje s timeoutom mi se čini bulletproof jer bot ne može zapeti u čekanju payloada.
U svakom slučaju mi se čini korisno da server zatvori konekciju čim je poslao cijelu poruku. U prvom slučaju se izbjegne nepotrebno čekanje timeouta, a u ostala dva bot neće ostati čekati zauvijek.


kolega_kolega

Je li neko imao problema sa slanjem payloada preko tcp konekcije?


ruza0001

meni na neku foru salje na neki port “vat” jel nekome zvuci poznato pa da zna sta bi mogao bit uzrok problema?


ruza0001

rozy nvm upravo sam skuzio da sam zbog njihovih mutavih krivih uputa potrosio sat vremena ispravljajuci “bug” kojeg nisam niti imao…..


Mariox

rozy gdje su krive upute?


ruza0001

Mariox pa ovaj zadnji dio “primjeri pozivanja”, pise posaljete botovima naredbu p, a CandC ne podrzava naredbu p, vec pu i pt, onda ovo pokretanje nc -ul 5678, meni nije radilo, otvorim kod CandC-a i vidim da u onim portovima navedeniim vise ne pise 5678 ko u prosloj vjezbi vec je sada taj “vat” i onda sam runno program i ko zrtvu imo nc -ul vat i radilo mi je kak treba i primao je payloade


BigZ1

Jel ima itko vremena da pogleda kako to da mi isto definirani selectovi i sve ne uspije proci na serveru na na botu prodje?

ovo je iz servera i ne radi nikad ne dodje na liniju 100

ovdje select u botu prodje a sve sam probao na serveru promijeniti


jobi

BigZ1 nez koja ti je 100. linija, al selectu kao prvi arg moras predat maksimalni sfd + 1, nez kako znas da je mysocketudp upravo taj najveci i makni gornja tri fd_set jer kad ude u while petlju to radi po drugi put iako ne bi treba


BigZ1

azex a to sam samo probao cisto ovako,a zadnji socket koji napravim je taj udp pa sam na njega dodao samo 1
al evo maknem to i vidim koji je naveci sa printf


BigZ1


ev sad je kod ovako i ne radi svakako ne prodje select

azex


Mariox

BigZ1 s primjera na https://beej.us/guide/bgnet/examples/selectserver.c
FD_ISSET mora biti u for petlji koja izgleda ovako for (i = 0; i <= fdmax; i++)

EDIT: aha, ili mozes provjeriti sve svoje sockete, kako si pretpotstavljam ti napravio, ali kanije moras napraviti da ti je u readsfd setu listener socket, pa nakon accepta dodas novi socket koji si dobio s accept(), te bi tako morao podrzati vise konkurentnih klijenta. Opet pogledaj primjer s linka, ja sam ga puno koristio


BigZ1

Mariox e pa gledao sam to ali ocigledno mi i dalje nije jasno,razumijem da accept mi vrati novi socket i to odradim nakon fd_isset od tcp socketa no opet mi nije jasno kako sav isti kod prodje u selectu u botu a u serveru ne. msm kod izgleda isto kao i ondje gore,ali unutar toga obradim ovo sto bude u aceptu.

evo cak i dio koda,kuzim da bi ja mozda trebao taj od accepta dodat onda u listu skroz novih no zasad ni ovo ne radi jer ne prodje select svakako.
EDIT: inace napisao sam i wraper funkciju selecta no probao sam ovdje bas select pozvat da nije neki problem. no on kao da zapne u selectu i ne ide dalje a ne baci error


Mariox

BigZ1 koja je error poruka? Napravi si Select() wrapper


BigZ1

Mariox
ev i wrapper cak sam stavio i err <0 i nije se nist promijelo.. Pokusavam rec da se error ne dogodi nekako no zapne tu i program se NE terminira.


Mariox

BigZ1 oprosti ako je glupo pitanje, ali samo da provjerim, jesi poslao nesto programu? Npr s stdina?


BigZ1

Mariox pokrenuo sam samo skriptu bash testiraj.sh i u njoj uneo pt i tjt i tu sve stane
al nije glupo pitanje,logicno je


Mariox

BigZ1 pokreni samo server i pokusaj mu poslat na stdin nesto, mozda jednostavno select nije nista primio


BigZ1

Mariox jok samo mogu upisivat do kraja vjeka vjekova i tjt. Ma nista sutra ce mi ujutro asistenti reci sta ne valja jer nemam pojma vise.


Sljedeća stranica »