Heim >Betrieb und Instandhaltung >Sicherheit >Welche Methoden gibt es zum Port-Scannen?

Welche Methoden gibt es zum Port-Scannen?

王林
王林nach vorne
2020-08-10 17:19:5513518Durchsuche

Welche Methoden gibt es zum Port-Scannen?

Ursprüngliche Ursache des Vorfalls

(Empfohlenes Tutorial: Webserversicherheit)

Der Autor schreibt ein kleines Tool, um mithilfe von Skripten automatisch die Informationen zu sammeln, die während des Penetrationstests gesammelt werden müssen. Es gibt einen schwierigen Teil in diesem Modul, nämlich das Sammeln von Port-Banner-Informationen. Zuerst habe ich versucht, mehr als 20 IPs mit Python + NMAP + Multi-Thread-Scannen zu scannen, aber das Warten war erschöpft. . . Das Ziel des Autors ist es, mehr als 200 IPs zu scannen. Als nächstes werde ich die Port-Scan-Technologie analysieren.

1. nmap-Erkennungsport

nmap kann beim Scannen mehrerer Hosts den Parameter --min-hostgroup festlegen, um mehrere Hosts gleichzeitig zu scannen, diese Hosts in Gruppen aufzuteilen und dann jeweils eine Gruppe zu scannen.

Beispiel:

--min-hostgroup 50 nmap verwendet 50 Hosts als Gruppe und die Ergebnisse werden erst angezeigt, wenn 50 Hosts gescannt wurden.

#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)

Welche Methoden gibt es zum Port-Scannen?

Wie im Bild gezeigt, dauert es 318 Sekunden, um 10 IPs auszuführen.

2. Masscan-Erkennungsport

(1) Python-Masscan aufrufen

Standardmäßig sendet Masscan Syn-Datenpakete. Wenn der Zielhost Ack+Syn zurückgibt, bedeutet dies, dass der Port geöffnet ist. Der spezifische Prozess ist wie folgt: A: 192.168.70.142 B: 192.168.0.143 Offener Port 3306 3) A ->

Verwendung

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

3. Der Socket-Erkennungsport

Socket-Erkennungsport sendet ein unvollständiges Drei-Wege-Handshake-Paket wie folgt:

A:192.168.70.142

B:192.168.0.143 Offener Port 3306Welche Methoden gibt es zum Port-Scannen?

A empfängt B und kehrt zurück. Nach dem Syn+ack-Paket verwirft A die Daten.

Erkennung ungeöffneter Ports

A sendet syn, B öffnet Port 33 nicht, daher werden RST-Pakete zurückgegeben. Welche Methoden gibt es zum Port-Scannen?

扫描扫描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格式。


Es dauerte 26,3 Sekunden, fast 2,6 Sekunden, um 10 IPs zu erkennen.

4. Telnet-Erkennungsport: Der Telnet-Erkennungsport verwendet eine vollständige Drei-Wege-Handshake-Verbindung Öffnen Sie Port 3306telnet 192.168 0,143 3306

Der Vorgang ist wie folgt:

Verwenden Sie TCP-Drei-Wege-Handshake, um eine Verbindung herzustellen: SYN -> SYN+ACK + ACK

Welche Methoden gibt es zum Port-Scannen?

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

Welche Methoden gibt es zum Port-Scannen?

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

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

Welche Methoden gibt es zum Port-Scannen?

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

5、nc探测端口

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

探测开放端口的数据包

Welche Methoden gibt es zum Port-Scannen?

探测未开放端口的数据包

Welche Methoden gibt es zum Port-Scannen?

端口开放,返回值为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

Welche Methoden gibt es zum Port-Scannen?

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

总结

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

Das obige ist der detaillierte Inhalt vonWelche Methoden gibt es zum Port-Scannen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:secpulse.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen