- blogs:
- cles::blog
2022/02/27

.eml ファイルから URL だけを抽出する



最近、HTML で書かれたによるフィッシングメールが良く届くので、そのたびにフィッシング対策協議会やGoogle にフィッシング詐欺の URL を報告するようにしています。
ただ、フィッシング詐欺の URL は HTML にしか書かれていないことが多く、僕は普段メールをプレーンテキストで読んでいる関係で、いちいちメールの表示形式を切り替えなければフィッシング詐欺の URL を取り出すことができないので、その作業がちょっと面倒でした。
† .eml の URL を自動抽出してみる
というわけで、.eml ファイルに含まれる HTML パートから URL を抽出するスクリプトを Python で書いてみました。
Beautiful Soup を使っているので pip install beautifulsoup4
という感じでインストールしておく必要があります。これ以外は OS 標準のモジュールで動作します。
distil_url.py
import email
from email.header import decode_header
from email.utils import parsedate_to_datetime
from bs4 import BeautifulSoup
import glob
import re
import os
import sys
IGNORE_PAT = re.compile(r'^(#|mailto|file)')
def distil_url(path, result):
f = open(path, 'rb')
msg = email.message_from_bytes(f.read())
f.close()
for part in msg.walk():
if( part.get_content_type() != 'text/html'):
continue;
html_source = part.get_payload(decode=True)
soup = BeautifulSoup(html_source, 'html.parser')
links = soup.find_all('a')
for link in links:
if link.has_attr('href') and not IGNORE_PAT.match(link['href']):
result.add(link['href'])
result = set()
for f in glob.glob(sys.argv[1]):
distil_url(f, result)
for l in sorted(result):
print(l)
これを python distil_url.py path/to/maildir/*.eml
のような感じで実行してやれば URL の一覧が出力されます。
今回はサーバ上の spam が入った Maildir を cron で1日1回なめて、メール通知するようにしてみました。
トラックバックについて
Trackback URL:
お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/13078
Trackbacks
このエントリにトラックバックはありません
Comments
愛のあるツッコミをお気軽にどうぞ。[policy]
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
コメントはありません
Comments Form
コメントは承認後の表示となります。
OpenIDでログインすると、即時に公開されます。
OpenID を使ってログインすることができます。
サイト内検索
検索ワードランキング
へぇが多いエントリ
閲覧数が多いエントリ
1 . Thunderbird のメッセージをスレッド化しないようにする(1629)
2 . Word で数式がグレーアウトされていて挿入できないときは(1378)
3 . Firefox でパスワードが保存されるページとされないページの違い(1145)
4 . Windows 10 で勝手にログアウトされないようにする(1000)
5 . iPhone の設定を開くと「不正なパスワード CardDAV アカウント "Google" のパスワードを入力」というダイアログが出る時は(704)
2 . Word で数式がグレーアウトされていて挿入できないときは(1378)
3 . Firefox でパスワードが保存されるページとされないページの違い(1145)
4 . Windows 10 で勝手にログアウトされないようにする(1000)
5 . iPhone の設定を開くと「不正なパスワード CardDAV アカウント "Google" のパスワードを入力」というダイアログが出る時は(704)
cles::blogについて
Referrers