Maison >Opération et maintenance >Sécurité >Quelles sont les méthodes d'analyse des ports ?

Quelles sont les méthodes d'analyse des ports ?

王林
王林avant
2020-08-10 17:19:5513519parcourir

Quelles sont les méthodes d'analyse des ports ?

Cause initiale de l'incident

(Tutoriel recommandé : Sécurité du serveur Web)

Le l'auteur écrit un petit outil qui utilise des scripts pour collecter automatiquement les informations qui doivent être collectées lors des tests d'intrusion. Il y a une partie difficile dans ce module, qui est la collecte d'informations sur la bannière de port. Au début, j'ai essayé d'utiliser python+nmap+analyse multi-thread pour analyser plus de 20 IP, et l'attente a été épuisée. . . L'objectif de l'auteur est d'analyser plus de 200 adresses IP. Ensuite, j'analyserai la technologie d'analyse des ports.

1. Port de détection nmap

nmap peut définir le paramètre --min-hostgroup lors de l'analyse de plusieurs hôtes. La définition de ce paramètre peut analyser plusieurs hôtes en parallèle et diviser ces hôtes en groupes. puis scannez un groupe à la fois.

Exemple :

--min-hostgroup 50 nmap utilise 50 hôtes en tant que groupe, et les résultats ne seront pas affichés tant que 50 hôtes n'auront pas été analysés.

#coding=utf-8
import nmap 
from queue import Queue
from threading import Thread
def portscan(ip):
    portlist = []
    nm = nmap.PortScannerYield()
    for r in nm.scan(ip,ports='1-10000',arguments='-sS --min-hostgroup'):
        m = r[1]['scan'][ip]['tcp']
        for p in m:
            temp = str(p) + "----" +m[p]['state']
            portlist.append(temp)
    print(portlist)
class Consumer(Thread):
    def __init__(self, q):
        Thread.__init__(self)
        self.q = q
    def run(self):
        while  not self.q.empty():
            ip = self.q.get()
            try:
                portscan(ip)
            except Exception as e:
                print(e)
                continue
def producer(ip_list):
    num = 10
    threads = []
    q = Queue()
    for i in ip_list:
        print(i)
        q.put(i)
    threads = [Consumer(q) for i in range(0,int(num))]
    for t in threads:
        t.start()
    for t in threads:
        t.join()
ip_list =['120.78.207.76', '120.78.207.231', '120.78.207.18', '120.78.207.233', '120.78.207.165', '120.78.207.48', 
'120.78.207.112', '120.78.207.27', '120.78.207.51', '120.78.207.8']
producer(ip_list)

Quelles sont les méthodes danalyse des ports ?

Comme le montre l'image, il faut 318 secondes pour exécuter 10 IP.

2. Port de détection Masscan

(1) Appelez python masscan

Par défaut, masscan envoie des paquets de données syn si l'hôte cible renvoie ack+syn, alors indique que. le port est ouvert. Le processus spécifique est le suivant

A:192.168.70.142

B:192.168.0.143 Ouvrir le port 3306

(1)A->B syn

( 2)B->A syn+ack

(3)A->B RST

Quelles sont les méthodes danalyse des ports ?

Détecter les ports non ouverts

A->B syn

B->A rst

Quelles sont les méthodes danalyse des ports ?

Exemple :

def portscan(ip):
    mas = masscan.PortScanner()
    mas.scan(ip,ports='1-65535')
    print(mas.scan_result)

Utiliser la commande système pour détecter

Comment utiliser

扫描扫描443端口的B类子网
Masscan 10.11.0.0/16 -p443
扫描80或443端口的B类子网
Masscan 10.11.0.0/16 -p80,443
扫描100个常见端口的B类子网,每秒100,000个数据包
Masscan 10.11.0.0/16  --top-ports 100 -rate 100000

结果输出
-oX filename:输出到filename的XML。
-oG filename:输出到filename在的grepable格式。
-oJ filename:输出到filename在JSON格式。

3. Port de détection de socket

Le port de détection de socket envoie un paquet de poignée de main à trois voies incomplet comme suit,

A:192.168.70.142

B:192.168.0.143 Ouvrez le port 3306

Après que A ait reçu le paquet syn+ack renvoyé par B, A rejette les données .

Quelles sont les méthodes danalyse des ports ?

Détection des ports non ouverts

A envoie la synchronisation, mais B n'ouvre pas le port 33, donc les paquets RST sont renvoyés.

Quelles sont les méthodes danalyse des ports ?

def portscan(ip,port):
    try:
        s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
        s.settimeout(0.2)
        status = s.connect_ex((ip,port))
        if status == 0:
            temp_str = str(ip) + "---" + str(port) + "---open"
            port_list.append(temp_str)
        else:
            pass
    except Exception as e:
        pass
    finally:
        s.close()

Quelles sont les méthodes danalyse des ports ?

Il a fallu 26,3 secondes pour détecter 10 IP, soit près de 2,6 secondes.

4. Port de détection Telnet

Le port de détection telnet utilise une connexion complète à trois voies, utilisez la commande telnet ip port, le processus d'envoi de paquets est le suivant

A:192.168.70.142

B:192.168.0.143 Ouvrir le port 3306

telnet 192.168.0.143 3306

Le processus est le suivant :

Utiliser TCP poignée de main à trois pour établir une connexion : SYN -> SYN+ ACK + ACK

Quelles sont les méthodes danalyse des ports ?

探测不存在端口,发送SYN数据包,然后RST包丢弃。

Quelles sont les méthodes danalyse des ports ?

如果有返回值,则说明端口开放,否则则端口关闭。

def portscan(ip,port):
     try:
         t = telnetlib.Telnet(ip,port=port,timeout=0.2)
         if t:
             temp_str = str(ip) + '---' + str(port)
             port_list.append(temp_str)
 except Exception as e:
     print(e)
     pass

Quelles sont les méthodes danalyse des ports ?

探测10个ip花费了27.8s差不多一个2.7s。

5、nc探测端口

nc探测端口采用完整的三次握手连接,使用命令 nc -v -w 1 -z ip port,发包过程和telent 探测一样。

探测开放端口的数据包

Quelles sont les méthodes danalyse des ports ?

探测未开放端口的数据包

Quelles sont les méthodes danalyse des ports ?

端口开放,返回值为0,可以依此作为判断依据。

def portscan(ip,port):
     command = 'nc -v -w 1 -z {0} {1}'.format(ip,port)
     m = os.system(command)
     if m == 0:
         temp_str = str(ip) + "---" + str(port)
         port_list.append(temp_str)
     else:
         pass

Quelles sont les méthodes danalyse des ports ?

备注:比如你想探测某个指定的端口开放情况,推荐使用nc。

总结

nmap 作为扫描端口的神器,扫描出的结果比其他几种方式要详细。如果追求效率的话,建议采用socket。相比于nmap,socket会存在漏报情况,笔者在测试某主机时,nmap扫出了8888端口,但是socket没有。

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer