hers hackcademiciens vous avez déjà rencontré plusieurs scanner de ports dans ce forum et j'avoue que j'ai du baver un peu pour comprendre certains(et je ne suis pas seul ) et je me suis demandé pourquoi pas faire un tuto pour apprendre au vrai novice a comprendre les bases d'un scanner de ports. Bien sur ce que je m’apprête a vous montré est un Basic de chez Basic. pour conclure ce petit introduction, j’essaierai donc de vous montrer comment établir des connexion réseau avec python en construisant un scanner de base de port en utilisant les socket(IP/PORT)
commençons déjà par les bases en se connectant au serveur ssh qui écoute sur le port 22
nous importons d'abord le module socket et appelons la fonction connect() de la classe socket pour se connecter a l'adresse IP donné et le numéro de port. Ceci permettra d’établir une connexion TCP( SYN / SYN-ACK/ ACK le fameux handshake) .on peut envoyer les données a la socket avec la fonction send() et recevoir avec la fonction recv() comme nous l'avons fait avec bannière= sock.recv(1024) pour recevoir le message de bienvenu du serveur ssh. Bien sur la socket relève une exception si le port est fermé.
on peut exploité cet exception de différents façons .pour l'instant (puisqu'on fait dans la simplicité) nous allons utiliser un moyen tres simple : utiliser un bloc try/except qui vas capturer l’exception et nous éviter ainsi les détails sur ce qui s'est passé
formidable si on arrive a se connecter tant mieux sinon on fait la soude d'oreille
j'avoue que je parle trop continuons ;vous connaissez tous comment fonctionne la boucle for en python : demonstration
utilisons ça avec ce que je vous ai montré plus haut et ca donne
simple le code norh. nous démontrons l'utilisation de base de try/except pour passé l 'exception lancé par la socket lorsque le port est fermé. Nous montrons aussi comment exploiter une instruction conditionnelle de base avec "si" pour tenter seulement d'imprimer ouvert si le port a répondu a notre demande de connexion. Une autre façon de créer un scanner de port serait de définir un liste de ports que vous aimeriez numérisées avec un tableau ensuite bouclé le tableau.
Je sais que vous avez compris mais ça me coûte quoi de vous montrer le principe
si ça vous inspire faites en bon usage
si nous voulions gérer plusieurs hôtes a la fois on s'apuierai simplement sur une boucle imbriquée. La première pour gérer les hôtes et la deuxième pour gérer les différents ports. Un exemple de base de la façon donc imbriquer une boucle for peut être mis a profit pour faire un scanner légèrement plus complexe(bien sur qui reste Basic)
Comme vous pouvez le voir par la sortie, il boucle le tableau des hôtes et tente chaque port dans le tableau des ports passe ensuite à l'hôte suivant. Pour le scanner de port final, vous voudrez peut-être modifier vos états d'impression vers les ports d'impression seulement qui sont ouverts.
Je vous l'avez dis du basic de chez basic ; ce tuto etait la juste pour vous permettre de comprendre comment fonctionne un scanner de port(port TCP pour notre cas) et si vous avez fait de recherche sur les scanners de ports vous saurez que nmap est encore une bien meilleur option pour le balayage de port et si vous tenez a concevoir le votre je vous conseille le module scapy qui est tres riche en options.
Bon je crois que c'est la fin de ce tuto n'esitez pas a utiliser ces concepts pour élaborer de scanner plus sophistiqué et surtout j'attends des remarques, des ajouts ou des inquiétudes(bien que qu'il n y ai eu rien de difficile dans ce tuto).
Comme on dis chez nous Le lion a beau avoir quatre pattes, il ne peut emprunter deux chemins à la fois.
commençons déjà par les bases en se connectant au serveur ssh qui écoute sur le port 22
Code:
import socket sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM) sock.connect(("127.0.0.1",22)) bannière=sock.recv(1024) print bannière SSH-2.0-OpenSSH_6.6.1p1 Ubuntu-2ubuntu2
Code:
Sock.connect((« 127.0.0.1 »,23))
Traceback (most recent call last):
File "<pyshell#5>", line 1, in <module>
sock.connect(("localhost",23))
File "/usr/lib/python2.7/socket.py", line 224, in meth
return getattr(self._sock,name)(*args)
error: [Errno 111] Connection refused
Code:
try : sock.connect((« 127.0.0.1 »,23)) except : pass
j'avoue que je parle trop continuons ;vous connaissez tous comment fonctionne la boucle for en python : demonstration
Code:
for port in range(20,25) : print « [+] port : »+str(port) port : 20 port : 21 port : 22 port : 23 port : 24 port : 25
Code:
for port in range(20,25) : try : print « [+] connexion a 127.0.0.1 : »+str(port) sock.connect((« 127.0.0.1 »,port)) bannière= sock.recv(1024) if bannière : print « [+] Port « +str(port)+ » ouvert : »+banniere except:pass finally : sock.close() "[+] Port 21 ouvert : FTP server (Version 6.4/OpenBSD/Linux-ftpd-0.17) ready" "[+] Port 22 ouvert : 'SSH-2.0-OpenSSH_6.6.1p1 Ubuntu-2ubuntu2"
Je sais que vous avez compris mais ça me coûte quoi de vous montrer le principe
Code:
ports = [21,22,23,445,80,111,8080,3306] for port in ports : print port
si nous voulions gérer plusieurs hôtes a la fois on s'apuierai simplement sur une boucle imbriquée. La première pour gérer les hôtes et la deuxième pour gérer les différents ports. Un exemple de base de la façon donc imbriquer une boucle for peut être mis a profit pour faire un scanner légèrement plus complexe(bien sur qui reste Basic)
Code:
hosts = ['10.0.0.2', '10.0.0.7', '10.0.0.78'] ports = [21, 22, 23, 443, 111,3306] for host in hosts: for port in ports: try: print "[+] Connexion a "+host+":"+str(port) sock.connect((host, port)) banniere = sock.recv(1024) if banniere: print "[+] Port "+str(port)+" ouvert: "+banner except:pass finally : sock.close() [+] Connexion a 127.0.0.1:21 [+] Port 21 ouvert : FTp [+] Connexion a 127.0.0.1:22 [+] Port 22 ouvert: OpenSSH [+] Connexion a 127.0.0.1:443 [+] Connexion a 127.0.0.1:111 [+] Connexion a 127.0.0.1:3306 [+] Connexion a 127.0.0.7:21 [+] Connexion a 127.0.0.7:22 [+] Connexion a 127.0.0.7:443 [+] Connexion a 127.0.0.7:111 [+] Connexion a 127.0.0.7:3306 [+] Connexion a 127.0.0.78:21 [+] Connexion a 127.0.0.78:22 [+] Connexion a 127.0.0.78:443 [+] Connexion a 127.0.0.78:111 [+] Connexion a 127.0.0.78:3306
Je vous l'avez dis du basic de chez basic ; ce tuto etait la juste pour vous permettre de comprendre comment fonctionne un scanner de port(port TCP pour notre cas) et si vous avez fait de recherche sur les scanners de ports vous saurez que nmap est encore une bien meilleur option pour le balayage de port et si vous tenez a concevoir le votre je vous conseille le module scapy qui est tres riche en options.
Bon je crois que c'est la fin de ce tuto n'esitez pas a utiliser ces concepts pour élaborer de scanner plus sophistiqué et surtout j'attends des remarques, des ajouts ou des inquiétudes(bien que qu'il n y ai eu rien de difficile dans ce tuto).
Comme on dis chez nous Le lion a beau avoir quatre pattes, il ne peut emprunter deux chemins à la fois.
Commentaire