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). 

Search the boards