背景
ログを分析したところ、一部のログ パラメーターに他の URL が含まれていることがわかりました。例:
# #リクエストパラメータ内のURL(xss.ha.ckers.org)を抽出し、脅威インテリジェンスデータベースと比較し、ブラックリストにヒットした場合はブラックリストに登録されます。ブラックリストまたは会社のホワイトリストにない場合は、最初にマークを付けて、後で分析に集中できます。 URL の抽出 インターネット上には URL の抽出に関する記事が数多くありますが、そのほとんどは正規表現を使用しており、方法は単純ですがあまり正確ではありません。ここでは、字句解析を使用してドメイン名と IP を抽出する方法を提供します。このアイデアは次の記事から借用しています:https://blog.csdn.net/breaksoftware/article/details/7009209. 興味がある場合は、ご覧ください。マスターに従うことが事実によって証明されました。本当に姿勢が良くなります。
元のテキストは C バージョンですが、参考までに Python で同様のものを書きました。 一般的な URL 分類 観察によると、URL 構造の IP 形式は最も単純です。255 未満の 4 つの数値が除算されます。; ドメイン形式の比較 複雑ですが、これらには共通点があります。それは、すべてのトップレベル ドメイン名が .com であるということです。 有効な文字の定義: トップレベル ドメイン名のリスト: ドメイン名フォーム抽出:www.baidu.comなど。
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
IP フォームの特性に準拠する 1234 の前半をスキャンしますが、コードが例外を報告することが判明したため、サフィックスが であるかどうかを判断するために IP 処理コード セグメントを追加する必要があります。トップレベル ドメイン名:
https://github.com/skskevin/UrlDetect/blob/master/tool/domainExtract/domainExtract.py
## 推奨関連記事チュートリアル:
以上が字句解析を使用してドメイン名と IP を抽出するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。