Sådan åbnes en TCP / UDP stikkontakt i en bash shell

Antag, at du vil åbne en TCP / UDP-stik på en Linux-server af forskellige årsager. For eksempel vil du kontrollere, om en bestemt adresse / port er tilgængelig. Eller du vil hente en ekstern webside eller påberåbe et afslappet API til test. Eller du vil oprette forbindelse til en ekstern IRC-server osv. Men hvad hvis Linux-serveren du er på, er meget restriktiv? På den server er ingen af ​​standardværktøjer som f.eks netcat, curl eller wget kan være til rådighed, og du er ret meget tilbage med bash shell kun.

Faktisk er en af ​​de indbyggede funktioner i bash shell at åbne TCP / UDP sockets via / dev / tcp (og / dev / udp) enhedsfil. I resten af ​​denne tutorial, lad os finde ud af hvordan man åbner en TCP / UDP stikkontakt, og læser til og skriver fra stikkontakten i bash shell.

Åbn eller luk et TCP / UDP stik i Bash Shell

I en nøddeskal kan du åbne en TCP / UDP-stikkontakt ved hjælp af følgende syntaks i bash shell.

$ exec {file-descriptor} / dev / {protocol} / {host} / {port}

"File descriptor" er et unikt ikke-negativt heltal forbundet med hver stikkontakt. Filbeskrivelser 0, 1 og 2 er forbeholdt henholdsvis stdin, stdout og stderr. Således skal du angive 3 eller højere (alt efter hvad der er ubrugt) som en filbeskrivelse.

"<& Gt" betyder at stikket er åbent til både læsning og skrivning. Afhængigt af dit behov kan du åbne en stikkontakt til skrivebeskyttet (<) eller skrivebeskyttet (>).

Feltet "protokol" kan enten være tcp eller udp. Feltet "vært" og "port" er selvforklarende.

For eksempel at åbne en tovejs TCP-stikkontakt til xmodulo.com med HTTP-port og filbeskrivelse 3:

$ exec 3 / dev / tcp / xmodulo.com / 80

Når engang er åbnet, kan en læse / skrive stikkontakt lukkes ved hjælp af følgende syntaks. Den første kommando lukker en indgangstilslutning, mens sidstnævnte lukker en udgangstilslutning.

$ exec {file-descriptor} & -

Læs fra eller skriv til en TCP / UDP stik i Bash Shell

Når en stikkontakt er åbnet, kan du skrive en besked til eller læse en besked fra stikket.

At skrive en besked gemt i $ MESSSAGE til en stikkontakt:

$ echo -ne $ MESSAGE> & 3 $ printf $ MESSAGE> & 3

At læse en besked fra en stikkontakt og gemme den i $ MESSAGE:

$ read -r -u-n $ MESSAGE 

TCP / UDP Socket Eksempler i Bash Shell

Her præsenterer jeg flere shell script eksempler, der åbner og bruger en TCP socket.

1. Hent en ekstern webside og udskrive dens indhold

#! / bin / bash exec 3 / dev / tcp / xmodulo.com / 80 ekko -e "GET / HTTP / 1.1rnhost: xmodulo.comrnConnection: closernrn"> & 3 kat 

2. Vis en ekstern SSH-serverversion

#! / bin / bash exec 3 </ dev / tcp / 192.168.0.10 / 22 timeout 1 kat

Faktisk kan ovennævnte script forkortes til følgende one-liner:

#! / bin / bash timeout 1-kat </ dev / tcp / 192.168.0.10 / 22

3. Vis den aktuelle tid fra nist.gov

#! / bin / bash cat </dev/tcp/time.nist.gov/13

4. Kontroller internetforbindelsen

#! / bin / bash HOST = www.mit.edu PORT = 80 (ekko> / dev / tcp / $ {HOST} / $ {PORT}) &> / dev / null hvis [$? -eq 0]; derefter ekko "Connection succes" andet ekko "Connection mislykket" fi

5. Udfør TCP port scanning mod en fjern vært

#! / bin / bash vært = $ 1 port_first = 1 port_last = 65535 for ((port = $ port_first; port / dev / tcp / $ vært / $ port)> / dev / null 2> & 1 && echo "$ port åben " Færdig

Afsluttende bemærkninger

Åbning af en stikkontakt i bash kræver, at bash shell har net-omdirigeringer aktiveret (dvs. kompileret med "-enable-net-omdirigeringer"). Gamle distributioner kan have denne funktion deaktiveret for bash, i hvilket tilfælde vil du støde på følgende fejl.

/dev/tcp/xmodulo.com/80: Ingen sådan fil eller mappe

Udover bash er stikkontakten kendt for at være tilgængelig i andre skaller som ksh eller zsh.

Xmodulo

relaterede indlæg

Efterlad et svar

Dette websted bruger Akismet til at reducere spam. Lær, hvordan dine kommentardata behandles.