Zobrazit příspěvky

Tato sekce Vám umožňuje zobrazit všechny příspěvky tohoto uživatele. Prosím uvědomte si, že můžete vidět příspěvky pouze z oblastí Vám přístupných.


Témata - hazardrok

Stran: [1]
1
Vývoj / SSH server vytuhne
« kdy: 04. 09. 2023, 09:13:50 »
Ahoj,
dlouhodobě provozuju program SSH serveru v linuxu postavený na openSSH, psaný v C.
Od začátku co jsem si s tím začal hrát jsem pozoroval, že funkce:
Kód: [Vybrat]
ssh_bind_accept(sshbind, session)má pouze blokující volání. To se mi nikdy nepovedlo vyřešit, ale s tímto umím žít.

Co mi ale vadí je to, že po nějaké době cca jeden den SSH server vytuhne a už nepříjme žádné spojení.
Blokovaná funkce už nikdy neskončí a zůstává to v ní viset dokud nevypnu/zapnu program serveru.

Ze začátku jsem si myslel, že to je proto že mám málo spojení na server. Pak jsem si ale vedle postavil
program SSH klienta, kterej se každou minutu připojí a opět odpojí. Tím jsem si toto vyloučil a stále to vytuhne.

Nyní bych to chtěl vyřešit lépe a chtěl bych to udělat tak, že nebude docházet k vypnutí/zapnutí programu serveru, ale
že se SSH pokusím reinicializovat za běhu. Doufám, že to povede k pro mě přijatelnějšímu chování.

Chtěl bych se ale zeptat jestli někdo netuší proč to SSH vytuhne? Případně jestli něco nemůžu udělat jinak.

Na tom programu serveru beží ještě další např. TCP server, TLS server a žádný z nich to nedělá, takže toto je pro mě velká záhada.
Dík.
 

2
Vývoj / Nefunkční proměnná v BASH scriptu
« kdy: 01. 03. 2023, 14:11:24 »
Ahoj, laboruju se skriptem v bashi ve kterém se snažím třídit databázový soubor. Třídění mi funguje, ale překvapilo mě chování proměné "OPAKOVAT"

Kód: [Vybrat]
#!/bin/bash
exit_status=0

while true; do
  OPAKOVAT=0
 
  find /opt/databaze_pracovni  -name "database.db" -exec sh -c '
     for file do
       dir=${file%/*}
       echo "$dir"
       /home/irma/database_sort_new "$dir"       
     OPAKOVAT=1 
     done' sh {} +
 
  echo $OPAKOVAT
  if [ $OPAKOVAT -eq 1 ]; then
      echo "nebude se uspavat"
      continue
  fi
 
  echo "sleep"
  sleep 300s
done

Zjistil jsem, že proměná "OPAKOVAT" se mi na konci skriptu nikdy nevyhodnotí jako "1" a to i přes to, že vždy najdu několik databázových souborů takže cyklus vždy proběhne. Můžete mi prosím někdo poradit co dělám špatně? Dík

3
Server / Nefungující HTTP
« kdy: 22. 11. 2022, 08:59:30 »
Ahoj, už delší dobu pozoruju, že mi občas nefungujou weby, které nemají zabezpečené spojení resp ty, které nejsou https. Např. včera to pravděpodobně nešlo během dne a dneska už to zase jde. Může jít o chybu u mě, nebo je to nějakej globální šotek? Někde jsem slyšel názor, že DNS googlu údajně může blokovat nezabezpečené spojení, ale to se mi nějak nepovedlo potvrdit, protože mi tu kolega zkusil jinej DNS server a nešlo to také. Dík za případnou reakci.

4
Server / RAM Memory Cache a Buffer
« kdy: 03. 01. 2022, 12:05:49 »
Ahoj, provozuju dva servery s ubuntu. Jeden mám fyzicky a druhej používá VPS. Na obou serverech jede stejnej software. Ten fyzizkej používám pro ladění a vývoj a na tom VPS provozuju finální aplikaci. Jen poznámka, že vše provozuju dost amatérsky a nejsem úplně IT odborník.

Poslední dobou se mi na tom VPS začlo dít, že mi začla růst hodnota buff/cache z výpisu htop. Roste v podstatě až do maxima než server spadne. Na tom fyzickém stroji se to neděje což je pro mě záhada, ale to mi zas tak nevadí.

Chtěl bych se tedy zeptat co to vlastně to buff/cache je? Zkoušel jsem porovnávat dva různé záznamy z výstupu htop před a po nárůstu buff/cache a snažil se najít v které aplikaci paměť je, ale došel jsem k závěru že žádná spuštěná aplikace tuto paměť nepoužívá. Nebo jsem to nenašel.

Pak jsem narazil na tento odkaz:
https://www.geeksforgeeks.org/how-to-clear-ram-memory-cache-buffer-and-swap-space-on-linux/

Když jsem provedl to co tam popisujou paměť se skutečně uvolnila a serveru se ulehčilo. Píšou tam také, že se to provádí každé tři hodiny. Chci se tedy ještě zeptat, jestli návod v tomto odkazu je správná cesta ke stabilitě serveru.
Dík


5
Server / SQLite databáze a delete
« kdy: 17. 09. 2021, 20:02:53 »
Ahoj chtel bych se zeptat, za by me nekdo nemohl nasmerovat pripadne vysvetlit. Mam databazovy soubor v SQlite databazi a v nem mam tabulku ve ktere jsou obecne udaje a cas. Protoze mam databazove soubory ktere maji uz kolem 100000 zaznamu za nekolik let, rekl jsem si, ze si vytvorim pomocnej databazovej soubor a v nem budu mit jen data za posledni dva mesice. To vsechno mi funguje, ale prekvapilo me, ze puvodni soubor s temi 100000 zaznamy a novy soubor, ktery ma jen nekolik tisic zaznamu maji priblizne stejnou velikost. Je to v poradku? Resim to z toho duvodu, ze ta data pak vizualizuju v grafane. Pokud mam v databazi jen par zaznamu tak to funguje vcelku svizne, jakmile jich je tam ale tisice tak je odezva dost pomala coz se mi nelibi. Rikal jsem si, ze by mi redukce tech dat mohla pomoci, ale ted si nejsem jistej jestli je to spravna cesta. Dik.

6
Bazar / Sháním starý notebook
« kdy: 07. 04. 2021, 10:26:20 »
Ahoj, nemáte někdo k dispozici a chtěl by jste se zbavit starého notebooku (např: Compaq N600C nebo starší), který by uměl Windows 98?

Chtěl bych pro si pro děti udělat takové menší muzeum a také by se mi líbilo si občas zavzpomínat. Vyměnil bych ho za DELL LATITUDE D510. Baterie už sice nevydrží, ale dá se repasovat a mám k němu i disketovou mechaniku do slotu kam se strká DVD mechanika.

Ten dell bych na to použil strašně rád protože je funkční a má pěknej monitor, ale bohužel se mi nepovedlo sehnat ovladače na grafickou kartu. Tím pádem je pro mě v dnešní době nepoužitelnej. Případně ho prodám, za jeho cenu za jakou se na netu prodává se dá sehnat i takovej co by mi vyhovoval. Dík za nabídky a nápady.

7
Hardware / ESP32 STA nebo AP
« kdy: 19. 03. 2021, 15:35:06 »
Ahoj, narazil jsem na problem se kterym si nevim rady. Snazim se u ESP32 detekovat zda prichozi TCP pakety jsou z rozhrani STA nebo AP. Moje prvotni myslenka byla takova, ze to rozhodnu podle IP adresy. Jenze pak jsem zjistil, ze na STA i AP muzu mit stejnou IP adresu, takze toho nebude fungovat. Dale me napada ze by to mohlo jit podle MAC adresy, jenze zde jsem narazil na to, za nedokazu z prichoziho spojeni MAC adresu zjistit nebo nevim jak. Nenapada nekoho jak toto vyresit? Dik.

8
Vývoj / TCP bezpečnost
« kdy: 04. 02. 2021, 11:10:09 »
Ahoj, v poslední době mi příjde, že by se pomalu každý kdo používá přenos dat na internetu měl bát o jejich bezpečnost. Proto bych se chtěl jen teoreticky zeptat, jak by se dala hacknout tato situace...

Mám TCP klienta, který se připojuje na TCP server s veřejnou IP adresou. Jakmile se naváže spojení, tak veškerou komunikaci přebírá TCP server. Tj. server vždy zahajuje komunikaci a client mu odpovídá. Komunikace je nezabezpečená.

Moc nerozumim tomu, jak by někdo třetí, který sedí někde buhví kde mohl zasáhnout do této komunikace.
Jediné co mě napadá je že existuje hackerský TCP server, který má stejnou IP adresu jako můj a tak se client připojí k němu. Jak by to ale mohl dokázat, když jsou všichni z jiného města? V rámci jedné budovy client-hacker možná, ale jiná síť...

Existuje nějaká metoda jak se do toho spojení dostat, nebo možná ještě jinak jak bych to mohl sám dokázat? Abych to zjednodušil tak je mi úplně jedno, jestli ten hacker data sleduje. Jediné co nechci je, aby do toho spojení mohl data poslat.


9
Vývoj / Práce s vlákny v C
« kdy: 18. 01. 2021, 18:33:07 »
Ahoj, chtel bych se trochu seznamit s programovanim vicevlaknovych programu v C na linuxu. Mam totiz napsany vlastni jednovlaknovy server a domnivam se, ze pokud mi client zacne delat nejakou slozitou operaci napr. pracovat s databazi (pouzivam SQLite v kombinaci s json-c), tak mi to blokuje dalsi klienty. Abych do stavajiciho jiz odladeneho programu co nejmene zasahoval, vymyslel jsem si tento postup...pokud bude chtit client pristupovat do databaze, tak se tento pozadavek otevre v novem vlakne a jakakoliv dalsi operace totoho clienta bude blokovana dokud vlakno neskonci.

Zjednodusene jsem se to pokusil napsat do kodu, tak jak bych to chtel realizovat a ten zde predkladam. Muj dotaz tedy zni, jestli takto napsany kod bude korektne fungovat a pokud ne, tak jak by to melo vypadat? Ani me nezajima jestli je to takto vhodne resit apod., jde mi jen o princip. Dik za radu.

Kód: [Vybrat]
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>

static int init_function(void *arg);
static void *handle_function(void *arg);

static pthread_t thread_var = -1;

int main(int argc, char *argv[]){
  int ret; 
   
  //printf("%ld, %ld\n", thread_var, (long)&thread_var); 
   
  while(1){
    ret = init_function((void *)&thread_var);
    if(ret == 1){
      printf("vytvoreno nove vlakno\n");
      }
    //else if(ret == -1){
    //  printf("vlakno se nepovedlo vytvorit\n");
    //  }
    //else if(ret == -2){
    //  printf("vlakno stale bezi\n");
    //  }
   
    //printf("%ld, %ld\n", thread_var, (long)&thread_var); 
    }
 
  return 0;
  }

static int init_function(void *arg){
  pthread_t *p_thread = (pthread_t*)arg;

  if(*p_thread != -1){
    return -2; 
    } 
   
  if(pthread_create(&thread_var, NULL, handle_function, arg)){
    return -1;
    }
 
  //printf("%ld, %ld\n", thread_var, (long)&thread_var);
 
  pthread_detach(thread_var); 
  return 1;
  }

static void *handle_function(void *arg){ 
  pthread_t *p_thread = (pthread_t*)arg; 
 
  //printf("%ld, %ld\n", *p_thread, (long)p_thread);
  sleep(5);
  printf("konec vlakna\n");
 
  *p_thread = -1;
 
  return NULL; 
  }

10
Vývoj / Vývoj ve Windows: sériový port přes SSH
« kdy: 24. 11. 2020, 22:11:59 »
Ahoj, prosim o pomoc s vyvojem programu ve Windows (v linuxu to umim) aneb vim co chci, ale nevim jak na to. Program by mel umet nebo neumet nasledujici...

1. vytvorit virtualni seriovy port
2. pripojit se pres SSH jako client k definovanemu serveru pres uzivatelske jmeno a heslo
3. otevrit SSH kanal a preposilat pres nej data z virtualniho serioveho portu
4. nemusi mit GUI

Mel by nekdo nejaky napad jak na to?
Me osobne napadlo pouzit com0com jako emulaci serioveho portu a toho SSH klienta napsat v pythonu. Duvodem je to, ze s com0com uz jsem se v minulosti setkal a v pythonu pisu vsechno co chci aby bezelo na Windows. Prijde mi to ale jako dost kostrbaty reseni, protoze me by se nejvic libilo, kdybych pustil program. Vyskocilo by na me okno kam bych zadal uzivatelske jmeno, heslo, portu a dal OK. Dokud bych program nezavrel, tak by to fungovalo a mohl bych ho pustit i opakovane. Snad nechi tak moc ne? :)
Dik.

11
Server / Uzavření uživatele v domovském adresáři
« kdy: 28. 05. 2020, 10:59:33 »
Ahoj chtěl bych se zeptat na to, jak lze v linuxu zajistit, aby uživatel nemohl opustit jeho kořenový adresář. Už nějakou dobu se po tom pídím na internetu, ale přiznám se, že jsem nenašel nic čemu bych rozuměl. Nevíte tedy někdo o nějakém postupu jak to realizovat?

Zatím jsem se dostal tam, že mám vytvořené uživatele a jsou jim přidělená práva tak, aby každý měl přístup pouze do svého adresáře ve složce /home. V /etc/passwd jsem zrušil uživatelům přístup k shellu a nyní už mi zbývá jen to, aby nemohli opustit home a rochat se v sytému. Sice nemá práva na to aby něco poškodil, ale pro člověka, který tomu nerozumí je to dost matoucí, že něco takového může a pro člověka nepolíbeného linuxem je to neřešitelná situace se vrátit.

Důležité je asi poznamenat i to, že uživatelé mají přes svůj účet pouze vzdálený přístup ssh k souborům databáze. Jediné co tedy uživatel potřebuje je připojit se přeš ssh do své složky, stahnout si databázi a opustit sezení. Má někdo nějaký nápad. Dík.

12
Vývoj / Segmentation fault
« kdy: 09. 03. 2020, 08:19:08 »
Ahoj chtěl bych se zeptat na problém se kterým si nevím rady. Napsal jsem si TCP server v Cčku. Občas se mi stane a je to čistě náhodný proces, že mi server spadne. Někdy se to nestane týdny a někdy se to děje několikrát denně. Nebyl jsem schopen dostat z návratové chyby víc než "Segmentation fault" tak jsem zpusil použít GDB. Díky němu mám lepší výpis toho co se tam děje:
Kód: [Vybrat]
Thread 2 "main" received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7ffff49e8700 (LWP 30711)]
_int_malloc (av=av@entry=0x7ffff0000020, bytes=bytes@entry=128)
    at malloc.c:3779
3779    malloc.c: No such file or directory.

Z tohodle také moc moudrej nejsem, protože osobně se funkci malloc vyhejbám. Používám jí velice zřídka a snažím se co nejdůsledněji kontrolovat její použití. Kód dokonce spadne v momentě, kdy ani nejsem v bloku jejího volání. Napadá mě tedy jediné a to je, že to způsobuje nějaká knihovna třetí strany. Používám pro řízení filedescriptorů epool což mi zde na fóru někdo poradil a také SQLlite.

Neřešil jste někdo něco podobného nebo nemáte nápad jak se tohoto problému zbavit?
Dík.


13
Server / Maximální počet klientů vlastního TCP serveru
« kdy: 19. 12. 2019, 12:20:54 »
Ahoj, chtel bych se zeptat, zda by mi nekdo nedokazal poradit s TCP serverem. Napsal jsem si testovaci TCP server ke kteremu se pripojuji nejaka zarizeni zvenku a server z nich kazkou minutu stahne nejaka data. Ta zarizeni jsou trvale pripojena k serveru. Toto vse plni ma ocekavani a spolehlive funguje. Problem nastal v momente, kdy jsem se rozhodnul zatizit server. Zatez byla provedena tak, ze se vytvoril TCP clienta, ktery simuluje nove zarizeni a tento client byl nekoliksetkrat spusten. Jakmile mnozstvi clientu presahlo hodnotu 1024 server se zacal chovat divne a padat. Udajne je to dane tim, ze kazdy proces v linuxu ma nastaveno maximalni mnozstvi filedescriptoru, ktere muze pri svem behu otevrit. Overil jsem tedy tento prikaz:
Kód: [Vybrat]
ulimit -a a dostal tento vypis:
Kód: [Vybrat]
[core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 14853
max locked memory       (kbytes, -l) 16384
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 14853
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

Z tohoto jsem usoudil, ze mam skutecne nastaven maly limit a tak jsem do souboru:
Kód: [Vybrat]
/etc/security/limits.confpridal tyto dva radky:
Kód: [Vybrat]
rudolf          hard     nofile          32768
rudolf          soft     nofile          32768

Po restartu PC a novem vypisu maximalniho mnozstvi jsem dostal ocekavane udaje. Jake bylo ale me prekvapeni, kdyz po vytvoreni 1024 clientu server opet spadnul. V tento moment jsem uz naprosto bezradny a nevim jak dal. Nevite kde je problem? DIK.

14
Software / Sledování průběhu práce na SW projektu
« kdy: 05. 11. 2019, 08:27:04 »
Ahoj, nevíte někdo jestli existuje nějaký program, který by dokázal jakýmkoliv způsobem sledovat jak se mění obsah nějaké složky např. psaním softwaru nebo obecně textu? Toto pak třeba někam do grafu vykreslit nebo to umožnit jinak analyzovat.

15
Server / Vlastní server pro předávání dat z databáze
« kdy: 23. 10. 2019, 19:15:37 »
Ahoj, chtěl bych se zeptat na něco ohledně TCP serveru.

Úvodem...Napsal jsem si jednovláknovej zabezpečenej TCP server SSH s použitím knihovny openssh v céčku. Až na malé nedostatky, vcelku postačuje mým požadavkům. To jest přihlášení uživatele, vytvoření přenosového kanálu, odkomunikování žádosti uživatele. Díky tomu, že uživatel si se serverem vyměňuje maximálně pár set bajtů, dokáže naráz bez problémů obsluhovat více uživatelů. Těch nebude nikdy víc než pár set celkově natož v jeden okamžik.

Nyní bych chtěl přidat novou funkci a tou je vytvoření dalšího kanálu pro uživatele. Přes tento kanál bych rád uživateli nabídnul data z sql lite databáze. Jen bych chtěl upřesnit, že uživatele nemyslím uživatele v linuxu, ale uživatele ze seznamu jiné databáze.

A teď k dotazu...zvažuju dvě varianty řešení.
1. vytvoření tohoto nového kanálu udělám v novém vlákně a tím zjednoduším výměnu dat databáze,případně budu moci přenášet i větší soubory najednou.
2. zachovám kanál ve stávajícím vlákně a budu uživateli každý soubor dávkovat v menších blocích, dokud se data neodešlou.

Něco mi říká, že druhá varianta bude složitější, ale nevim proč mi příjde jako správnější cesta. Možná jsem jen neporozumněl vláknům a jejich výhodám...

Dokázal by mě někdo nasměrovat na správnou cestu? Za případné reakce moc díky a sory pokud je to dotaz mimo...jsem jen z FEL.

Stran: [1]