Script Bash: Automatski kontrolirajte propusnost prijenosa

Bok svima. Ovo je moj drugi post. Obično ne pišem postove, osim ako nemam nešto dobro za podijeliti, a ovaj put imam nešto što će zasigurno mnoge zanimati.

Prije nekoliko mjeseci razmišljao sam o tome da napravim skriptu za ograničavanje propusnosti aplikacija, ali imao sam nekih problema i pogrešaka koje su mi to otežavale, pa sam iznio sumnje u forum de <º DesdeLinux u slučaju da netko ima ideju.

Tako sam ga ostavio neko vrijeme i jednog dana odlučio sam nastaviti scenarij. Puno sam testirao, puno sam čitao o bashu i imao sam glavobolje u slobodno vrijeme, ali uspio sam !!

Imam ogromno zadovoljstvo i zato sam odlučio podijeliti s vama svoj mali scenarij kako biste ga mogli koristiti i poboljšati. Planiram ga licencirati pod GPLv3, ali to je moj prvi projekt, tako da nisam sasvim siguran kako to učiniti (trebam savjet onoga tko je to već radio).

Eto, sad ću objasniti koja mi je bila potreba i što sam učinio da riješim problem.

Situacija
Imam internetski plan od 512 KB, stoga koristim Prijenos kao BitTorrent klijent za preuzimanje velikih datoteka (poput LibreOfficea i nekih GNU / Linux distribucija). S tom brzinom preuzimanja traju dugo, a problem je u korištenju web preglednika Firefox: dugo se učitava.

Kad se povežem s Internetom, aktiviram vremenska ograničenja za prijenos i preuzimanje i čekam da se Firefox učita, a zatim ponovno pokrećem bujice. Kao što ćete vidjeti, par puta to je zamorno. Da ne spominjem da ponekad izravno zaustavim sve bujice, a zatim ih zaboravim ponovno uključiti, što dovodi do izgubljenog dragocjenog vremena za prijenos / preuzimanje bujice.

Otopina
Za ovaj problem odlučio sam stvoriti skriptu u Bashu koja u osnovi radi sljedeće:

1. Provjerite radi li prijenos i nije li zaustavljena bujica. Ako je tako, ponovno uključite bujice.

2. Provjerite radi li Firefox. Zatim dobiva KB / s poslane i primljene te ih sprema u datoteku.

3. Ako prijenos / preuzimanje KB-a preglednika premaši referentni raspon, postavke prijenosa / prenosa prijenosa se mijenjaju.

To omogućuje da kada se želi pristupiti web stranici, kada preglednik pošalje zahtjev, prijenos datoteke za prijenos je ograničen, a kada se primaju podaci o stranici, preuzimanje je ograničeno. To izvrsno funkcionira kada pristupate više stranica odjednom, a rezultati su zapravo isti kao kod onemogućenog prijenosa.

Velika je prednost što je potpuno automatski i ne zahtijeva moju intervenciju.

Skripta
Iako bi se mogao koristiti za kontrolu potrošnje propusnosti bilo koje aplikacije, trenutno je napisan samo za rješavanje vrlo određenog problema. Ali nije jako teško napraviti preinake.

zahtjevi
Da bi mogao ispravno raditi potrebno je imati aplikaciju «mrežaste mačke".

U ovom slučaju, budući da skripta radi s Firefoxom i Transmisijom, potrebno je instalirati i ove aplikacije, uz "prijenos na daljinu", što mijenja vrijednosti prenosa i prenosa bujica. Također koristim u skripti "awk". Spominjem ga jer ne znam imaju li ga instalirane sve distribucije.

Korišteni softver
Popis aplikacija koje skripta koristi i sustav u kojem radi.

• Debian GNU / Linux 6.0.8
• Linux 2.6.32-5-686
• Firefox 24.0
• Mjenjač 2.03 (11030)
• Nethogs 0.7.0

Izvršenje
Mora se pokrenuti kao root jer mrežaste mačke može se izvoditi samo s tim korisnikom, ali prijenosno-daljinski izvršava se s normalnim korisnikom pomoću naredbe njegova.

Skripta koristi internu naredbu Bash zamka Pomoću koje je moguće vratiti zadane vrijednosti opterećenja / istovara prijenosa kada se zaustavi pomoću SIGINT (CTRL + c) ili SIGTERM signala.

Još uvijek nisam siguran kako to pokrenuti prilikom pokretanja i zaustaviti se kada isključim ili ponovo pokrenem računalo. Razmišljao sam staviti vezu u datoteku /etc/rc.local ali ne znam bi li to uspjelo i zapravo ne razumijem kako / etc / funkcionirainit.d (Vidio sam čak i neke skripte koje postoje kostur, ali ih ne razumijem). Ako mi netko može pomoći, bit ću mu jako zahvalan.

Pa ljudi, to je to. Nadam se da vam je moj mali doprinos koristan i da ga možete poboljšati ako želite. Rado ću pročitati vaša mišljenja i preporuke, kao i prijedloge u slučaju da postoje sigurnosni problemi s datotekom (nisam programer, s vremena na vrijeme radim samo nekoliko stvari).

Znam da s nekim popravcima može postati izvrsna aplikacija u budućnosti, jer ne znam niti jedan program koji radi isto. Na primjer, pada mi na pamet da bih mogao imati grafičko sučelje u zenitet te da bismo mogli odabrati aplikacije kojima želimo dati prednost pri korištenju širine pojasa (web preglednik, upravitelj ažuriranja, prijenos datoteka itd.) i različite referentne vrijednosti. Da, pomalo je ambiciozan, ali vrlo koristan.

Skriptu možete preuzeti u zalijepiti. Puno hvala na čitanju !!


23 komentara, ostavi svoj

Ostavite svoj komentar

Vaša email adresa neće biti objavljen. Obavezna polja su označena s *

*

*

  1. Za podatke odgovoran: Miguel Ángel Gatón
  2. Svrha podataka: Kontrola neželjene pošte, upravljanje komentarima.
  3. Legitimacija: Vaš pristanak
  4. Komunikacija podataka: Podaci se neće dostavljati trećim stranama, osim po zakonskoj obvezi.
  5. Pohrana podataka: Baza podataka koju hostira Occentus Networks (EU)
  6. Prava: U bilo kojem trenutku možete ograničiti, oporaviti i izbrisati svoje podatke.

  1.   živo dijo

    Oh! Zanimljivo 😀

    1.    eliotime3000 dijo

      U donjem lijevom kutu imate opciju ograničenja propusnosti koju prijenos prenosi i prilikom prijenosa i preuzimanja. S Prijenosom nisam imao problema s tim.

      1.    kolačić dijo

        Ali ovo je automatsko, a postoji i prijenos bez grafičkog sučelja, tako da možda nećete imati tu funkciju pri ruci.

      2.    Joaquin dijo

        Bok, kako si.
        Da, to već znam. Ali to je upravo ono što ne želim raditi.
        Imam vrlo loš plan za internet (512 KB, i najbolji je u mom području).

        Sa svojim scenarijem ne brinem se da li ću sve raditi ručno. Zamislite da otvorite stranicu u pregledniku i Transmission u tom trenutku zauzima svu širinu pojasa, pa se stranici treba neko vrijeme za učitavanje (najviše 1 ′, ali ogorčava). Dosta mi je "aktiviranja vremenskih ograničenja" svake dvije minute. Ovo je automatski i gotovo trenutno (provjerava KB koji Firefox šalje i prima svaki 5 sekundi).

        Stvarno je u mom slučaju s tom brzinom interneta izvrsna. Također ne znam za drugu aplikaciju koja to čini, inače to ne bi učinila. Oni koje sam vidio ograničavaju samo propusnost, ali ne i automatski.

        Nadam se da sam bio jasan. Hvala na čitanju!

        1.    Joaquin dijo

          Oprosti, pogriješio sam. Nisu 512 KB, nego jesu Kbits. (Odnosno 1/2 "Mega"). Maksimalno što mogu preuzeti je 75 KB / s i 50 KB / s za prijenos. To kad je Internet u redu, inače je normalno 48 i 23.

    2.    Joaquin dijo

      Gracias!

  2.   kolačić dijo

    Zanimljivo, koristim qBittorrent, a prekidač koristim za ograničenja.

    Objava lijepo izgleda s tim bojama 😉

    1.    Joaquin dijo

      Hvala na bojama. Nisam baš dobar u tome, čini mi se jako dugo i monotono s toliko teksta.

  3.   Jorge dijo

    Osobno koristim prijenos-demon i firefox s karticom aplikacije uživo, tako da ne hodam s vanjskim programima ili zaboravljam nastaviti bujice ili aktiviranu kornjaču (a mogu to kontrolirati sa svog telefona). Za pokretanje usluge dodaje se korisnik (npr. Adduser –disabled-password nethogs), u /etc/init.d se stvara tekstualna datoteka za demon s imenom (npr. Nethogs-daemon), a zatim u debianu upišite "update-rc.d nethogs-daemon default", tako da se pokreće sam.

    Tekstualna datoteka je također bash skripta u koju možete spojiti skriptu.
    Pogledajte može li vam ovo pomoći, može se upotrijebiti za pokretanje demona za prijenos, može se koristiti za pokretanje mrežnih računala https://trac.transmissionbt.com/wiki/Scripts/initd

    1.    Joaquin dijo

      Pozdrav!
      Provjerite razumijem li: ovo je pokretanje Prijenosa pri pokretanju i zaustavljanje prilikom isključivanja ili ponovnog pokretanja. Uz to nemam problema jer se uvijek pokreće sam od sebe i započinje preuzimanje (dodao sam ga aplikacijama prilikom pokretanja u Xfceu).

      Moj je problem što ako stavim skriptu u rc.local ili init.d, ne znam kako računalo zaustavlja skriptu. Odnosno, očito se prilikom isključivanja / ponovnog pokretanja računala svi procesi prekidaju (a s njima i Prijenos i Nethogovi), ali ne znam što bi se dogodilo s mojom skriptom.

      I zašto me to muči? Skripta stvara datoteku u / tmp i kontrolira brzinu prijenosa. Ako ga pokrenem u terminalu i iznenada zaustavim (na primjer CTRL + c), skripta prije zatvaranja vraća zadane brzine (u slučaju da je to potrebno), a zatim zaustavlja Nethogs i briše datoteku iz / tmp. Pokušao sam ga učiniti što profesionalnijim, tako da ne ostavlja labave datoteke ili pozadinske procese.

      U vezi s onim što ste rekli, nisam razumio što je "kartica aplikacije uživo".

      1.    Jorge dijo

        Kartica aplikacije trajna je, uvijek je otvorena i umanjena u Firefoxu http://i.imgur.com/a5i0aP3.png (kontekstualni izbornik na kartici, kliknite na «zalijepi karticu»). Kad demoni pošalju signal TERM, pričekaju neko vrijeme, dok ne zatvore sesiju, i spremaju svoje podatke. Imajte na umu da u vezu koju sam dao prije izlaska iz skripte poziva start-stop-daemon i govori prijenosu da zaustavi, tamo možete zalijepiti "killall nethogs" i ono što sadrži StopScript. U ovom slučaju skriptu init trebali biste je zvati kao root umjesto određenog korisnika, jer joj trebaju privilegije.

        1.    Joaquin dijo

          Pa hvala na savjetu. Čim imam vremena, isprobam!

  4.   Facundo dijo

    super, naišao sam na ovaj nedostatak jer, čak i ako imate brzu vezu, prisiljeni ste ograničiti prijenos dok želite surfati i tako "izgubiti" vrijeme.
    Isprobat ću kad budem mogao. Pozdrav i hvala !!

    1.    Joaquin dijo

      Zahvaljujući tebi! Nadam se da vam ovo može pomoći!

      1.    facundo dijo

        Pozdrav još jednom Joaquin. Vidim da se vi brinete o tome da odgovorite na sve komentare, pa ću to iskoristiti i postavit ću vam nekoliko rookie pitanja.
        Prvo, kako mogu znati imam li instaliranu skriptu "awk"? Koristim Debian 7.2.
        Drugo, ne znam što da radim s kodom za lijepljenje. Moram zgrabiti uređivač teksta i spremiti ga u datoteku nazvanu "bandwidth-controller.sh", a zatim ga pokrenuti kao "./band-width-control.sh". Ovo je dio u kojem sam se najviše izgubio.
        Treće: Kada kažete da ga pokrenete kao root, je li potrebno mijenjati korisnika u root ili je to dovoljno sa sudo?

        Ako imate neko čitanje koje bi me preporučilo na tu temu, cijenim to.
        Pozdrav!

  5.   giskard dijo

    Zato uvijek deinstaliram Transmission i instaliram Deluge. Pa, za to i još malo stvari koje mi Deluge nudi, a druge ne donosi.

    1.    Joaquin dijo

      Bok, ne znam Potop. Moj glavni problem je internetska usluga. Ovim ga cijedim punim plućima.

  6.   panda dijo

    Bok. propusnost mi je također ograničena pa sam probao ovu skriptu. Ali ne ide. čini se da je pogreška u naredbi nethogs -t. vraća pogrešku "Čekajući da stigne prvi paket (vidi programsku pogrešku sourceforge.net 1019381)" i probao sam mint, archlinux i ništa. Što bi ta naredba trebala vratiti? Pretpostavljam da bih trebao u običnom tekstu ispisati propusnost koju koristi svaka aplikacija. Znate li još jedan program koji vam omogućuje preslušavanje mreže?

    1.    Joaquin dijo

      Bok, kako si.
      To je Nethogsova greška. I meni se čini, ali svejedno uspijeva.

      Ono što Nethogs radi je prikazivanje procesa koji troše najviše propusnosti u stvarnom vremenu. U skripti se njegov izlaz sprema u tekstualnu datoteku "net.list", tako da se kasnije može filtrirati.

      Skripta radi samo s Transmisijom (BitTorrent klijent) i Firefoxom (web preglednik). Ono što čini je ograničiti propusnost Transmisije kada Firefox učitava web stranicu. Trebate instalirati: Nethogs, Transmission, Transmission-remote i Firefox.

      Sve je objašnjeno u postu, pa ne znam u čemu je vaš problem.

      PS: Molimo, napišite ispravno i poboljšajte pravopis. To je komentar, a ne tekstualna poruka.

      1.    panda dijo

        skripta mi ne ide. ispisuje tu poruku o pogrešci mnogo puta. pokrenite "nethogs -t" u terminalu da vidite što radi, ali ništa ne ispisuje, već samo pogrešku. na mom računalu to ne radi. Pretpostavljam da bi trebao ispisati nešto slično onome što ispisuje kada se izvodi bez -t, pokazujući procese i širinu pojasa. ali u mom slučaju ne ispisuje ništa od toga. koji ste distro koristili za razvoj scenarija?

        1.    Joaquin dijo

          Ako pažljivo pogledate, post sadrži sav korišteni softver i njegove verzije. Ne znam zašto je pogreška, ali čini mi se svaki put kad se pokrene "nethogs -t". U scenariju će se to događati svaka 2 ″.

          Može biti da kada pokrenete nethogs, ne postoji postupak koji koristi mrežu i zato ne dobivate nikakve rezultate.

          Skripta se mora pokrenuti kao root jer nethogs treba tog korisnika da bi funkcionirao.

          sad sam se sjetio nečeg važnog i znam zašto vam to ne ide:

          MORATE UREDITI skriptu i promijeniti ime normalnog korisnika. U scenariju se zove "joaquin". Morate ga promijeniti u svoje korisničko ime.

          Žao mi je što to nisam shvatio, trebao sam staviti ime u varijablu. Stvar je u tome što nisam razmišljao da to učinim tako općenitim, već sam samo želio da vam ga pokažem kako biste ga mogli vidjeti, a oni koji žele dobiti ideje kako to učiniti. Nisam to učinio s namjerom da to radi na bilo kojem računalu, za to treba vremena i ne znam kako programirati, neke mi se stvari događaju.

          Sretno, bilo što pitajte ponovno. Molimo vas da ponovno pročitate post i komentare scenarija.

  7.   facundo dijo

    Pozdrav Joaquín, reci mi sljedeće:

    daljinski prijenos: (http://localhost:9091/transmission/rpc/) Povezivanje s poslužiteljem nije uspjelo
    ioctl nije uspio prilikom uspostavljanja lokalne IP adrese za odabrani uređaj eth0. Uređaj možete odrediti na naredbenom retku.

    bilo kakve ideje ?? Hvala!

    1.    Joaquin dijo

      Bok, kako si.
      Oprostite, ali nemam pojma 😀
      Koliko sam shvatio, pogreška kaže da je to problem s ioctlom, ali ne znam što je to.

      Možda biste mogli pokušati zaustaviti skriptu i provjeriti radi li prijenosni daljinski upravljač s nekim od njegovih opcija (pročitajte njegovu man stranicu pomoću naredbe "man").