J'ai appris dans un livre de la CTF que l'analyse des ports peut être effectuée avec python Commencez par la curiosité de "Quoi? Python peut-il faire ça?" Au cours du processus, j'ai appris que le multi-threading est beaucoup plus rapide que d'exécuter un seul Comme c'est un gros problème, je laisse les deux pour comparaison.
Parce qu'il est mal de faire une analyse de port vers un site externe Dans l'expérience, démarrez un serveur virtuel à l'aide de Virtualbox sur votre propre PC J'ai fait une analyse de port dessus. C'est pourquoi "10.0.0.2" écrit dans le code source de ↓↓ est l'adresse IP de votre propre serveur virtuel.
Référence: https://qiita.com/najayama/items/728682bcae824c902046
Le code que j'ai le plus appris est celui-ci. Il n'y a pas de gaspillage. Au lieu de cela, c'est lent. Au contraire, parce que c'était lent, je pouvais ressentir "l'efficacité du multi-threading".
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_Tentative de connexion au port de numéro de port de l'hôte
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
return_code = sock.connect_ex((target_host, port))
sock.close()
#socket.connect_ex renvoie 0 en cas de succès
if return_code == 0:
print("Port %d open!" % (port))
print("Complete!")
Référence: https://www.valuestar.work/news/archives/20
Ce n’est pas moins un gaspillage qu’il ne l’est. J'utilise bien le fil, donc c'est assez rapide pour mourir. 1. 1. Ensuite, il a fallu environ 1 seconde par port Il a fallu un certain temps pour faire les ports 1 à 1024, mais avec ce programme, le processus s'est terminé en environ 3 secondes. le fil est mauvais.
Cette fois, je l'ai utilisé comme référence dans la précipitation, donc ce n'est pas une copie du code, donc ce n'est pas sous une forme comparable. J'aimerais pouvoir le façonner afin de pouvoir le comparer plus tard ...
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]);
Je l'ai vérifié pour étudier le scan des ports Le pouvoir destructeur du fil m'a laissé une impression plus que je ne m'y attendais. Regardons lentement le code source et organisons-le plus tard
~ Fin ~
Recommended Posts