Maison  >  Article  >  Opération et maintenance  >  Utiliser l'analyse lexicale pour extraire les noms de domaine et les adresses IP

Utiliser l'analyse lexicale pour extraire les noms de domaine et les adresses IP

王林
王林avant
2019-12-25 13:08:103390parcourir

Utiliser l'analyse lexicale pour extraire les noms de domaine et les adresses IP

Contexte

Lors de l'analyse des journaux, j'ai constaté que certains paramètres de journal contenaient d'autres URL, par exemple :

Utiliser lanalyse lexicale pour extraire les noms de domaine et les adresses IP

Extrayez l'URL (xss.ha.ckers.org) dans les paramètres de la requête, puis comparez-la avec la base de données de renseignements sur les menaces. Si elle atteint la liste noire, elle sera sur la liste noire. S'il ne figure pas dans la liste noire ou dans la liste blanche de l'entreprise, vous pouvez le marquer d'abord et vous concentrer sur l'analyse plus tard.

Extraire l'URL

Il existe de nombreux articles sur Internet sur l'extraction d'URL, dont la plupart utilisent des expressions régulières. La méthode est simple mais pas très précise. Je propose ici une méthode : utiliser l'analyse lexicale pour extraire les noms de domaine et les IP. L'idée est empruntée à cet article : https://blog.csdn.net/breaksoftware/article/details/7009209 Si vous êtes intéressé, vous pouvez le vérifier. Les faits ont prouvé qu'en suivant le maître. améliore vraiment votre posture.

Le texte original est en version C++. Ici, j'en ai écrit un similaire en Python pour votre référence.

Classifications d'URL courantes

Utiliser lanalyse lexicale pour extraire les noms de domaine et les adresses IP

L'observation montre que la structure des URL sous forme IP est la plus simple : 4 nombres inférieurs à 255 sont divisés par comparaison de forme de domaine.; Complexes, mais ils ont un point commun : ils portent tous le nom de domaine de premier niveau .com.

Définir les caractères légaux :

Utiliser lanalyse lexicale pour extraire les noms de domaine et les adresses IP

Liste de noms de domaine de premier niveau :

Utiliser lanalyse lexicale pour extraire les noms de domaine et les adresses IP

Formulaire de nom de domaine extraction : tel que www.baidu.com.

Utiliser lanalyse lexicale pour extraire les noms de domaine et les adresses IP

Utiliser lanalyse lexicale pour extraire les noms de domaine et les adresses IP

Extraction de formulaire IP : tel que 192.168.1.1.

Utiliser lanalyse lexicale pour extraire les noms de domaine et les adresses IP

while (i < len(z) and z[i].isdigit()):
                i = i + 1
                ip_v1 = True
                reti = i            if i < len(z) and z[i] == &#39;.&#39;:
                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] == &#39;.&#39;:
                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] == &#39;.&#39;:
                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] == &#39;:&#39;:
                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

Extraction sous forme mixte : comme 1234.com.
Scannez la première moitié de 1234, qui est conforme aux caractéristiques du formulaire IP. Cependant, il s'avère que le code signalera une exception, le segment de code de traitement IP doit donc être ajouté pour déterminer si le suffixe est ​. ​un nom de domaine de premier niveau :

Utiliser lanalyse lexicale pour extraire les noms de domaine et les adresses IP

Résultat du test

Données du test :

Utiliser lanalyse lexicale pour extraire les noms de domaine et les adresses IP

En cours d'exécution résultat :

Utiliser lanalyse lexicale pour extraire les noms de domaine et les adresses IP

Ceci n'est qu'une version préliminaire, merci de me corriger s'il y a des bugs.

Conclusion

Dans le passé, j'écrivais simplement du code la tête baissée et j'ignorais la réflexion et le résumé par la suite. Maintenant, j'essaie de le changer, et tout en travaillant, je l'affine et le résume. Quand je rencontre quelque chose qui fait du bien, j'essaie de l'écrire comme un outil et de l'ouvrir en source libre pour le partager avec tout le monde.

Portail de codes :

https://github.com/skskevin/UrlDetect/blob/master/tool/domainExtract/domainExtract.py

Articles et tutoriels connexes recommandés : Sécurité du serveur Web

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