揭露被审查的电子邮件的域名
作者:Sec-Labs | 发布时间:
项目地址
https://github.com/novitae/emdofi
EMDOFI - 被审查的域名发现
相关技术点
- Python编程语言
- 正则表达式
- Github代码仓库
- 命令行工具
项目用途
EMDOFI是一个Python项目,用于通过输入被审查的域名或电子邮件地址,揭示被审查的域名。该项目可作为命令行工具或库使用。主要功能包括:
match:最简单的匹配功能,用于查找单个被审查的域名或电子邮件地址。DomainFinder:主要类,用于查找多个被审查的域名。可以手动初始化,也可以从文件或字符串中加载。CensoredDomain:用于查找不同域名被审查时使用不同字符的情况。SingleDomain:用于单独查找一个域名是否被审查。
该项目对于网络安全领域的专家非常有用,可以帮助他们发现被审查的域名,从而找到潜在的安全风险。
🔦 EMDOFI - 揭开被审查的域名
⚠️ 任何违反许可证的行为都会导致后果。如果您有疑问,请与我联系。

⬇️ 安装
(您可以复制整个命令)
git clone https://github.com/novitae/emdofi && cd emdofi && pip install .
💻 命令行使用
emdofi <domain 或 email> [-h] [-c CENSORED_CHARS]
usage: EMDOFI - Uncover a censored domain [-h] [-c CC] domain
positional arguments:
domain The censored domain or email
options:
-h, --help show this help message and exit
-c CC, --censored CC The censored characters (default: "*?")
📚 库的使用
match
这是最简单的操作,只需要进行匹配,而无需加载大量内容。
>>> from emdofi import match
>>> match("*******@c****.c*********m")
[cable.comcast.com]
>>> # 您还可以使用 censored_chars 定义被审查的字符。
>>> # 它需要是字符串的可迭代序列。
>>> match("*******@c****.c***????**m", censored_chars="*?")
[cable.comcast.com]
DomainFinder
DomainFinder是将进行整个工作的主类。它以以下方式手动初始化:
>>> from emdofi import DomainFinder
>>> d = DomainFinder(
... domains = ["gmail.com","yahoo.com","icloud.com"],
... censoring_chars = "*?"
... )
>>> # 如果在 `DomainFinder` 中禁用 `keep_only_valid_domains`,
>>> # 可能不对应有效域的域将被保留。
但是您也可以使用更简单的方式进行初始化:
>>> # 加载默认的域库,此处存在:
>>> # https://gist.github.com/ammarshah/f5c2624d767f91a7cbdc4e54db8dd0bf/
>>> d = DomainFinder.load_default()
>>>
>>> # 从文件中加载,文件必须包含每行一个域名,或者是域名的 json 列表。
>>> with open("file.txt", "r") as read:
>>> d = DomainFinder.load(read)
>>>
>>> # 从可能包含在上述文件中的字符串中加载。
>>> d = DomainFinder.loads("gmail.com\nyahoo.com\nicloud.com")
一旦初始化了 DomainFinder 对象,您就可以重新编辑被审查的字符:
>>> d.change_censoring_chars(
... "*", "?", "£$?"
... )
>>> # 以下是字符的解压缩方式:
>>> d.change_censoring_chars("fffç&", "*", "$$&")
>>> d.censoring_chars
["f", "ç", "&", "*", "$"]
然后您可以开始匹配:
>>> d.match("g****.**m")
["gmail.com", "gmial.com"]
>>> # 您可以使用电子邮件,它只会检查域名
>>> d.match("john@g****.**m")
["gmail.com", "gmial.com"]
>>> # 通过使用参数 `full`,您将获得整个字典
>>> # 例如 {domain(str): result(bool), ...}
>>> d.match("g****.**m", full=True)
{"gmail.com": True, "...": False, "...": False, "gmial.com": True, ...}
CensoredDomain
如果您想要匹配不同的域名,每个域名的被审查字符都不同,那么您应该使用 CensoredDomain
>>> # 确保 `censored_chars` 是字符串列表,
>>> # 它们不会被转换,因此如果它们不是
>>> # 特定的 `list[str]` 类型,可能会导致错误。
>>> cd1 = CensoredDomain(
... "john@g****.**m",
... censored_chars = ["*"]
... )
>>> cd2 = CensoredDomain(
... "john@g$)$$.%%m",
... censored_chars = ["$",")","%"]
... )
>>> for x in [cd1, cd2]:
... print(x.domain, d.match(x))
"g****.**m", ["gmail.com", "gmial.com"]
"g$)$$.%%m", ["gmail.com", "gmial.com"]
SingleDomain
您还可以尝试使用对象 SingleDomain 进行单个匹配:
>>> import asyncio
>>> sd = SingleDomain(
... "icloud.com"
... )
>>> # SingleDomain 还包含一个 `valid` 参数。如果您想要强制使用 `True` 或 `False` 值,则将其设置为 `True` 或 `False`,默认值为 `None`
>>>
>>> # 然后您可以将其与 `CensoredDomain` 对象进行比较:
>>> asyncio.run(sd.match(cd1))
False
>>> # 我知道,这很无聊,但它允许在几秒钟内对数百万个域进行大量比较。
标签:工具分享