COVID-19の状況や、そもそも日中が暑くて外出する気に慣れないため

Kali Linuxでのnmap・・・・まではいきませんが、

 

Python 3ポートスキャンのプログラムをサクッと作ってみました。

※使用するにあたっては、クローズドの、誰かの迷惑にならないようにしてください。

 ちなみに、下記のプログラムは、自分のUbuntu MATE 20.04 LTSの中のポート

 をスキャンするものになっています。

 

1. 簡単なモノ

 

import socket

host = "127.0.0.1"

for ports in range(1,65535):

    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    result = sock.connect_ex((host, ports))
    sock.close()

    if result == 0:
        print("Port %d open" % (ports))

print('Finish ! ')

 

結果

Port 631 open
Port 3306 open
Port 6942 open
Port 10026 open
Port 33060 open
Port 36830 open
Port 63342 open
Finish ! 

 

2. マルチスレッドのモノ

これだけではつまらないので、マルチスレッドを使ってやってみました。

 

import socket
import threading

scan_port_range = [1, 65525]

host = "127.0.0.1"

threads = []
ports = []
port_open = []

def scan_port(port, i):
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    return_code = sock.connect_ex((host, port))
    sock.close()

    if return_code == 0:
        port_open[i] = 1

count = 0

for port in range(scan_port_range[0], scan_port_range[1]):
    ports.append(port)
    port_open.append(0)
    thread = threading.Thread(target=scan_port, args=(port, count))
    thread.start()
    threads.append(thread)
    count = count + 1

for i in range(len(threads)):
    threads[i].join()
    if port_open[i] == 1:
        print("Port %d open" % ports[i])

print('Finish ! ')

結果

Port 631 open
Port 3306 open
Port 6942 open
Port 10026 open
Port 33060 open
Port 43626 open
Port 63342 open
Finish ! 

 

結果は同じ、されど手法は異なるため、マルチスレッドを利用する場合の参考になると思いますが、夜にはもっと凄いものがゴロゴロしているので、Python3の入門版として見て頂ければと思います。

 

C言語でも、同様なものが作れますが、インタープリティブに作って動かせるため、便利ではありますね。
(速度は、C言語の方がネイティブに動作するため早いですが・・・)