はじめに:ポートが利用可能かどうかを確認し、特定の最大ポート番号までfalseの場合にポートを1ずつ増分できるbash関数を作成しました。たとえば、ポート500が使用できない場合、501の可用性は550までチェックされます。
Aim:このbash関数をテストするには、LISTEN状態のポートの範囲を作成する必要があります。
試行:Windowsでは、 これらのPowerShellコマンド を使用してLISTENポートを作成できます。
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>
これに基づいて、CentOSでも同じことができるコマンドについて考えていましたが、理由がわからず、この問題を解決する解決策を見つけることなく、Googleを使い始めました。
予想される回答:LISTENポートを作成できるコマンドを含む回答を受け入れて賛成します。コマンドが実行されると、ポートはLISTEN状態に留まる、つまり:
[user@Host ~]$ ss -nat | grep 500
LISTEN 0 128 *:500 *:*
nc -l
は、あなたが探しているものを実行する方法として。 nc
の一部の実装には-L
オプションを使用すると、接続を維持できます。
少しの間だけ必要な場合は、このコマンドをfor
ループで開き、多数のポートをそのように開くことができます。
これらをより長く開く必要がある場合は、スーパーサーバーの1つを使用してデーモンを作成できます。
netcatを使用してポートリスナーを作成できます。
root@ubuntu:~# nc -l 5000
netstatコマンドを使用して、ポートが開いているかどうかを確認することもできます。
root@vm-ubuntu:~# netstat -tulpen | grep nc
tcp 0 0 0.0.0.0:5000 0.0.0.0:* LISTEN 0 710327 17533/nc
ncで確認することもできます:
Netcatサーバーリスナー:
nc -l localhost 5000
Netcatクライアント:
root@vm-ubuntu:~# nc -v localhost 5000
Connection to localhost 5000 port [tcp/*] succeeded!
ポートが開いていない場合
root@vm-ubuntu:~# nc -v localhost 5000
nc: connect to localhost port 5000 (tcp) failed: Connection refused
Netcatを使用して聞いてください。
# nc -l 5555
Ssを使用して確認する
# ss -nat|grep 5555
LISTEN 0 1 *:5555 *:*
#
Debianのnetcat
パッケージには異なる実装があり、(少なくとも)-p
オプションを介してポートを提供する必要があり、-k
オプションが機能しないことに注意してください。 Dockerを使用してこの問題が発生する場合があります。
Sudo apt install -y netcat
nc -l -p 1337
openbsd-netcat
オプションが機能する場合は、代わりに-k
の使用を検討してください。
以下pythonコードはダミーポートを開くのに役立ちます
''' Simple socket server using threads
'''
import socket
import sys
Host = '' # Symbolic name, meaning all available interfaces
PORT = 5500 # Arbitrary non-privileged port
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print 'Socket created'
#Bind socket to local Host and port
try:
s.bind((Host, PORT))
except socket.error as msg:
print 'Bind failed. Error Code : ' + str(msg[0]) + ' Message ' + msg[1]
sys.exit()
print 'Socket bind complete'
#Start listening on socket
s.listen(10)
print 'Socket now listening'
#now keep talking with the client
while 1:
#wait to accept a connection - blocking call
conn, addr = s.accept()
print 'Connected with ' + addr[0] + ':' + str(addr[1])
s.close()
ファイルを保存して、以下に示すようにpythonコマンドで実行します。
~]# python portlistener.py
Socket created
Socket bind complete
Socket now listening
次に、必要なマシンから確認できます。