Heim >Betrieb und Instandhaltung >Sicherheit >Verwenden Sie die lexikalische Analyse, um Domänennamen und IPs zu extrahieren
Hintergrund
Bei der Analyse der Protokolle habe ich festgestellt, dass einige Protokollparameter andere URLs enthielten, zum Beispiel:
Extrahieren Sie die URL (xss.ha.ckers.org) in den Anforderungsparametern und vergleichen Sie sie dann mit der Threat Intelligence-Datenbank. Wenn sie auf die schwarze Liste gelangt, wird sie auf die schwarze Liste gesetzt. Wenn es nicht auf der Blacklist oder Whitelist des Unternehmens steht, können Sie es zuerst markieren und sich später auf die Analyse konzentrieren.
URL extrahieren
Im Internet gibt es viele Artikel zum Thema URL-Extraktion, von denen die meisten reguläre Ausdrücke verwenden. Die Methode ist einfach, aber nicht sehr genau. Ich stelle hier eine Methode zur Verfügung: Verwenden Sie die lexikalische Analyse, um Domänennamen und IPs zu extrahieren. Die Idee ist diesem Artikel entlehnt: https://blog.csdn.net/breaksoftware/article/details/7009209 Wenn Sie interessiert sind, können Sie es sich anhand der Fakten ansehen verbessert wirklich Ihre Körperhaltung.
Der Originaltext ist in C++-Version. Hier habe ich zu Ihrer Information einen ähnlichen Text in Python geschrieben.
Gemeinsame URL-Klassifizierungen
Beobachtung zeigt, dass die URL-Struktur in IP-Form am einfachsten ist: 4 Zahlen kleiner als 255 werden durch . geteilt; Domain-Formularvergleich Komplex, aber eines haben sie gemeinsam: Sie alle tragen den Top-Level-Domainnamen .com.
Definieren Sie zulässige Zeichen:
Liste der Top-Level-Domainnamen:
Formular für Domainnamen Extraktion: wie www.baidu.com
.
IP-Formularextraktion: wie 192.168.1.1.
while (i < len(z) and z[i].isdigit()): i = i + 1 ip_v1 = True reti = i if i < len(z) and z[i] == '.': i = i + 1 reti = i else: tokenType = TK_OTHER reti = 1while (i < len(z) and z[i].isdigit()): i = i + 1 ip_v2 = True if i < len(z) and z[i] == '.': i = i + 1 else: if tokenType != TK_DOMAIN: tokenType = TK_OTHER reti = 1while (i < len(z) and z[i].isdigit()): i = i + 1 ip_v3 = True if i < len(z) and z[i] == '.': i = i + 1 else: if tokenType != TK_DOMAIN: tokenType = TK_OTHER reti = 1while (i < len(z) and z[i].isdigit()): i = i + 1 ip_v4 = True if i < len(z) and z[i] == ':': i = i + 1 while (i < len(z) and z[i].isdigit()): i = i + 1 if ip_v1 and ip_v2 and ip_v3 and ip_v4: self.urls.append(z[0:i]) return reti, tokenType else: if tokenType != TK_DOMAIN: tokenType = TK_OTHER reti = 1
Gemischte Formextraktion: wie 1234.com.
Scannen Sie die erste Hälfte von 1234, die den Merkmalen des IP-Formulars entspricht. Es wurde jedoch festgestellt, dass der Code eine Ausnahme meldet, sodass das IP-Verarbeitungscodesegment hinzugefügt werden muss, um festzustellen, ob das Suffix ist ein Top-Level-Domain-Name:
Ergebnistest
Testdaten:
Wird ausgeführt Ergebnis:
Dies ist nur eine vorläufige Version. Bitte korrigieren Sie mich, wenn es Fehler gibt.
Fazit
Früher habe ich Code einfach mit gesenktem Kopf geschrieben und die Überlegungen und die Zusammenfassung danach ignoriert. Jetzt versuche ich, etwas zu ändern und es zu verfeinern und zusammenzufassen.
Code-Portal:
https://github.com/skskevin/UrlDetect/blob/master/tool/domainExtract/domainExtract.py
Empfohlene verwandte Artikel und Tutorials: Webserver-Sicherheit
Das obige ist der detaillierte Inhalt vonVerwenden Sie die lexikalische Analyse, um Domänennamen und IPs zu extrahieren. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!