Ich habe aus einem CTF-Buch gelernt, dass das Scannen von Ports mit Python durchgeführt werden kann Beginnen Sie mit der Neugier von "Was? Kann Python das?" Dabei habe ich gelernt, dass Multithreading viel schneller ist als Single Da es eine große Sache ist, lasse ich beide zum Vergleich.
Weil es NG ist, einen Port-Scan zu einer externen Site durchzuführen Starten Sie im Experiment einen virtuellen Server mit Virtualbox auf Ihrem eigenen PC Ich habe einen Port-Scan durchgeführt. Aus diesem Grund ist "10.0.0.2" im Quellcode von ↓↓ die IP Ihres eigenen virtuellen Servers.
Referenz: https://qiita.com/najayama/items/728682bcae824c902046
Der Code, den ich am meisten gelernt habe, ist dieser. Es gibt keinen Abfall. Stattdessen ist es langsam. Im Gegenteil, weil es langsam war, konnte ich die "Wirksamkeit von Multithreading" spüren.
simple-port-scanner.py
import socket
max_port = 6000
min_port = 1
target_host = input("Input target host name or address: ")
for port in range(min_port, max_port):
#target_Versuchen Sie, eine Verbindung zum Portnummernport des Hosts herzustellen
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
return_code = sock.connect_ex((target_host, port))
sock.close()
#socket.connect_ex gibt bei Erfolg 0 zurück
if return_code == 0:
print("Port %d open!" % (port))
print("Complete!")
Referenz: https://www.valuestar.work/news/archives/20
Dies ist nicht weniger verschwenderisch als es ist. Ich benutze Thread gut, so dass es schnell genug ist, um zu sterben. 1. 1. Dann dauerte es ungefähr 1 Sekunde pro Port Es dauerte eine Weile, bis die Ports 1 bis 1024 ausgeführt wurden, aber mit diesem Programm war der Vorgang in etwa 3 Sekunden abgeschlossen. Thread ist schlecht.
Dieses Mal habe ich es als Referenz in der Eile verwendet, es ist also keine Kopie des Codes, also nicht in vergleichbarer Form. Ich wünschte, ich könnte es so gestalten, dass ich es später vergleichen könnte ...
multi-port-scanner.py
import socket
import threading
scan_range = [1, 10000];
host = "10.0.0.2";
threads = [];
ports = [];
isopen = [];
def Run(port, i):
con = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
return_code = con.connect_ex((host, port))
con.close()
if return_code == 0:
isopen[i] = 1;
count = 0;
for port in range(scan_range[0], scan_range[1]):
ports.append(port);
isopen.append(0);
thread = threading.Thread(target=Run, args=(port, count));
thread.start();
threads.append(thread);
count = count + 1;
for i in range(len(threads)):
threads[i].join();
if isopen[i] == 1:
print("%d open" % ports[i]);
Ich habe es überprüft, um den Port-Scan zu studieren Die zerstörerische Kraft des Fadens hat mich mehr beeindruckt als ich erwartet hatte. Schauen wir uns den Quellcode langsam an und organisieren ihn später
~ Ende ~
Recommended Posts