揭露被审查的电子邮件的域名

作者:Sec-Labs | 发布时间:

项目地址

https://github.com/novitae/emdofi

EMDOFI - 被审查的域名发现

相关技术点

  • Python编程语言
  • 正则表达式
  • Github代码仓库
  • 命令行工具

项目用途

EMDOFI是一个Python项目,用于通过输入被审查的域名或电子邮件地址,揭示被审查的域名。该项目可作为命令行工具或库使用。主要功能包括:

  • match:最简单的匹配功能,用于查找单个被审查的域名或电子邮件地址。
  • DomainFinder:主要类,用于查找多个被审查的域名。可以手动初始化,也可以从文件或字符串中加载。
  • CensoredDomain:用于查找不同域名被审查时使用不同字符的情况。
  • SingleDomain:用于单独查找一个域名是否被审查。

该项目对于网络安全领域的专家非常有用,可以帮助他们发现被审查的域名,从而找到潜在的安全风险。

🔦 EMDOFI - 揭开被审查的域名

⚠️ 任何违反许可证的行为都会导致后果。如果您有疑问,请与我联系。


ad1a1b7183202613

 

⬇️ 安装

(您可以复制整个命令)

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
>>> # 我知道,这很无聊,但它允许在几秒钟内对数百万个域进行大量比较。

 

标签:工具分享