sys」タグアーカイブ

TCPポートスキャナ

TCP 1~65535までのポートスキャンを行う。
高速化のためスレッドを30000作成した。
PCが重たかったらif i%30000のところで調整する。

使用例)
python tcp_scan.py 192.168.x.y

import socket
import sys
import threading

opend_port = []

def port_scan(ip,port):
global opend_port
sd = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sd.settimeout(1)
res = sd.connect_ex((ip,port))
sd.close()
if res == 0:
opend_port.append(port)

def main():
ip = sys.argv[1]

print(f"target is {ip}")

threads = []
max_port = 65535
for i in range(1,max_port+1):
print(f"{i} of {max_port}\r",end="")
port = i
thread = threading.Thread(target=port_scan,args=(ip,port,))
threads.append(thread)
thread.start()
if i%30000 == 0:
for thread in threads:
thread.join()
threads = []

if len(threads):
for thread in threads:
thread.join()

print("opened tcp ports >")
for i in opend_port:
print(i)
return

if __name__ == "__main__":
main()

Pythonでコマンドライン引数を扱う

Pythonでコマンドライン引数を取得する。

例) python argv.py kinako mochi

sys.argv[0] → argv.py
sys.argv[1] → kinako
sys.argv[2] → mochi
len(sys.argv) → 3

ソースコード

# argv.py

import sys

def main():
print(f"sys.argvに格納されている要素 → {sys.argv}")
print(f"sys.argvの要素数 → {len(sys.argv)}")

print("sys.argvのデータへのアクセス①")
for data in sys.argv:
print(data)

print("sys.argvのデータへのアクセス②")
for i in range(len(sys.argv)):
print(sys.argv[i])

return

if __name__ == "__main__":
main()

実行と結果

python --version
Python 3.12.2
python argv.py kinako mochi

sys.argvに格納されている要素 → ['argv.py', 'kinako', 'mochi']
sys.argvの要素数 → 3
sys.argvのデータへのアクセス①
argv.py
kinako
mochi
sys.argvのデータへのアクセス②
argv.py
kinako
mochi