Posted By: snake (:q!) on 'CZunix' Title: nc - jak je to mozne? Date: Thu Nov 30 19:34:23 2006 Hi all! Tohle jsem zkousel sice na windoze, ale pod cygwinem, a predpokladam, ze na unixu se to chova uplne stejne. Nemohu pochopit nasledujici zkousku: ~$nc -p 1000 localhost 1000 ahoj ahoj punt! ~$ Vysvetleni pro ty, co nechteji cist manpage: Punt! se objevi po konci sessny, tj. kdyz stisknete ctrl+c. Pred skoncenim vypise netstat opravdu spojeni z localhost port 1000 na localhosta port 1000; prvni ahoj jsem psal z klavesnice, druhe prislo jako odpoved. Jeden si rekne, ze za tim preci vubec nic neni, presne tohle jsem preci chtel danym prikazem. Eee, takhle jednoduche to neni. Ten prikaz rika, ze se chci pripojovat spojenim, ktere pobezi z lokalniho portu 1000 (to je to "-p 1000") naadresu localhost:1000 (to je zbytek prikazu). Cili kdybych na tom portu uz mel nejakeho naslouchajiciho demona, pak by se na nej mel byt schopny pripojit (coz by se dalo zaridit napr. prikazem "nc -l -p 1000", kde to -l znamena "listen"). Jenze pokud takoveho daemona nastartuju, pak dokud bude cekat na spojeni, nepujde lokalni port 1000 pouzit ani na prichozi, ale dokonce ani na odchozi spojeni - nc si postezuje, ze mu nejde udelat bind. Jakmile se spojeni naslouchajiciho "serveru" navaze (port 1000 prestane byt "listening"), bude pouzitelny jak pro odchozi, tak i pro prichozi spojeni (prichozi=novy listen). A ted zpatky k tomu prikazu z portu 1000 na nej samotny: i kdybych predpokladal, ze nc je tak chytry, ze se forkne a zacne nejdrive naslouchat a pak se pokusi o spojeni, pak mi to diky predchozimu odstavci musi selhat. Pokud ovsem predchozi listen neudela, nema se preci kam spojit!? A presto se spoji! Huh. Tak jak to ten smradoch vychytrala prosim dela? Co je za tim za magii? snake P.S. Pokud by nekdo byl v opravdove forme, mohl by jeste pridat vysvetleni, jestli je mozne navazani dvou tcp spojeni z pocitacu, ktere jsou oba za NATem (presneji PATem), pokud k tomu vyuziji nejakeho prostrednika, na ktereho se oba mohou volne pripojit jako k dohazovaci. Samotne TCP spojeni jiz pak ale nesmi bezet pres dohazovace. Umim vytvorit spojeni z konkretniho sveho portu na urcenou dvojici IP:port. A protoze TCP spojeni je urceno dvema dvojicemi IP:port, mam vlastne vsechno potrebne. Jedine, co mi v tom nesedne je to, ze oba ovsem zacnou vysilat SYN paket a ani jeden neodpovi SYN+ACK (plus predpokladam, ze budou spatne jeste seriova cisla apod.). Je tohle nejak resitelne? Zprostredkovavat plnohodnotna TCP spojeni i za NATem, ktery zadne takove "za zadnou cenu" nikdy nenecha projit (tj. zadny port forwarding apod.)?Pro jednoduchost predpokladejme, ze NAT/PAT prelozi standardne pouze IP, pricemz k prekladu portu se rozhodne teprve tehdy, kdyz je to nevyhnutelne (port je jiz obsazen jinym spojenim).