Hello Blend,
75 et 85 sont des nombres magiques, on ne sait pas d'où ils sortent, qu'est-ce qu'ils représentent et surtout pourquoi ils sont dans ce code...
Pourquoi mettre une fonction en paramètre, elle se trouve (la fonction scan) dans les variables globales et peut être appelée à n'importe quel moment et à n'importe quel endroit dans le code ?
Idem que plus haut, la variable scan n'est pas utile... par contre ajouter un paramètre représentant la liste des ports serait pas mal, on va y revenir en dessous !
Quand je crée des constantes dans un programme, c'est pour éviter d'avoir des nombres magiques, ça permet de rendre lisible mon code et surtout comprendre...
En mettant dans des constantes, des chaînes de caractères, tu fais double emploi, car tu réécris le nom de ta constante dans une chaîne... Ça ne le rendra pas plus explicite, donc c'est assez inutile de le faire.
Autre chose: Pas de print dans une fonction, comment feras-tu lorsque tu voudras faire ton scanner dans ton interface ? Tu recommenceras tout ? Crées toi simplement une fonction pour tester l'affichage (avec des print), que tu pourras par la suite retirer lors de la mise en place de ton interface.
-----------------------------------------------
En admettant que tu es l'utilisateur entrant une paramètre -p permettant d'indiquer le minimum et le maximum-1 à scanner, ma fonction est très utile et efficace avec un générateur.
On l'utilise de cette manière
Bonne continuation...
Code:
def loop(scan): for port in range(75,85): print(scan(ip,port))
Pourquoi mettre une fonction en paramètre, elle se trouve (la fonction scan) dans les variables globales et peut être appelée à n'importe quel moment et à n'importe quel endroit dans le code ?
Code:
def range_p(scan): for port in PORT_L: print(scan(ip,port))
Code:
TIMEOUT = 0.1 CLOSE = "CLOSE" OPEN = " -- OPEN -- " UNREACHABLE = "UNREACHABLE" TIMEOUT_ERROR = "TIMEOUT_ERROR" GAIERROR = "GAIERROR: No address associated with hostname" HERROR = "HERROR: Unknown host" CONNERR = "URL or IP unreachable"
En mettant dans des constantes, des chaînes de caractères, tu fais double emploi, car tu réécris le nom de ta constante dans une chaîne... Ça ne le rendra pas plus explicite, donc c'est assez inutile de le faire.
Autre chose: Pas de print dans une fonction, comment feras-tu lorsque tu voudras faire ton scanner dans ton interface ? Tu recommenceras tout ? Crées toi simplement une fonction pour tester l'affichage (avec des print), que tu pourras par la suite retirer lors de la mise en place de ton interface.
-----------------------------------------------
En admettant que tu es l'utilisateur entrant une paramètre -p permettant d'indiquer le minimum et le maximum-1 à scanner, ma fonction est très utile et efficace avec un générateur.
Code:
def range_p(ip, ports): """ ports configuration example: 75-85 (nmap format) return generator of ports opened """ mini, maxi = ports.split('-') for port in range(mini, maxi+1): state, p = scan(ip, port) if state is OPEN: yield p # enregistrement en mémoire vive du port (très rapide)
Code:
for p in range_p(..., "75-85"): print p # Affichera tous les ports ouvert pour l'IP choisie
Commentaire