Python でポート スキャナーを作成する

Manav Narula 2023年6月21日
Python でポート スキャナーを作成する

このチュートリアルでは、Python でポート スキャナーを作成する方法を示します。

Python でポート スキャナーを作成する

まず、ポートの基本を学びましょう。 ポートは、サーバーとクライアントの間で何らかの情報が通信されるネットワークのエンドポイントです。

ポートスキャナーは、特定のホストで通信用に開いているポートを特定できるシンプルなアプリケーションです。

ポート スキャナーを使用すると、接続用に開いているポートを特定し、ポートで実行中のサービスを知ることができます。 このタイプのツールは、潜在的な侵入攻撃に対するセキュリティ対策をテストするのに役立ちます。

情報は、一般に TCP および UDP プロトコルを使用して、インターネット上で交換されます。 これらのプロトコルのポート範囲は 0 ~ 65535 で、3つの範囲に分けられます。

システム ポートの範囲は 0 ~ 1023、ユーザー ポートの範囲は 1024 ~ 49151 で、これより上のすべてのポートは動的ポートです。

ポートスキャナーを使用して、すべてのポートの接続を個別に確認し、接続が成功したかどうかを確認します。 Python でこれを実現する方法について説明します。

  • socket モジュールをインポートします。
  • socket オブジェクトを作成し、特定のホスト サーバーのポートへの接続を試みます。
  • for ループを使用してポートの範囲を繰り返し、各ポートの接続を個別に試行します。
  • 接続をテストする関数を作成し、tryexcept ブロックを使用して、接続の成功に基づいて TrueFalse を返します。
  • try ブロックでは、socket.connect() 関数を使用して接続を作成しようとします。 接続が成功すると、ブロックは True を返します。
  • 接続が失敗した場合、例外が発生し、except ブロックでキャッチされ、False が返されます。

これは、次のコードで実装されています。

import socket

t = "https://www.hackthissite.org/"
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)


def check_port(port):
    try:
        c = s.connect((t, port))
        return True
    except:
        return False


for a in range(200):
    if check_port(a):
        print("Port", a)

上記のコードは、最初の 200 個のポートをチェックして、接続用に開いているポートがあるかどうかを確認します。 これを許可するホストのみをチェックする必要があることに注意してください。

シンプルなポート スキャナーを変更して、いくつかのエキサイティングな機能を追加できます。 socket.settimeout() 関数を使用して、関数に時間を指定することでタイムアウトを設定できます。

この関数で設定された時間よりも時間がかかる場合、接続は中止されます。

Python でポート スキャナーのパフォーマンスを向上させるもう 1つの方法は、マルチスレッドの概念を使用することです。 Python の threads モジュールを使用して、アプリケーションの同時実行性を高め、実行時間を改善できるスレッドを作成および管理できます。

著者: Manav Narula
Manav Narula avatar Manav Narula avatar

Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.

LinkedIn