GNU/Linux >> Znalost Linux >  >> Linux

Efektivně otestovat, zda je port otevřený v Linuxu?

Překvapením, které jsem nedávno zjistil, je, že Bash nativně podporuje připojení tcp jako deskriptory souborů. Použití:

exec 6<>/dev/tcp/ip.addr.of.server/445
echo -e "GET / HTTP/1.0\n" >&6
cat <&6

Jako deskriptor souboru používám 6, protože 0,1,2 jsou stdin, stdout a stderr. 5 někdy používá Bash pro podřízené procesy, takže 3,4,6,7,8 a 9 by měly být bezpečné.

Podle komentáře níže pro testování poslechu na místním serveru ve skriptu:

exec 6<>/dev/tcp/127.0.0.1/445 || echo "No one is listening!"
exec 6>&- # close output connection
exec 6<&- # close input connection

Chcete-li zjistit, zda někdo poslouchá, zkuste se připojit pomocí zpětné smyčky. Pokud selže, je port uzavřen nebo nám není povolen přístup. Poté spojení uzavřete.

Upravte to pro svůj případ použití, jako je odeslání e-mailu, ukončení skriptu při selhání nebo spuštění požadované služby.


Zde je velmi krátká s "rychlou odpovědí":Jak otestovat, zda je vzdálený TCP port otevřen ze skriptu Shell?

nc -z <host> <port>; echo $?

Používám ji s 127.0.0.1 jako „vzdálenou“ adresu.

toto vrátí "0", pokud je port otevřený, a "1", pokud je port uzavřen

např.

nc -z 127.0.0.1 80; echo $?

-z Určuje, že nc by měl pouze vyhledávat naslouchající démony, aniž by jim posílal jakákoli data. Je chybou použít tuto volbu ve spojení s volbou -l.


Tímto způsobem můžete použít netstat pro mnohem rychlejší výsledky:

V systému Linux:

netstat -lnt | awk '$6 == "LISTEN" && $4 ~ /\.445$/'

V systému Mac:

netstat -anp tcp | awk '$6 == "LISTEN" && $4 ~ /\.445$/'

Tím se vypíše seznam procesů, které naslouchají na portu (v tomto příkladu 445), nebo nevypíše nic, pokud je port volný.


K tomu můžete použít netcat.

nc ip port < /dev/null

se připojí k serveru a přímo znovu uzavře připojení. Pokud se netcat nemůže připojit, vrátí nenulový výstupní kód. Výstupní kód je uložen v proměnné $?. Jako příklad

nc ip port < /dev/null; echo $?

vrátí 0 tehdy a pouze tehdy, když se netcat mohl úspěšně připojit k portu.


Linux
  1. Jak změnit port SSH v Linuxu

  2. Jak otevřít Appimage v Linuxu

  3. Linux – sériový port Raspberrypi?

  1. Jak zkontrolovat otevřený port na vzdáleném systému Linux

  2. Jak otevřít port v Linuxu

  3. Zkontrolujte, zda je port otevřený nebo uzavřený na serveru Linux?

  1. Telnet k portu pro testování síťové konektivity

  2. Jak otestovat konektivitu portu [TCP/UDP] ze serveru Linux

  3. Vyčerpání síťového portu Linuxu