Wprowadzenie: Utworzyłem funkcję bash, która jest w stanie sprawdzić, czy port jest dostępny, i zwiększa go o 1, jeśli ma wartość false, aż do określonego maksymalnego numeru portu. Np. Jeśli port 500 jest niedostępny, dostępność 501 będzie sprawdzana do 550.
Cel: Aby przetestować tę funkcję bash, muszę utworzyć szereg portów, które są w stanie LISTEN.
Próby: W systemie Windows można utworzyć port LISTEN przy użyciu następujących poleceń programu PowerShell :
PS C:\Users\u> netstat -nat | grep 1234
PS C:\Users\u> $listener = [System.Net.Sockets.TcpListener]1234
PS C:\Users\u> $listener.Start();
PS C:\Users\u> netstat -nat | grep 1234
TCP 0.0.0.0:1234 0.0.0.0:0 LISTENING InHost
PS C:\Users\u> $listener.Stop();
PS C:\Users\u> netstat -nat | grep 1234
PS C:\Users\u>
Na tej podstawie próbowałem wymyślić polecenie, które mogłoby zrobić to samo na CentOS, ale nie wiem dlaczego i zacząłem Google, nie znajdując rozwiązania, które rozwiązałoby ten problem.
Oczekiwana odpowiedź : Akceptuję i głosuję odpowiedź zawierającą polecenie, które jest w stanie utworzyć port LISTEN, a po uruchomieniu polecenia port powinien pozostać w stanie LISTEN, tj .:
[user@host ~]$ ss -nat | grep 500
LISTEN 0 128 *:500 *:*
źródło
netstat -an --tcp | awk '/LISTEN/ {sub(".*:", "", $4); print $4}' | sort -nu
. Na * BSD:netstat -an -f inet -p tcp | awk '/LISTEN/ {sub(".*\\.", "", $4); print $4}' | sort -nu
.Odpowiedzi:
Możesz użyć
nc -l
tej metody do robienia tego, czego szukasz. Niektóre implementacjenc
mają-L
opcję, która pozwala na zachowanie połączeń.Jeśli potrzebujesz ich tylko na chwilę, możesz otworzyć to polecenie w
for
pętli i otworzyć kilka portów w ten sposób.Jeśli potrzebujesz ich dłużej otwartych, możesz użyć jednego z super serwerów do stworzenia demona.
źródło
-L
Proponuję:-k
,--keep-open
akceptować wiele połączeń w trybie słuchaćmożesz utworzyć nasłuchiwanie portów za pomocą Netcat.
możesz również sprawdzić, czy port jest otwarty, czy nie, używając polecenia netstat.
możesz również sprawdzić za pomocą nc:
Odbiornik serwera Netcat:
Klient Netcat:
jeśli port nie jest otwarty
źródło
-p
lub nie działał:nc -l -p 1234
/bin/nc --> nc.traditional
(np. Debian), użyj-p
opcji, jak zalecił @Leahkim powyżej.Słuchaj za pomocą NetCat.
Sprawdź za pomocą ss
źródło
Zauważ, że
netcat
pakiet Debiana ma inną implementację, w której (przynajmniej) musisz podać port poprzez-p
opcję, a-k
opcja nie działa. Możesz napotkać ten problem przy użyciu Dockera.sudo apt install -y netcat
nc -l -p 1337
Można rozważyć użycie
openbsd-netcat
zamiast gdzie-k
działa opcja.źródło
Poniższy kod python jest pomocny w otwarciu fikcyjnego portu
'' Prosty serwer gniazd wykorzystujący wątki '' import importu importu sys HOST = '' # Nazwa symboliczna, co oznacza wszystkie dostępne interfejsy PORT = 5500 # Arbitralny nieuprzywilejowany port s = socket.socket (socket.AF_INET, socket.SOCK_STREAM) drukuj „Utworzono gniazdo”
Powiąż gniazdo z lokalnym hostem i portem
try: s.bind ((HOST, PORT)) z wyjątkiem socket.error jako msg: print 'Powiązanie nie powiodło się. Kod błędu: „+ str (msg [0]) +„ Message ”+ msg [1] sys.exit () print„ Socket bind complete ”
Zacznij słuchać na gnieździe
s.listen (10) print „Gniazdo teraz nasłuchuje”
teraz rozmawiaj z klientem
a 1: # czekaj, aby zaakceptować połączenie - blokowanie połączenia conn, addr = s.accept () print 'Connected with' + addr [0] + ':' + str (addr [1]) s.close ()
Zapisz plik i uruchom go za pomocą polecenia python, jak pokazano poniżej
~] # python portlistener.py Socket utworzony Socket bind zakończony Socket teraz nasłuchuje
Następnie możesz zweryfikować z wymaganej maszyny.
źródło