[Xia Chong Yu Bing] サーバーポートが開いているかどうかをテストする (コマンドライン、Python)

1 はじめに

インターフェイス テストは、主に外部システム間および内部サブシステム間の対話ポイントに使用され、特定の対話ポイントを定義し、これらの対話ポイントを使用して、いくつかの特別なルール、つまりプロトコルを通じてデータ交換を実行します。

サーバーが同時に Web サーバー、FTP サーバー、またはメール サーバーになることができるのはなぜですか? 重要な理由の 1 つは、さまざまなサービスが異なるポートを使用して異なるサービスを提供するためです。通常、TCP/IP プロトコルが規定されています。 Web はポート 80 を使用し、FTP はポート 21 などを使用し、メール サーバーはポート 25 を使用します。このようにして、コンピューターは、異なるポートを介して、相互に干渉することなく外部と通信できます。

ここに画像の説明を挿入します

2. コマンドライン

2.1 テルネット

2.1.1 ツールの紹介

Telnet プロトコルは TCP/IP プロトコル スイートのメンバーであり、インターネット リモート ログイン サービスの標準プロトコルおよび主要な方法です。これにより、ユーザーはローカル コンピュータ上でリモート ホストの作業を完了できるようになります。Telnet は tcp/ip プロトコルに基づいているため、tcp ポートが開いているかどうかを検出するためにのみ使用できます。
ここに画像の説明を挿入します
ここに画像の説明を挿入します

2.1.2 ツールの構成

telnet ip port

以前は、サーバー上の特定のポートの開放をテストする場合、通常、サーバー上で netstat –ano|findstr 「ポート番号」コマンドを使用してポート番号を表示していました。
しかし、サーバー上でポートが開いていても、クライアントがそのポートにアクセスできない場合があります。では、マシンがサーバーのポートに正常にアクセスできるかどうかをクライアントで確認するにはどうすればよいでしょうか? Telnet コマンドを使用して表示できます。
コマンドを入力して、Telnet が設定されているかどうかを確認します。

telnet

ここに画像の説明を挿入します
telnetコマンドが見つからないことが判明しました。「内部コマンドまたは外部コマンドではありません」というメッセージが表示される場合は、「プログラムと機能」で Telnet を有効にする必要があります。
設定する必要があります。コントロール パネルの [プログラムと機能] を選択し、[プログラムと機能] インターフェイスで [Windows の機能の有効化または無効化] を選択します。ポップアップされた「Windows 機能」ウィンドウで、Telnet サーバーと Telnet クライアントを確認し、設定を保存します。設定完了後、telnetコマンドを実行するにはコマンドラインウィンドウを再度開く必要がありますが、設定前に開いていたコマンドウィンドウでtelnetを実行した場合は無効となります。具体的な手順は次のとおりです。
ここに画像の説明を挿入します
[コントロール パネル] - [プログラム] - [Windows 機能の起動またはオフ] - [Telnet クライアント] を確認します。
ここに画像の説明を挿入します
ここに画像の説明を挿入します

2.1.3 ツールの使用法

次に、telnet コマンドを再度テストします。

telnet

ここに画像の説明を挿入します
設定は成功しました。
存在しないポートをもう一度テストしてみましょう。

telnet 127.0.0.1 80

ここに画像の説明を挿入します
プロンプトでエラーが報告されました。
もう一度 Baidu をテストしてみましょう。

telnet www.baidu.com 80

ここに画像の説明を挿入します
CMD コマンド ボックスに「telnet IP アドレスまたはドメイン名ポート番号」を入力し、黒いフォームがポップアップ表示されたら、接続が成功したことを意味します。
次に、次のように進めます。

ctrl+]
st

ここに画像の説明を挿入します

2.2カール

2.2.1 ツールの紹介

curl は、Web サーバーを要求するために使用される一般的に使用されるコマンド ライン ツールです。その名前はクライアントの URL ツールを意味します。

curl は非常に強力で、多数のコマンド ライン パラメータを備えています。熟練していれば、Postman などのグラフィカル インターフェイス ツールを完全に置き換えることができます。

カールは、DICT、FILE、FTP、FTPS、GOPHER、GOPHERS、HTTP、HTTPS、IMAP、IMAPS、LDAP、LDAPS、MQTT、POP3、POP3S、RTMP、RTMPS、RTSP、SCP、SFTP、SMB、SMBS、SMTP、SMTPS、をサポートします。 TELNET、TFTP、WS、WSS。curl は、TLS 証明書、HTTP POST、HTTP PUT、FTP アップロード、HTTP フォームベースのアップロード、プロキシ (SOCKS4、SOCKS5、HTTP および HTTPS)、HTTP/2、HTTP/3、Cookie、ユーザー + パスワード認証 (Basic、Plain、ダイジェスト、CRAM-MD5、SCRAM-SHA、NTLM、ネゴシエート、Kerberos、ベアラー トークンおよび AWS Sigv4)、ファイル転送リカバリ、プロキシ トンネリング、HSTS、Alt-Svc、UNIX ドメイン ソケット、HTTP 圧縮 (gzip、brotli、zstd)、 etag、並列転送、DNS over HTTPS など。

2.2.1 ツールのダウンロード

2.2.1 ツールの使用法

curl ip:port

もう一度 Baidu をテストしてみましょう。

curl www.baidu.com

ここに画像の説明を挿入します

curl 127.0.0.1
# or
curl 127.0.0.1:5000

ここに画像の説明を挿入します

2.3ウィジェット

2.3.1 ツールの紹介

コマンドライン ユーティリティは、HTTP、HTTPS、および FTP プロトコルを使用してファイルを取得します。
Wget は、HTTP および FTP プロトコル (最も普及している 2 つのインターネット プロトコル) を通じてインターネットからファイルを取得および取得できる、強力で便利なコマンド ライン ダウンロード ツールです。

2.3.2 ツールのダウンロード

https://eternallybored.org/misc/wget/
ここに画像の説明を挿入します

2.3.2 ツールの使用法

wget ip:port
# or
wget localhost:5000

ここに画像の説明を挿入します

2.4nc

2.4.1 ツールの紹介

nc コマンドは強力なネットワーク ツールです。nc は netcat の略称で、インターネット業界のスイス アーミー ナイフとして知られています。短く簡潔で実用的なため、シンプルで信頼性の高いネットワーク ツールとなるように設計されています。
たとえば、Telnet を使用して TCP ポートをテストすることは誰もがよく知っていますが、NC は Linux の TCP および UDP ポートのテストをサポートし、ポート スキャンによく使用されます。TCP で指定されたポートをリッスンするためのサーバーとして nc を使用することも可能です。または、単純なシミュレーション テスト用の UDP モード。

nc(netcat) は、TCP または UDP プロトコルを使用してネットワーク接続間でデータの読み取りおよび書き込みを行うシンプルな Unix ツールです。

2.4.2 ツールのインストール

ツールのインストールコマンド:

yum install nc -y

2.4.3 ツールの使用法

# nc -z -v -n 127.0.0.1 6379
# nc -z -v -n 172.17.26.137 6379
# nc -z ip port 或 nc -v -w 1 ip -z port
# nc –uz IP port(u代表UDP)

nc -v -w 1  ip -z port
# or
nc -v -w 1  localhost -z 80

ここに画像の説明を挿入します

2.5SSH

2.5.1 ツールの紹介

SSH (Secure Shell) は、暗号化および認証メカニズムを通じて安全なアクセスおよびファイル転送サービスを実装するネットワーク セキュリティ プロトコルです。
ここに画像の説明を挿入します

  • SSH と他の転送プロトコルの違い
    • Telnet や FTP などの従来のリモート ログインおよびファイル転送方法では、プレーン テキストを使用してデータを送信するため、多くのセキュリティ リスクが伴います。人々がネットワーク セキュリティにますます注目するようになるにつれて、これらの方法は徐々に受け入れられなくなりました。

    • SSH プロトコルは、ネットワーク データを暗号化して検証することにより、安全でないネットワーク環境でも安全なネットワーク サービスを提供します。Telnet やその他の安全でないリモート シェル プロトコルに代わる安全な代替手段として、SSH プロトコルは世界中で広く使用されており、ほとんどのデバイスが SSH 機能をサポートしています。
      ここに画像の説明を挿入します

  • SSHとSSLの違い
    • SSH と SSL はどちらも、暗号化と認証を通じて 2 つのデバイス間で送信されるデータのセキュリティを向上させるネットワーク セキュリティ プロトコルです。ただし、SSH と SSL の有効性の手法とサービスの目標には違いがあります。
    • SSH は 2 つのデバイス間に安全なトンネルを作成し、2 つのデバイス間でコマンドとデータを安全に送信できるようにします。たとえば、クライアントが SSH を介してリモートでサーバーにログインすると、サーバーを安全にリモートで管理し、サーバー上で必要なコマンドを実行できます。
    • SSL は、SSH などのコマンドを実行するのではなく、SSL 証明書を使用して 2 つのデバイス間のデータの安全な送信を保証します。たとえば、SSL 証明書がインストールされ、HTTPS が有効になっているユーザーがブラウザ経由でサーバーにアクセスすると、ブラウザとサーバーの間でデータを安全に送信できます。
    • SSH は車のようなもので、この密閉された車の中に何があるかは見えません。SSL は密閉されたコンテナのようなもので、さまざまな輸送手段で輸送できますが、コンテナの中に何が入っているかを見ることはできません。

SSH は、Linux システムで非常に一般的に使用されるツールであり、SSH クライアントを通じて、SSH サーバーを実行しているリモート マシンに接続できます。SSH クライアントの基本的な使用方法は次のとおりです。

ssh -v -p port username@ip
# or
ssh user@remote -p port

user はリモート マシン上のユーザー名です。指定しない場合は、
デフォルトで現在のユーザーになります。remote は、リモート マシンのアドレスです。IP、ドメイン名、または後で説明するエイリアスを指定できます。port は、リモート マシンの
アドレスです。 SSH サーバー監視。指定しない場合、デフォルト値は 22 です。

  • ウィンドウズ
    ここに画像の説明を挿入します
  • リナックス
    ここに画像の説明を挿入します

2.5.2 ツールの使用法

ssh -v -p port username@ip

2.6nmap

2.6.1 ツールの紹介

nmap (「ネットワーク マッパー」) は、ネットワーク調査およびセキュリティ監査用のオープン ソース ツールで、大規模なネットワークを迅速にスキャンするように設計されていますが、単一のホストでも同様に機能します。

nmap スキャナには 3 つの主な基本機能があります。1 つは、ホストのグループがオンラインかどうかを検出します。2 つ目は、ホストのポートをスキャンし、提供されているネットワーク サービスを傍受し、ホストが使用しているオペレーティング システムを推測することもできます。また、ホストが使用するオペレーティング システムに至るまで、UDP または TCP ポートを詳細に検出でき、さらに分析や操作を行うために、すべての検出結果をさまざまな形式でログに記録することもできます。

2.6.2 ツールのインストール

yum install nmap -y
#or
sudo apt install nmap

ここに画像の説明を挿入します

2.6.2 ツールの使用法

nmap 127.0.0.1 -p 80

ここに画像の説明を挿入します
ポートの検出に成功しました。

nmap 127.0.0.1 -p 8080

ここに画像の説明を挿入します
ポートの検出に失敗しました!

查看当前开放的端口:nmap localhost;
查看主机端口(1024-65535)中开放的端口:nmap -p 1024-65535 localhost;
探测目标主机开放的端口:nmap -PS ip 地址;
探测所列出的目标主机端口:nmap -p22,80,3306 ip 地址;
探测目标主机操作系统类型、端口服务名称、版本信息:nmap -sV -O localhost。
  • 範囲を指定してすべての TCP ポートをスキャンする
    -p オプションを使用してポート範囲を指定できます。TCP ポート番号が 65535 ~ 65535 であることがわかります。すべての TCP ポートをスキャンするには、オプションとして -p0-65535 を使用します。Nmap ポート スキャンのデフォルト プロトコルは TCP であるため、TCP プロトコルを指定しませんでした。
nmap -p0-65535 192.168.122.1
  • すべてのポートのスキャンを高速化
    すべてのポートをスキャンしたい場合は、非常に時間がかかります。状況がそれほど緊急でない場合は、-T5 パラメーターを使用してより高速なスキャンを使用できます。これは、Nmap の最速のスキャン レベルです。このオプションは UDP スキャンにも使用できます。
nmap  -p0-65535 192.168.122.1 -T5

3、パイソン

3.1 sock.connect_ex

ソケットモジュールのconnect_exを使用して、ポートが開いているかどうかを確認します

import socket

def check_port(ip, port):  
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  
    sock.settimeout(5)  
  
    try:  
        result = sock.connect_ex((ip, port))  
        if result == 0:  
            return True
        else:  
            return False
    except Exception as e:  
        print(f"错误: {
      
      str(e)}")  
    finally:  
        sock.close()

if __name__ == '__main__':      
    host = 'localhost'
    port = 8000
    if check_port(host, port):
        print(f'The port {
      
      port} on {
      
      host} is open.')
    else:
        print(f'The port {
      
      port} on {
      
      host} is closed.')

実行結果は以下の通りです。
ここに画像の説明を挿入します

3.2 ソケット接続

import socket

def check_port(host, port):
    try:
        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        sock.settimeout(1)
        sock.connect((host, port))
        sock.close()
        return True
    except:
        return False
    finally:  
        sock.close()

if __name__ == '__main__':
    ret = check_port('127.0.0.1', 80)
    print("80: ", ret)
    ret = check_port('127.0.0.1', 8000)
    print("8000: ", ret)

ここに画像の説明を挿入します

3.3 telnetコマンド

telnet <IP地址> <端口>
import os  
  
def check_port(ip, port):  
    result = os.system(f"telnet {
      
      ip} {
      
      port}")   #windows
    # result = os.system(f"telnet {ip} {port} > /dev/null 2>&1")  #linux
    if result == 0:  
        print(f"端口 {
      
      port} 是开放的")  
    else:  
        print(f"端口 {
      
      port} 是关闭的")

if __name__ == '__main__':
    ret = check_port('127.0.0.1', 80)
    print("80: ", ret)

    # ret = check_port('127.0.0.1', 8000)
    # print("8000: ", ret)

ここに画像の説明を挿入します

3.4 ncコマンド

nc -zv <IP地址> <端口>
import os  
  
def check_port(ip, port):  
    result = os.system(f"nc -zv {
      
      ip} {
      
      port} > /dev/null 2>&1") 
    if result == 0:  
        print(f"端口 {
      
      port} 是开放的")  
    else:  
        print(f"端口 {
      
      port} 是关闭的")

if __name__ == '__main__':
    # ret = check_port('127.0.0.1', 80)
    # print("80: ", ret)

    ret = check_port('127.0.0.1', 8000)
    print("8000: ", ret)

3.5 ping コマンド

ping <IP地址> -n <端口>
import os  
  
def check_port(ip, port):  
    # result = os.system(f"ping {ip} -n {port} > /dev/null 2>&1")  
    result = os.system(f"ping {
      
      ip} -n {
      
      port} ")  
    if result == 0:  
        print(f"端口 {
      
      port} 是开放的")  
    else:  
        print(f"端口 {
      
      port} 是关闭的")

if __name__ == '__main__':
    # ret = check_port('127.0.0.1', 80)
    # print("80: ", ret)

    ret = check_port('127.0.0.1', 8000)
    print("8000: ", ret)

ここに画像の説明を挿入します

3.6 リクエストは http ポートをチェックします

import requests  
  
def check_port(ip, port):  
    try:  
        response = requests.get(f"http://{
      
      ip}:{
      
      port}")  
        if response.status_code == 200:  
            print(f"端口 {
      
      port} 是开放的")  
        else:  
            print(f"端口 {
      
      port} 是关闭的")  
    except requests.exceptions.ConnectionError:  
        print(f"端口 {
      
      port} 是关闭的")
        
if __name__ == '__main__':
    # ret = check_port('127.0.0.1', 80)
    # print("80: ", ret)

    ret = check_port('127.0.0.1', 8000)
    print("8000: ", ret)

ここに画像の説明を挿入します

3.7 スカピーライブラリ

Scapy は Python で書かれた強力なツールで、現在、多くの優れたネットワーク スキャン攻撃ツールがこのモジュールを使用しています。このモジュールを独自のプログラムで使用して、ネットワーク データ パケットを送信、監視、解析することもできます。このモジュールは Nmap よりも低レベルです。ネットワーク内のさまざまなスキャン攻撃の動作をより直感的に理解できます。

Scapy は、ユーザーがネットワーク パケットを送信、盗聴、分析、偽造できるようにする Python プログラムです。この機能により、ネットワークの調査、スキャン、または攻撃が可能なツールの構築が可能になります。

Scapy は、強力な対話型パッケージ操作プログラムです。多数のプロトコルのパケットを偽造またはデコードし、ネットワーク経由で送信し、キャプチャし、要求と応答を照合するなどのことができます。Scapy は、スキャン、トレース、プローブ、単体テスト、攻撃、ネットワーク検出などのほとんどの古典的なタスクを簡単に処理できます。hping、arpsoof、arp-sk、arping、p0f、さらには Nmap、tcpdump、tshark の一部を置き換えることができます。

  • Scapyライブラリをインストールする
pip install scapy

ここに画像の説明を挿入します

  • コードのテスト
from scapy.all import *  
  
def check_port(ip, port):  
    # 构造一个ICMP数据包,并发送到目标IP地址和端口  
    packet = IP(dst=ip) / ICMP() / Raw(load=str(port))  
    # 发送数据包并获取响应  
    response = sr1(packet, timeout=1)  
    # 检查响应是否为ICMP错误类型  
    if response is None or response.type != ICMP.DEST_UNREACH:  
        print(f"端口 {
      
      port} 是开放的")  
    else:  
        print(f"端口 {
      
      port} 是关闭的")

if __name__ == '__main__':
    # ret = check_port('127.0.0.1', 80)
    # print("80: ", ret)

    ret = check_port('127.0.0.1', 8000)
    print("8000: ", ret)

ここに画像の説明を挿入します
実行中にエラーが発生しました。ははははは、熱心な友人が解決策を教えてくれるのを待っています。

結論

如果您觉得该方法或代码有一点点用处,可以给作者点个赞,或打赏杯咖啡;╮( ̄▽ ̄)╭
如果您感觉方法或代码不咋地//(ㄒoㄒ)//,就在评论处留言,作者继续改进;o_O???
如果您需要相关功能的代码定制化开发,可以留言私信作者;(✿◡‿◡)
感谢各位大佬童鞋们的支持!( ´ ▽´ )ノ ( ´ ▽´)っ!!!

おすすめ

転載: blog.csdn.net/hhy321/article/details/133420436