Python でポート スキャナーを作成する
このチュートリアルでは、Python でポート スキャナーを作成する方法を示します。
Python でポート スキャナーを作成する
まず、ポートの基本を学びましょう。 ポートは、サーバーとクライアントの間で何らかの情報が通信されるネットワークのエンドポイントです。
ポートスキャナーは、特定のホストで通信用に開いているポートを特定できるシンプルなアプリケーションです。
ポート スキャナーを使用すると、接続用に開いているポートを特定し、ポートで実行中のサービスを知ることができます。 このタイプのツールは、潜在的な侵入攻撃に対するセキュリティ対策をテストするのに役立ちます。
情報は、一般に TCP および UDP プロトコルを使用して、インターネット上で交換されます。 これらのプロトコルのポート範囲は 0 ~ 65535 で、3つの範囲に分けられます。
システム ポートの範囲は 0 ~ 1023、ユーザー ポートの範囲は 1024 ~ 49151 で、これより上のすべてのポートは動的ポートです。
ポートスキャナーを使用して、すべてのポートの接続を個別に確認し、接続が成功したかどうかを確認します。 Python でこれを実現する方法について説明します。
-
socket
モジュールをインポートします。 -
socket
オブジェクトを作成し、特定のホスト サーバーのポートへの接続を試みます。 -
for
ループを使用してポートの範囲を繰り返し、各ポートの接続を個別に試行します。 -
接続をテストする関数を作成し、
try
とexcept
ブロックを使用して、接続の成功に基づいてTrue
とFalse
を返します。 -
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 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