pedrobento988 RodDoSanz commited on
Commit
9320ddd
·
verified ·
1 Parent(s): f1d068a

domain_tools_rod (#5)

Browse files

- build: update dependencies (1c6e88d9c66188ba8c0defe1ef75a86fa55a21b8)
- feat: add tools and interfaces to inspect domains (dc8fed07898d310f9ae83f65cdb1a3a47f559832)
- feat: add tools (1fbf466dca5c9cc8729ccc9633828e679b1d9848)
- feat: add tools to app (35aff7c1b7c710519a5d82c8cf86adba26f2fb3a)
- Merge branch 'main' into pr/5 (e7e6c15215589f9c781732dc0dbffe1fb84e7868)


Co-authored-by: Rodrigo Domínguez Sanz <[email protected]>

app.py CHANGED
@@ -2,6 +2,12 @@ from typing import NamedTuple
2
 
3
  import gradio as gr
4
 
 
 
 
 
 
 
5
  from tdagent.tools.get_url_content import gr_get_url_http_content
6
  from tdagent.tools.internal_company_user_search import gr_internal_company
7
  from tdagent.tools.lookup_company_cloud_account_information import (
@@ -33,6 +39,10 @@ TOOLS = (
33
  # ToolInfo("Query WHOIS", gr_query_whois),
34
  ToolInfo("Query RDAP", gr_query_rdap),
35
  ToolInfo("Virus Total URL info", gr_virus_total_url_info),
 
 
 
 
36
  ## Fake tools
37
  ToolInfo("Fake company directory", gr_internal_company),
38
  ToolInfo(
 
2
 
3
  import gradio as gr
4
 
5
+ from tdagent.tools.get_domain_information import (
6
+ dns_enumeration_tool,
7
+ extractor_of_ioc_from_threatfox_tool,
8
+ geo_location_tool,
9
+ scrap_subdomains_tool,
10
+ )
11
  from tdagent.tools.get_url_content import gr_get_url_http_content
12
  from tdagent.tools.internal_company_user_search import gr_internal_company
13
  from tdagent.tools.lookup_company_cloud_account_information import (
 
39
  # ToolInfo("Query WHOIS", gr_query_whois),
40
  ToolInfo("Query RDAP", gr_query_rdap),
41
  ToolInfo("Virus Total URL info", gr_virus_total_url_info),
42
+ ToolInfo("Get IP's Location", geo_location_tool),
43
+ ToolInfo("DNS Enumerator", dns_enumeration_tool),
44
+ ToolInfo("Subdomain Retriever", scrap_subdomains_tool),
45
+ ToolInfo("Extractor of IoCs", extractor_of_ioc_from_threatfox_tool),
46
  ## Fake tools
47
  ToolInfo("Fake company directory", gr_internal_company),
48
  ToolInfo(
pyproject.toml CHANGED
@@ -14,6 +14,7 @@ readme = "README.md"
14
  license = ""
15
  dependencies = [
16
  "cachetools>=6.0.0",
 
17
  "gradio[mcp]>=5.32.1",
18
  "python-whois>=0.9.5",
19
  "requests>=2.32.3",
 
14
  license = ""
15
  dependencies = [
16
  "cachetools>=6.0.0",
17
+ "dnspython>=2.7.0",
18
  "gradio[mcp]>=5.32.1",
19
  "python-whois>=0.9.5",
20
  "requests>=2.32.3",
requirements-dev.txt CHANGED
@@ -1,109 +1,309 @@
1
  # This file was autogenerated by uv via the following command:
2
  # uv export --format requirements-txt --no-hashes --group dev --group test -o requirements-dev.txt
3
  aiofiles==24.1.0
 
 
 
4
  aiohappyeyeballs==2.6.1
 
5
  aiohttp==3.12.8
 
6
  aiosignal==1.3.2
 
7
  annotated-types==0.7.0
 
8
  anyio==4.9.0
 
 
 
 
 
 
9
  async-timeout==5.0.1 ; python_full_version < '3.11'
 
10
  attrs==25.3.0
 
11
  audioop-lts==0.2.1 ; python_full_version >= '3.13'
 
12
  boolean-py==5.0
 
13
  cachecontrol==0.14.3
 
14
  cachetools==6.0.0
 
15
  certifi==2025.4.26
 
 
 
 
16
  cfgv==3.4.0
 
17
  charset-normalizer==3.4.2
 
18
  click==8.2.1 ; sys_platform != 'emscripten'
 
 
 
19
  colorama==0.4.6 ; sys_platform == 'win32'
 
 
 
 
20
  coverage==7.8.2
 
21
  cyclonedx-python-lib==9.1.0
 
22
  defusedxml==0.7.1
 
23
  distlib==0.3.9
 
 
 
24
  exceptiongroup==1.3.0 ; python_full_version < '3.11'
 
 
 
25
  fastapi==0.115.12
 
26
  ffmpy==0.6.0
 
27
  filelock==3.18.0
 
 
 
 
28
  frozenlist==1.6.2
 
 
 
29
  fsspec==2025.5.1
 
 
 
30
  gradio==5.32.1
 
31
  gradio-client==1.10.2
 
32
  groovy==0.1.2
 
33
  h11==0.16.0
 
 
 
34
  hf-xet==1.1.2 ; platform_machine == 'aarch64' or platform_machine == 'amd64' or platform_machine == 'arm64' or platform_machine == 'x86_64'
 
35
  httpcore==1.0.9
 
36
  httpx==0.28.1
 
 
 
 
 
37
  httpx-sse==0.4.0
 
38
  huggingface-hub==0.32.4
 
 
 
39
  identify==2.6.12
 
40
  idna==3.10
 
 
 
 
 
41
  iniconfig==2.1.0
 
42
  jinja2==3.1.6
 
43
  license-expression==30.4.1
 
44
  markdown-it-py==3.0.0
 
45
  markupsafe==3.0.2
 
 
 
46
  mcp==1.9.0
 
47
  mdurl==0.1.2
 
48
  msgpack==1.1.0
 
49
  multidict==6.4.4
 
 
 
50
  mypy==1.16.0
51
  mypy-extensions==1.1.0
 
52
  nodeenv==1.9.1
 
53
  numpy==2.2.6
 
 
 
54
  orjson==3.10.18
 
55
  packageurl-python==0.16.0
 
56
  packaging==25.0
 
 
 
 
 
 
 
57
  pandas==2.2.3
 
58
  pathspec==0.12.1
 
59
  pillow==11.2.1
 
60
  pip==25.1.1
 
61
  pip-api==0.0.34
 
62
  pip-audit==2.9.0
63
  pip-requirements-parser==32.0.1
 
64
  platformdirs==4.3.8
 
 
 
65
  pluggy==1.6.0
 
66
  pre-commit==3.8.0
67
  propcache==0.3.1
 
 
 
68
  py-serializable==2.0.0
 
69
  pydantic==2.11.5
 
 
 
 
 
70
  pydantic-core==2.33.2
 
71
  pydantic-settings==2.9.1
 
72
  pydub==0.25.1
 
73
  pygments==2.19.1
 
74
  pyparsing==3.2.3
 
75
  pytest==7.4.4
 
 
 
76
  pytest-cov==4.1.0
77
  pytest-randomly==3.16.0
78
  python-dateutil==2.9.0.post0
 
 
 
79
  python-dotenv==1.1.0
 
80
  python-multipart==0.0.20
 
 
 
81
  python-whois==0.9.5
 
82
  pytz==2025.2
 
83
  pyyaml==6.0.2
 
 
 
 
84
  requests==2.32.3
 
 
 
 
 
85
  rich==14.0.0
 
 
 
86
  ruff==0.11.12
 
87
  safehttpx==0.1.6
 
88
  semantic-version==2.10.0
 
89
  shellingham==1.5.4 ; sys_platform != 'emscripten'
 
90
  six==1.17.0
 
91
  sniffio==1.3.1
 
92
  sortedcontainers==2.4.0
 
93
  sse-starlette==2.3.6
 
94
  starlette==0.46.2
 
 
 
 
95
  toml==0.10.2
 
96
  tomli==2.2.1 ; python_full_version <= '3.11'
 
 
 
 
97
  tomlkit==0.13.2
 
98
  tqdm==4.67.1
 
99
  typer==0.16.0 ; sys_platform != 'emscripten'
 
100
  typing-extensions==4.14.0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
101
  typing-inspection==0.4.1
 
 
 
102
  tzdata==2025.2
 
103
  urllib3==2.4.0
 
 
 
104
  uvicorn==0.34.3 ; sys_platform != 'emscripten'
 
 
 
105
  virtualenv==20.31.2
 
106
  vt-py==0.21.0
 
107
  websockets==15.0.1
 
108
  xdoctest==1.2.0
109
  yarl==1.20.0
 
 
1
  # This file was autogenerated by uv via the following command:
2
  # uv export --format requirements-txt --no-hashes --group dev --group test -o requirements-dev.txt
3
  aiofiles==24.1.0
4
+ # via
5
+ # gradio
6
+ # vt-py
7
  aiohappyeyeballs==2.6.1
8
+ # via aiohttp
9
  aiohttp==3.12.8
10
+ # via vt-py
11
  aiosignal==1.3.2
12
+ # via aiohttp
13
  annotated-types==0.7.0
14
+ # via pydantic
15
  anyio==4.9.0
16
+ # via
17
+ # gradio
18
+ # httpx
19
+ # mcp
20
+ # sse-starlette
21
+ # starlette
22
  async-timeout==5.0.1 ; python_full_version < '3.11'
23
+ # via aiohttp
24
  attrs==25.3.0
25
+ # via aiohttp
26
  audioop-lts==0.2.1 ; python_full_version >= '3.13'
27
+ # via gradio
28
  boolean-py==5.0
29
+ # via license-expression
30
  cachecontrol==0.14.3
31
+ # via pip-audit
32
  cachetools==6.0.0
33
+ # via tdagent
34
  certifi==2025.4.26
35
+ # via
36
+ # httpcore
37
+ # httpx
38
+ # requests
39
  cfgv==3.4.0
40
+ # via pre-commit
41
  charset-normalizer==3.4.2
42
+ # via requests
43
  click==8.2.1 ; sys_platform != 'emscripten'
44
+ # via
45
+ # typer
46
+ # uvicorn
47
  colorama==0.4.6 ; sys_platform == 'win32'
48
+ # via
49
+ # click
50
+ # pytest
51
+ # tqdm
52
  coverage==7.8.2
53
+ # via pytest-cov
54
  cyclonedx-python-lib==9.1.0
55
+ # via pip-audit
56
  defusedxml==0.7.1
57
+ # via py-serializable
58
  distlib==0.3.9
59
+ # via virtualenv
60
+ dnspython==2.7.0
61
+ # via tdagent
62
  exceptiongroup==1.3.0 ; python_full_version < '3.11'
63
+ # via
64
+ # anyio
65
+ # pytest
66
  fastapi==0.115.12
67
+ # via gradio
68
  ffmpy==0.6.0
69
+ # via gradio
70
  filelock==3.18.0
71
+ # via
72
+ # cachecontrol
73
+ # huggingface-hub
74
+ # virtualenv
75
  frozenlist==1.6.2
76
+ # via
77
+ # aiohttp
78
+ # aiosignal
79
  fsspec==2025.5.1
80
+ # via
81
+ # gradio-client
82
+ # huggingface-hub
83
  gradio==5.32.1
84
+ # via tdagent
85
  gradio-client==1.10.2
86
+ # via gradio
87
  groovy==0.1.2
88
+ # via gradio
89
  h11==0.16.0
90
+ # via
91
+ # httpcore
92
+ # uvicorn
93
  hf-xet==1.1.2 ; platform_machine == 'aarch64' or platform_machine == 'amd64' or platform_machine == 'arm64' or platform_machine == 'x86_64'
94
+ # via huggingface-hub
95
  httpcore==1.0.9
96
+ # via httpx
97
  httpx==0.28.1
98
+ # via
99
+ # gradio
100
+ # gradio-client
101
+ # mcp
102
+ # safehttpx
103
  httpx-sse==0.4.0
104
+ # via mcp
105
  huggingface-hub==0.32.4
106
+ # via
107
+ # gradio
108
+ # gradio-client
109
  identify==2.6.12
110
+ # via pre-commit
111
  idna==3.10
112
+ # via
113
+ # anyio
114
+ # httpx
115
+ # requests
116
+ # yarl
117
  iniconfig==2.1.0
118
+ # via pytest
119
  jinja2==3.1.6
120
+ # via gradio
121
  license-expression==30.4.1
122
+ # via cyclonedx-python-lib
123
  markdown-it-py==3.0.0
124
+ # via rich
125
  markupsafe==3.0.2
126
+ # via
127
+ # gradio
128
+ # jinja2
129
  mcp==1.9.0
130
+ # via gradio
131
  mdurl==0.1.2
132
+ # via markdown-it-py
133
  msgpack==1.1.0
134
+ # via cachecontrol
135
  multidict==6.4.4
136
+ # via
137
+ # aiohttp
138
+ # yarl
139
  mypy==1.16.0
140
  mypy-extensions==1.1.0
141
+ # via mypy
142
  nodeenv==1.9.1
143
+ # via pre-commit
144
  numpy==2.2.6
145
+ # via
146
+ # gradio
147
+ # pandas
148
  orjson==3.10.18
149
+ # via gradio
150
  packageurl-python==0.16.0
151
+ # via cyclonedx-python-lib
152
  packaging==25.0
153
+ # via
154
+ # gradio
155
+ # gradio-client
156
+ # huggingface-hub
157
+ # pip-audit
158
+ # pip-requirements-parser
159
+ # pytest
160
  pandas==2.2.3
161
+ # via gradio
162
  pathspec==0.12.1
163
+ # via mypy
164
  pillow==11.2.1
165
+ # via gradio
166
  pip==25.1.1
167
+ # via pip-api
168
  pip-api==0.0.34
169
+ # via pip-audit
170
  pip-audit==2.9.0
171
  pip-requirements-parser==32.0.1
172
+ # via pip-audit
173
  platformdirs==4.3.8
174
+ # via
175
+ # pip-audit
176
+ # virtualenv
177
  pluggy==1.6.0
178
+ # via pytest
179
  pre-commit==3.8.0
180
  propcache==0.3.1
181
+ # via
182
+ # aiohttp
183
+ # yarl
184
  py-serializable==2.0.0
185
+ # via cyclonedx-python-lib
186
  pydantic==2.11.5
187
+ # via
188
+ # fastapi
189
+ # gradio
190
+ # mcp
191
+ # pydantic-settings
192
  pydantic-core==2.33.2
193
+ # via pydantic
194
  pydantic-settings==2.9.1
195
+ # via mcp
196
  pydub==0.25.1
197
+ # via gradio
198
  pygments==2.19.1
199
+ # via rich
200
  pyparsing==3.2.3
201
+ # via pip-requirements-parser
202
  pytest==7.4.4
203
+ # via
204
+ # pytest-cov
205
+ # pytest-randomly
206
  pytest-cov==4.1.0
207
  pytest-randomly==3.16.0
208
  python-dateutil==2.9.0.post0
209
+ # via
210
+ # pandas
211
+ # python-whois
212
  python-dotenv==1.1.0
213
+ # via pydantic-settings
214
  python-multipart==0.0.20
215
+ # via
216
+ # gradio
217
+ # mcp
218
  python-whois==0.9.5
219
+ # via tdagent
220
  pytz==2025.2
221
+ # via pandas
222
  pyyaml==6.0.2
223
+ # via
224
+ # gradio
225
+ # huggingface-hub
226
+ # pre-commit
227
  requests==2.32.3
228
+ # via
229
+ # cachecontrol
230
+ # huggingface-hub
231
+ # pip-audit
232
+ # tdagent
233
  rich==14.0.0
234
+ # via
235
+ # pip-audit
236
+ # typer
237
  ruff==0.11.12
238
+ # via gradio
239
  safehttpx==0.1.6
240
+ # via gradio
241
  semantic-version==2.10.0
242
+ # via gradio
243
  shellingham==1.5.4 ; sys_platform != 'emscripten'
244
+ # via typer
245
  six==1.17.0
246
+ # via python-dateutil
247
  sniffio==1.3.1
248
+ # via anyio
249
  sortedcontainers==2.4.0
250
+ # via cyclonedx-python-lib
251
  sse-starlette==2.3.6
252
+ # via mcp
253
  starlette==0.46.2
254
+ # via
255
+ # fastapi
256
+ # gradio
257
+ # mcp
258
  toml==0.10.2
259
+ # via pip-audit
260
  tomli==2.2.1 ; python_full_version <= '3.11'
261
+ # via
262
+ # coverage
263
+ # mypy
264
+ # pytest
265
  tomlkit==0.13.2
266
+ # via gradio
267
  tqdm==4.67.1
268
+ # via huggingface-hub
269
  typer==0.16.0 ; sys_platform != 'emscripten'
270
+ # via gradio
271
  typing-extensions==4.14.0
272
+ # via
273
+ # anyio
274
+ # exceptiongroup
275
+ # fastapi
276
+ # gradio
277
+ # gradio-client
278
+ # huggingface-hub
279
+ # multidict
280
+ # mypy
281
+ # pydantic
282
+ # pydantic-core
283
+ # rich
284
+ # typer
285
+ # typing-inspection
286
+ # uvicorn
287
  typing-inspection==0.4.1
288
+ # via
289
+ # pydantic
290
+ # pydantic-settings
291
  tzdata==2025.2
292
+ # via pandas
293
  urllib3==2.4.0
294
+ # via
295
+ # gradio
296
+ # requests
297
  uvicorn==0.34.3 ; sys_platform != 'emscripten'
298
+ # via
299
+ # gradio
300
+ # mcp
301
  virtualenv==20.31.2
302
+ # via pre-commit
303
  vt-py==0.21.0
304
+ # via tdagent
305
  websockets==15.0.1
306
+ # via gradio-client
307
  xdoctest==1.2.0
308
  yarl==1.20.0
309
+ # via aiohttp
requirements.txt CHANGED
@@ -1,84 +1,212 @@
1
  # This file was autogenerated by uv via the following command:
2
- # uv export --format requirements-txt --no-hashes --no-dev -o requirements.txt
3
  aiofiles==24.1.0
 
 
 
4
  aiohappyeyeballs==2.6.1
 
5
  aiohttp==3.12.8
 
6
  aiosignal==1.3.2
 
7
  annotated-types==0.7.0
 
8
  anyio==4.9.0
9
- async-timeout==5.0.1 ; python_full_version < '3.11'
 
 
 
 
 
10
  attrs==25.3.0
11
- audioop-lts==0.2.1 ; python_full_version >= '3.13'
 
 
12
  cachetools==6.0.0
 
13
  certifi==2025.4.26
 
 
 
 
14
  charset-normalizer==3.4.2
15
- click==8.2.1 ; sys_platform != 'emscripten'
16
- colorama==0.4.6 ; sys_platform == 'win32'
17
- coverage==7.8.2
18
- exceptiongroup==1.3.0 ; python_full_version < '3.11'
 
 
 
19
  fastapi==0.115.12
 
20
  ffmpy==0.6.0
 
21
  filelock==3.18.0
 
22
  frozenlist==1.6.2
 
 
 
23
  fsspec==2025.5.1
 
 
 
24
  gradio==5.32.1
 
25
  gradio-client==1.10.2
 
26
  groovy==0.1.2
 
27
  h11==0.16.0
28
- hf-xet==1.1.2 ; platform_machine == 'aarch64' or platform_machine == 'amd64' or platform_machine == 'arm64' or platform_machine == 'x86_64'
 
 
 
 
29
  httpcore==1.0.9
 
30
  httpx==0.28.1
 
 
 
 
 
31
  httpx-sse==0.4.0
 
32
  huggingface-hub==0.32.4
 
 
 
33
  idna==3.10
34
- iniconfig==2.1.0
 
 
 
 
35
  jinja2==3.1.6
36
- markdown-it-py==3.0.0 ; sys_platform != 'emscripten'
 
 
37
  markupsafe==3.0.2
 
 
 
38
  mcp==1.9.0
39
- mdurl==0.1.2 ; sys_platform != 'emscripten'
 
 
40
  multidict==6.4.4
 
 
 
41
  numpy==2.2.6
 
 
 
42
  orjson==3.10.18
 
43
  packaging==25.0
 
 
 
 
44
  pandas==2.2.3
 
45
  pillow==11.2.1
46
- pluggy==1.6.0
47
  propcache==0.3.1
 
 
 
48
  pydantic==2.11.5
 
 
 
 
 
49
  pydantic-core==2.33.2
 
50
  pydantic-settings==2.9.1
 
51
  pydub==0.25.1
52
- pygments==2.19.1 ; sys_platform != 'emscripten'
53
- pytest==7.4.4
54
- pytest-cov==4.1.0
55
- pytest-randomly==3.16.0
56
  python-dateutil==2.9.0.post0
 
 
 
57
  python-dotenv==1.1.0
 
58
  python-multipart==0.0.20
 
 
 
59
  python-whois==0.9.5
 
60
  pytz==2025.2
 
61
  pyyaml==6.0.2
 
 
 
62
  requests==2.32.3
63
- rich==14.0.0 ; sys_platform != 'emscripten'
64
- ruff==0.11.12 ; sys_platform != 'emscripten'
 
 
 
 
 
65
  safehttpx==0.1.6
 
66
  semantic-version==2.10.0
67
- shellingham==1.5.4 ; sys_platform != 'emscripten'
 
 
68
  six==1.17.0
 
69
  sniffio==1.3.1
 
70
  sse-starlette==2.3.6
 
71
  starlette==0.46.2
72
- tomli==2.2.1 ; python_full_version <= '3.11'
 
 
 
73
  tomlkit==0.13.2
 
74
  tqdm==4.67.1
75
- typer==0.16.0 ; sys_platform != 'emscripten'
 
 
76
  typing-extensions==4.14.0
 
 
 
 
 
 
 
 
 
77
  typing-inspection==0.4.1
 
 
 
78
  tzdata==2025.2
 
79
  urllib3==2.4.0
80
- uvicorn==0.34.3 ; sys_platform != 'emscripten'
 
 
 
 
81
  vt-py==0.21.0
 
82
  websockets==15.0.1
83
- xdoctest==1.2.0
84
  yarl==1.20.0
 
 
1
  # This file was autogenerated by uv via the following command:
2
+ # uv pip compile pyproject.toml -o requirements.txt
3
  aiofiles==24.1.0
4
+ # via
5
+ # gradio
6
+ # vt-py
7
  aiohappyeyeballs==2.6.1
8
+ # via aiohttp
9
  aiohttp==3.12.8
10
+ # via vt-py
11
  aiosignal==1.3.2
12
+ # via aiohttp
13
  annotated-types==0.7.0
14
+ # via pydantic
15
  anyio==4.9.0
16
+ # via
17
+ # gradio
18
+ # httpx
19
+ # mcp
20
+ # sse-starlette
21
+ # starlette
22
  attrs==25.3.0
23
+ # via aiohttp
24
+ audioop-lts==0.2.1
25
+ # via gradio
26
  cachetools==6.0.0
27
+ # via tdagent (pyproject.toml)
28
  certifi==2025.4.26
29
+ # via
30
+ # httpcore
31
+ # httpx
32
+ # requests
33
  charset-normalizer==3.4.2
34
+ # via requests
35
+ click==8.2.1
36
+ # via
37
+ # typer
38
+ # uvicorn
39
+ dnspython==2.7.0
40
+ # via tdagent (pyproject.toml)
41
  fastapi==0.115.12
42
+ # via gradio
43
  ffmpy==0.6.0
44
+ # via gradio
45
  filelock==3.18.0
46
+ # via huggingface-hub
47
  frozenlist==1.6.2
48
+ # via
49
+ # aiohttp
50
+ # aiosignal
51
  fsspec==2025.5.1
52
+ # via
53
+ # gradio-client
54
+ # huggingface-hub
55
  gradio==5.32.1
56
+ # via tdagent (pyproject.toml)
57
  gradio-client==1.10.2
58
+ # via gradio
59
  groovy==0.1.2
60
+ # via gradio
61
  h11==0.16.0
62
+ # via
63
+ # httpcore
64
+ # uvicorn
65
+ hf-xet==1.1.2
66
+ # via huggingface-hub
67
  httpcore==1.0.9
68
+ # via httpx
69
  httpx==0.28.1
70
+ # via
71
+ # gradio
72
+ # gradio-client
73
+ # mcp
74
+ # safehttpx
75
  httpx-sse==0.4.0
76
+ # via mcp
77
  huggingface-hub==0.32.4
78
+ # via
79
+ # gradio
80
+ # gradio-client
81
  idna==3.10
82
+ # via
83
+ # anyio
84
+ # httpx
85
+ # requests
86
+ # yarl
87
  jinja2==3.1.6
88
+ # via gradio
89
+ markdown-it-py==3.0.0
90
+ # via rich
91
  markupsafe==3.0.2
92
+ # via
93
+ # gradio
94
+ # jinja2
95
  mcp==1.9.0
96
+ # via gradio
97
+ mdurl==0.1.2
98
+ # via markdown-it-py
99
  multidict==6.4.4
100
+ # via
101
+ # aiohttp
102
+ # yarl
103
  numpy==2.2.6
104
+ # via
105
+ # gradio
106
+ # pandas
107
  orjson==3.10.18
108
+ # via gradio
109
  packaging==25.0
110
+ # via
111
+ # gradio
112
+ # gradio-client
113
+ # huggingface-hub
114
  pandas==2.2.3
115
+ # via gradio
116
  pillow==11.2.1
117
+ # via gradio
118
  propcache==0.3.1
119
+ # via
120
+ # aiohttp
121
+ # yarl
122
  pydantic==2.11.5
123
+ # via
124
+ # fastapi
125
+ # gradio
126
+ # mcp
127
+ # pydantic-settings
128
  pydantic-core==2.33.2
129
+ # via pydantic
130
  pydantic-settings==2.9.1
131
+ # via mcp
132
  pydub==0.25.1
133
+ # via gradio
134
+ pygments==2.19.1
135
+ # via rich
 
136
  python-dateutil==2.9.0.post0
137
+ # via
138
+ # pandas
139
+ # python-whois
140
  python-dotenv==1.1.0
141
+ # via pydantic-settings
142
  python-multipart==0.0.20
143
+ # via
144
+ # gradio
145
+ # mcp
146
  python-whois==0.9.5
147
+ # via tdagent (pyproject.toml)
148
  pytz==2025.2
149
+ # via pandas
150
  pyyaml==6.0.2
151
+ # via
152
+ # gradio
153
+ # huggingface-hub
154
  requests==2.32.3
155
+ # via
156
+ # tdagent (pyproject.toml)
157
+ # huggingface-hub
158
+ rich==14.0.0
159
+ # via typer
160
+ ruff==0.11.12
161
+ # via gradio
162
  safehttpx==0.1.6
163
+ # via gradio
164
  semantic-version==2.10.0
165
+ # via gradio
166
+ shellingham==1.5.4
167
+ # via typer
168
  six==1.17.0
169
+ # via python-dateutil
170
  sniffio==1.3.1
171
+ # via anyio
172
  sse-starlette==2.3.6
173
+ # via mcp
174
  starlette==0.46.2
175
+ # via
176
+ # fastapi
177
+ # gradio
178
+ # mcp
179
  tomlkit==0.13.2
180
+ # via gradio
181
  tqdm==4.67.1
182
+ # via huggingface-hub
183
+ typer==0.16.0
184
+ # via gradio
185
  typing-extensions==4.14.0
186
+ # via
187
+ # fastapi
188
+ # gradio
189
+ # gradio-client
190
+ # huggingface-hub
191
+ # pydantic
192
+ # pydantic-core
193
+ # typer
194
+ # typing-inspection
195
  typing-inspection==0.4.1
196
+ # via
197
+ # pydantic
198
+ # pydantic-settings
199
  tzdata==2025.2
200
+ # via pandas
201
  urllib3==2.4.0
202
+ # via requests
203
+ uvicorn==0.34.3
204
+ # via
205
+ # gradio
206
+ # mcp
207
  vt-py==0.21.0
208
+ # via tdagent (pyproject.toml)
209
  websockets==15.0.1
210
+ # via gradio-client
211
  yarl==1.20.0
212
+ # via aiohttp
subdomains/subdomains.txt ADDED
@@ -0,0 +1,999 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ www
2
+ mail
3
+ ftp
4
+ localhost
5
+ webmail
6
+ smtp
7
+ pop
8
+ ns1
9
+ webdisk
10
+ ns2
11
+ cpanel
12
+ whm
13
+ autodiscover
14
+ autoconfig
15
+ m
16
+ imap
17
+ test
18
+ ns
19
+ blog
20
+ pop3
21
+ dev
22
+ www2
23
+ admin
24
+ forum
25
+ news
26
+ vpn
27
+ ns3
28
+ mail2
29
+ new
30
+ mysql
31
+ old
32
+ lists
33
+ support
34
+ mobile
35
+ mx
36
+ static
37
+ docs
38
+ beta
39
+ shop
40
+ sql
41
+ secure
42
+ demo
43
+ cp
44
+ calendar
45
+ wiki
46
+ web
47
+ media
48
+ email
49
+ images
50
+ img
51
+ www1
52
+ intranet
53
+ portal
54
+ video
55
+ sip
56
+ dns2
57
+ api
58
+ cdn
59
+ stats
60
+ dns1
61
+ ns4
62
+ www3
63
+ dns
64
+ search
65
+ staging
66
+ server
67
+ mx1
68
+ chat
69
+ wap
70
+ my
71
+ svn
72
+ mail1
73
+ sites
74
+ proxy
75
+ ads
76
+ host
77
+ crm
78
+ cms
79
+ backup
80
+ mx2
81
+ lyncdiscover
82
+ info
83
+ apps
84
+ download
85
+ remote
86
+ db
87
+ forums
88
+ store
89
+ relay
90
+ files
91
+ newsletter
92
+ app
93
+ live
94
+ owa
95
+ en
96
+ start
97
+ sms
98
+ office
99
+ exchange
100
+ ipv4
101
+ mail3
102
+ help
103
+ blogs
104
+ helpdesk
105
+ web1
106
+ home
107
+ library
108
+ ftp2
109
+ ntp
110
+ monitor
111
+ login
112
+ service
113
+ correo
114
+ www4
115
+ moodle
116
+ it
117
+ gateway
118
+ gw
119
+ i
120
+ stat
121
+ stage
122
+ ldap
123
+ tv
124
+ ssl
125
+ web2
126
+ ns5
127
+ upload
128
+ nagios
129
+ smtp2
130
+ online
131
+ ad
132
+ survey
133
+ data
134
+ radio
135
+ extranet
136
+ test2
137
+ mssql
138
+ dns3
139
+ jobs
140
+ services
141
+ panel
142
+ irc
143
+ hosting
144
+ cloud
145
+ de
146
+ gmail
147
+ s
148
+ bbs
149
+ cs
150
+ ww
151
+ mrtg
152
+ git
153
+ image
154
+ members
155
+ poczta
156
+ s1
157
+ meet
158
+ preview
159
+ fr
160
+ cloudflare-resolve-to
161
+ dev2
162
+ photo
163
+ jabber
164
+ legacy
165
+ go
166
+ es
167
+ ssh
168
+ redmine
169
+ partner
170
+ vps
171
+ server1
172
+ sv
173
+ ns6
174
+ webmail2
175
+ av
176
+ community
177
+ cacti
178
+ time
179
+ sftp
180
+ lib
181
+ facebook
182
+ www5
183
+ smtp1
184
+ feeds
185
+ w
186
+ games
187
+ ts
188
+ alumni
189
+ dl
190
+ s2
191
+ phpmyadmin
192
+ archive
193
+ cn
194
+ tools
195
+ stream
196
+ projects
197
+ elearning
198
+ im
199
+ iphone
200
+ control
201
+ voip
202
+ test1
203
+ ws
204
+ rss
205
+ sp
206
+ wwww
207
+ vpn2
208
+ jira
209
+ list
210
+ connect
211
+ gallery
212
+ billing
213
+ mailer
214
+ update
215
+ pda
216
+ game
217
+ ns0
218
+ testing
219
+ sandbox
220
+ job
221
+ events
222
+ dialin
223
+ ml
224
+ fb
225
+ videos
226
+ music
227
+ a
228
+ partners
229
+ mailhost
230
+ downloads
231
+ reports
232
+ ca
233
+ router
234
+ speedtest
235
+ local
236
+ training
237
+ edu
238
+ bugs
239
+ manage
240
+ s3
241
+ status
242
+ host2
243
+ ww2
244
+ marketing
245
+ conference
246
+ content
247
+ network-ip
248
+ broadcast-ip
249
+ english
250
+ catalog
251
+ msoid
252
+ mailadmin
253
+ pay
254
+ access
255
+ streaming
256
+ project
257
+ t
258
+ sso
259
+ alpha
260
+ photos
261
+ staff
262
+ e
263
+ auth
264
+ v2
265
+ web5
266
+ web3
267
+ mail4
268
+ devel
269
+ post
270
+ us
271
+ images2
272
+ master
273
+ rt
274
+ ftp1
275
+ qa
276
+ wp
277
+ dns4
278
+ www6
279
+ ru
280
+ student
281
+ w3
282
+ citrix
283
+ trac
284
+ doc
285
+ img2
286
+ css
287
+ mx3
288
+ adm
289
+ web4
290
+ hr
291
+ mailserver
292
+ travel
293
+ sharepoint
294
+ sport
295
+ member
296
+ bb
297
+ agenda
298
+ link
299
+ server2
300
+ vod
301
+ uk
302
+ fw
303
+ promo
304
+ vip
305
+ noc
306
+ design
307
+ temp
308
+ gate
309
+ ns7
310
+ file
311
+ ms
312
+ map
313
+ cache
314
+ painel
315
+ js
316
+ event
317
+ mailing
318
+ db1
319
+ c
320
+ auto
321
+ img1
322
+ vpn1
323
+ business
324
+ mirror
325
+ share
326
+ cdn2
327
+ site
328
+ maps
329
+ tickets
330
+ tracker
331
+ domains
332
+ club
333
+ images1
334
+ zimbra
335
+ cvs
336
+ b2b
337
+ oa
338
+ intra
339
+ zabbix
340
+ ns8
341
+ assets
342
+ main
343
+ spam
344
+ lms
345
+ social
346
+ faq
347
+ feedback
348
+ loopback
349
+ groups
350
+ m2
351
+ cas
352
+ loghost
353
+ xml
354
+ nl
355
+ research
356
+ art
357
+ munin
358
+ dev1
359
+ gis
360
+ sales
361
+ images3
362
+ report
363
+ google
364
+ idp
365
+ cisco
366
+ careers
367
+ seo
368
+ dc
369
+ lab
370
+ d
371
+ firewall
372
+ fs
373
+ eng
374
+ ann
375
+ mail01
376
+ mantis
377
+ v
378
+ affiliates
379
+ webconf
380
+ track
381
+ ticket
382
+ pm
383
+ db2
384
+ b
385
+ clients
386
+ tech
387
+ erp
388
+ monitoring
389
+ cdn1
390
+ images4
391
+ payment
392
+ origin
393
+ client
394
+ foto
395
+ domain
396
+ pt
397
+ pma
398
+ directory
399
+ cc
400
+ public
401
+ finance
402
+ ns11
403
+ test3
404
+ wordpress
405
+ corp
406
+ sslvpn
407
+ cal
408
+ mailman
409
+ book
410
+ ip
411
+ zeus
412
+ ns10
413
+ hermes
414
+ storage
415
+ free
416
+ static1
417
+ pbx
418
+ banner
419
+ mobil
420
+ kb
421
+ mail5
422
+ direct
423
+ ipfixe
424
+ wifi
425
+ development
426
+ board
427
+ ns01
428
+ st
429
+ reviews
430
+ radius
431
+ pro
432
+ atlas
433
+ links
434
+ in
435
+ oldmail
436
+ register
437
+ s4
438
+ images6
439
+ static2
440
+ id
441
+ shopping
442
+ drupal
443
+ analytics
444
+ m1
445
+ images5
446
+ images7
447
+ img3
448
+ mx01
449
+ www7
450
+ redirect
451
+ sitebuilder
452
+ smtp3
453
+ adserver
454
+ net
455
+ user
456
+ forms
457
+ outlook
458
+ press
459
+ vc
460
+ health
461
+ work
462
+ mb
463
+ mm
464
+ f
465
+ pgsql
466
+ jp
467
+ sports
468
+ preprod
469
+ g
470
+ p
471
+ mdm
472
+ ar
473
+ lync
474
+ market
475
+ dbadmin
476
+ barracuda
477
+ affiliate
478
+ mars
479
+ users
480
+ images8
481
+ biblioteca
482
+ mc
483
+ ns12
484
+ math
485
+ ntp1
486
+ web01
487
+ software
488
+ pr
489
+ jupiter
490
+ labs
491
+ linux
492
+ sc
493
+ love
494
+ fax
495
+ php
496
+ lp
497
+ tracking
498
+ thumbs
499
+ up
500
+ tw
501
+ campus
502
+ reg
503
+ digital
504
+ demo2
505
+ da
506
+ tr
507
+ otrs
508
+ web6
509
+ ns02
510
+ mailgw
511
+ education
512
+ order
513
+ piwik
514
+ banners
515
+ rs
516
+ se
517
+ venus
518
+ internal
519
+ webservices
520
+ cm
521
+ whois
522
+ sync
523
+ lb
524
+ is
525
+ code
526
+ click
527
+ w2
528
+ bugzilla
529
+ virtual
530
+ origin-www
531
+ top
532
+ customer
533
+ pub
534
+ hotel
535
+ openx
536
+ log
537
+ uat
538
+ cdn3
539
+ images0
540
+ cgi
541
+ posta
542
+ reseller
543
+ soft
544
+ movie
545
+ mba
546
+ n
547
+ r
548
+ developer
549
+ nms
550
+ ns9
551
+ webcam
552
+ construtor
553
+ ebook
554
+ ftp3
555
+ join
556
+ dashboard
557
+ bi
558
+ wpad
559
+ admin2
560
+ agent
561
+ wm
562
+ books
563
+ joomla
564
+ hotels
565
+ ezproxy
566
+ ds
567
+ sa
568
+ katalog
569
+ team
570
+ emkt
571
+ antispam
572
+ adv
573
+ mercury
574
+ flash
575
+ myadmin
576
+ sklep
577
+ newsite
578
+ law
579
+ pl
580
+ ntp2
581
+ x
582
+ srv1
583
+ mp3
584
+ archives
585
+ proxy2
586
+ ps
587
+ pic
588
+ ir
589
+ orion
590
+ srv
591
+ mt
592
+ ocs
593
+ server3
594
+ meeting
595
+ v1
596
+ delta
597
+ titan
598
+ manager
599
+ subscribe
600
+ develop
601
+ wsus
602
+ oascentral
603
+ mobi
604
+ people
605
+ galleries
606
+ wwwtest
607
+ backoffice
608
+ sg
609
+ repo
610
+ soporte
611
+ www8
612
+ eu
613
+ ead
614
+ students
615
+ hq
616
+ awstats
617
+ ec
618
+ security
619
+ school
620
+ corporate
621
+ podcast
622
+ vote
623
+ conf
624
+ magento
625
+ mx4
626
+ webservice
627
+ tour
628
+ s5
629
+ power
630
+ correio
631
+ mon
632
+ mobilemail
633
+ weather
634
+ international
635
+ prod
636
+ account
637
+ xx
638
+ pages
639
+ pgadmin
640
+ bfn2
641
+ webserver
642
+ www-test
643
+ maintenance
644
+ me
645
+ magazine
646
+ syslog
647
+ int
648
+ view
649
+ enews
650
+ ci
651
+ au
652
+ mis
653
+ dev3
654
+ pdf
655
+ mailgate
656
+ v3
657
+ ss
658
+ internet
659
+ host1
660
+ smtp01
661
+ journal
662
+ wireless
663
+ opac
664
+ w1
665
+ signup
666
+ database
667
+ demo1
668
+ br
669
+ android
670
+ career
671
+ listserv
672
+ bt
673
+ spb
674
+ cam
675
+ contacts
676
+ webtest
677
+ resources
678
+ 1
679
+ life
680
+ mail6
681
+ transfer
682
+ app1
683
+ confluence
684
+ controlpanel
685
+ secure2
686
+ puppet
687
+ classifieds
688
+ tunet
689
+ edge
690
+ biz
691
+ host3
692
+ red
693
+ newmail
694
+ mx02
695
+ sb
696
+ physics
697
+ ap
698
+ epaper
699
+ sts
700
+ proxy1
701
+ ww1
702
+ stg
703
+ sd
704
+ science
705
+ star
706
+ www9
707
+ phoenix
708
+ pluto
709
+ webdav
710
+ booking
711
+ eshop
712
+ edit
713
+ panelstats
714
+ xmpp
715
+ food
716
+ cert
717
+ adfs
718
+ mail02
719
+ cat
720
+ edm
721
+ vcenter
722
+ mysql2
723
+ sun
724
+ phone
725
+ surveys
726
+ smart
727
+ system
728
+ twitter
729
+ updates
730
+ webmail1
731
+ logs
732
+ sitedefender
733
+ as
734
+ cbf1
735
+ sugar
736
+ contact
737
+ vm
738
+ ipad
739
+ traffic
740
+ dm
741
+ saturn
742
+ bo
743
+ network
744
+ ac
745
+ ns13
746
+ webdev
747
+ libguides
748
+ asp
749
+ tm
750
+ core
751
+ mms
752
+ abc
753
+ scripts
754
+ fm
755
+ sm
756
+ test4
757
+ nas
758
+ newsletters
759
+ rsc
760
+ cluster
761
+ learn
762
+ panelstatsmail
763
+ lb1
764
+ usa
765
+ apollo
766
+ pre
767
+ terminal
768
+ l
769
+ tc
770
+ movies
771
+ sh
772
+ fms
773
+ dms
774
+ z
775
+ base
776
+ jwc
777
+ gs
778
+ kvm
779
+ bfn1
780
+ card
781
+ web02
782
+ lg
783
+ editor
784
+ metrics
785
+ feed
786
+ repository
787
+ asterisk
788
+ sns
789
+ global
790
+ counter
791
+ ch
792
+ sistemas
793
+ pc
794
+ china
795
+ u
796
+ payments
797
+ ma
798
+ pics
799
+ www10
800
+ e-learning
801
+ auction
802
+ hub
803
+ sf
804
+ cbf8
805
+ forum2
806
+ ns14
807
+ app2
808
+ passport
809
+ hd
810
+ talk
811
+ ex
812
+ debian
813
+ ct
814
+ rc
815
+ 2012
816
+ imap4
817
+ blog2
818
+ ce
819
+ sk
820
+ relay2
821
+ green
822
+ print
823
+ geo
824
+ multimedia
825
+ iptv
826
+ backup2
827
+ webapps
828
+ audio
829
+ ro
830
+ smtp4
831
+ pg
832
+ ldap2
833
+ backend
834
+ profile
835
+ oldwww
836
+ drive
837
+ bill
838
+ listas
839
+ orders
840
+ win
841
+ mag
842
+ apply
843
+ bounce
844
+ mta
845
+ hp
846
+ suporte
847
+ dir
848
+ pa
849
+ sys
850
+ mx0
851
+ ems
852
+ antivirus
853
+ web8
854
+ inside
855
+ play
856
+ nic
857
+ welcome
858
+ premium
859
+ exam
860
+ sub
861
+ cz
862
+ omega
863
+ boutique
864
+ pp
865
+ management
866
+ planet
867
+ ww3
868
+ orange
869
+ c1
870
+ zzb
871
+ form
872
+ ecommerce
873
+ tmp
874
+ plus
875
+ openvpn
876
+ fw1
877
+ hk
878
+ owncloud
879
+ history
880
+ clientes
881
+ srv2
882
+ img4
883
+ open
884
+ registration
885
+ mp
886
+ blackboard
887
+ fc
888
+ static3
889
+ server4
890
+ s6
891
+ ecard
892
+ dspace
893
+ dns01
894
+ md
895
+ mcp
896
+ ares
897
+ spf
898
+ kms
899
+ intranet2
900
+ accounts
901
+ webapp
902
+ ask
903
+ rd
904
+ www-dev
905
+ gw2
906
+ mall
907
+ bg
908
+ teste
909
+ ldap1
910
+ real
911
+ m3
912
+ wave
913
+ movil
914
+ portal2
915
+ kids
916
+ gw1
917
+ ra
918
+ tienda
919
+ private
920
+ po
921
+ 2013
922
+ cdn4
923
+ gps
924
+ km
925
+ ent
926
+ tt
927
+ ns21
928
+ at
929
+ athena
930
+ cbf2
931
+ webmail3
932
+ mob
933
+ matrix
934
+ ns15
935
+ send
936
+ lb2
937
+ pos
938
+ 2
939
+ cl
940
+ renew
941
+ admissions
942
+ am
943
+ beta2
944
+ gamma
945
+ mx5
946
+ portfolio
947
+ contest
948
+ box
949
+ mg
950
+ wwwold
951
+ neptune
952
+ mac
953
+ pms
954
+ traveler
955
+ media2
956
+ studio
957
+ sw
958
+ imp
959
+ bs
960
+ alfa
961
+ cbf4
962
+ servicedesk
963
+ wmail
964
+ video2
965
+ switch
966
+ sam
967
+ sky
968
+ ee
969
+ widget
970
+ reklama
971
+ msn
972
+ paris
973
+ tms
974
+ th
975
+ vega
976
+ trade
977
+ intern
978
+ ext
979
+ oldsite
980
+ learning
981
+ group
982
+ f1
983
+ ns22
984
+ ns20
985
+ demo3
986
+ bm
987
+ dom
988
+ pe
989
+ annuaire
990
+ portail
991
+ graphics
992
+ iris
993
+ one
994
+ robot
995
+ ams
996
+ s7
997
+ foro
998
+ gaia
999
+ vpn3
tdagent/tools/get_domain_information.py ADDED
@@ -0,0 +1,334 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import json
2
+ import os
3
+ from concurrent.futures import ThreadPoolExecutor
4
+ from pathlib import Path
5
+ from typing import Any
6
+
7
+ import gradio as gr
8
+ import requests
9
+ import urllib3
10
+ from dns import message
11
+
12
+
13
+ _DNS_SERVER = "https://dns.google/dns-query" # can use others
14
+ _DNS_RECORD_TYPES = [
15
+ "A",
16
+ "AAAA",
17
+ "CNAME",
18
+ "MX",
19
+ "NS",
20
+ "SOA",
21
+ "TXT",
22
+ "RP",
23
+ "LOC",
24
+ "CAA",
25
+ "SPF",
26
+ "SRV",
27
+ "NSEC",
28
+ "RRSIG",
29
+ ]
30
+
31
+ _COMMON_SUBDOMAINS_TXT_PATH = Path("./subdomains/subdomains.txt")
32
+
33
+
34
+ def get_geolocation(ip: str) -> dict[str, Any] | str:
35
+ """Get location information from an ip address.
36
+
37
+ Returns the following information on an ip address:
38
+ 1. IPv4
39
+ 2. city
40
+ 4. country_code
41
+ 5. country_name
42
+ 6. latitude
43
+ 7. longitude
44
+ 8. postal
45
+ 9. state
46
+
47
+ Example:
48
+ >>> from pprint import pprint
49
+ >>> pprint(get_location("103.100.104.0"))
50
+ ... {'IPv4': '103.100.104.0',
51
+ 'city': None,
52
+ 'country_code': 'NZ',
53
+ 'country_name': 'New Zealand',
54
+ 'latitude': -41,
55
+ 'longitude': 174,
56
+ 'postal': None,
57
+ 'state': None}
58
+
59
+ Args:
60
+ ip: ip address
61
+
62
+ Returns:
63
+ Location information on the ip address.
64
+ """
65
+ try:
66
+ return requests.get(
67
+ f"https://geolocation-db.com/json/{ip}",
68
+ timeout=0.5,
69
+ ).json()
70
+ except Exception as e: # noqa: BLE001
71
+ return str(e)
72
+
73
+
74
+ def _request_dns_record(domain: str, record_type: str) -> str:
75
+ """Utility to build dns resolve requests that do not use port 53.
76
+
77
+ Args:
78
+ domain: domain to investigate
79
+ record_type: record type
80
+
81
+ Returns:
82
+ Information about the dns record type for the domain.
83
+ """
84
+ q = message.make_query(domain, record_type)
85
+ response = requests.post(
86
+ _DNS_SERVER,
87
+ headers={
88
+ "Content-Type": "application/dns-message",
89
+ "Accept": "application/dns-message",
90
+ },
91
+ data=q.to_wire(),
92
+ verify=True,
93
+ timeout=0.2,
94
+ )
95
+ dns_message = message.from_wire(response.content)
96
+ return [str(rdata) for rdata in dns_message.answer[0]] if dns_message.answer else []
97
+
98
+ # see: https://thepythoncode.com/article/dns-enumeration-with-python
99
+ # https://dnspython.readthedocs.io
100
+ def enumerate_dns(domain_name: str) -> dict[str, Any] | None:
101
+ r"""Enumerates information about a specific domain's DNS configuration.
102
+
103
+ Information collected about the domain name:
104
+ 1. A records: the IPv4 associated with the domain
105
+ 2. AAAA records: the IPv6 associated with the domain
106
+ 3. CAA records: used by owners to specify which Certificate Authorities
107
+ are authorized to issue SSL/TLS certificates for their domains.
108
+ 4. CNAME records: alias of one name to another - the DNS lookup will
109
+ continue by retrying the lookup with the new name.
110
+ 5. LOC records: geographic location associated with a domain name.
111
+ 6. MX records: associated email servers to the domain.
112
+ 7. NS records: DNS servers that are authoritative for a particular domain.
113
+ These may be use to inquire information about the domain.
114
+ 8. SOA records: defines authoritative information about a DNS zone,
115
+ including zone transfers and cache expiration.
116
+ 9. TXT records: used for domain verification and email security.
117
+ 10. RP records: the responsible person for a domain.
118
+ 11. SPF records: defines authorized email servers.
119
+ 12. SRV records: specifies location of specific services
120
+ (port and host) for the domain.
121
+ 14. NSEC records: proves non-existence of DNS records
122
+ and prevents zone enumeration.
123
+ 15. RRSIG records: contains cryptographic signatures for DNSSEC-signed
124
+ records, providing authentication and integrity.
125
+
126
+ Example:
127
+ >>> from pprint import pprint
128
+ >>> pprint(enumerate_dns("youtube.com"))
129
+ ... {'A': 'youtube.com. 300 IN A 142.250.200.142',
130
+ 'AAAA': 'youtube.com. 286 IN AAAA 2a00:1450:4003:80f::200e',
131
+ 'CAA': 'youtube.com. 14352 IN CAA 0 issue "pki.goog"',
132
+ 'CNAME': None,
133
+ 'LOC': None,
134
+ 'MX': 'youtube.com. 300 IN MX 0 smtp.google.com.',
135
+ 'NS': 'youtube.com. 21600 IN NS ns4.google.com.\n'
136
+ 'youtube.com. 21600 IN NS ns1.google.com.\n'
137
+ 'youtube.com. 21600 IN NS ns2.google.com.\n'
138
+ 'youtube.com. 21600 IN NS ns3.google.com.',
139
+ 'NSEC': None,
140
+ 'RP': None,
141
+ 'RRSIG': None,
142
+ 'SOA': 'youtube.com. 60 IN SOA ns1.google.com. dns-admin.google.com. '
143
+ '766113658 900 900 1800 60',
144
+ 'SPF': None,
145
+ 'SRV': None,
146
+ 'TXT': 'youtube.com. 3586 IN TXT "v=spf1 include:google.com mx -all"\n'
147
+ 'youtube.com. 3586 IN TXT '
148
+ '"facebook-domain-verification=64jdes7le4h7e7lfpi22rijygx58j1"\n'
149
+ 'youtube.com. 3586 IN TXT '
150
+ '"google-site-verification=QtQWEwHWM8tHiJ4s-jJWzEQrD_fF3luPnpzNDH-Nw-w"'}
151
+
152
+ Args:
153
+ domain_name: domain name for which to
154
+ enumerate the DNS configuration.
155
+
156
+ Returns:
157
+ The domain's DNS configuration.
158
+ """
159
+ enumeration = {}
160
+ for record_type in _DNS_RECORD_TYPES:
161
+ try:
162
+ record = _request_dns_record(domain_name, record_type)
163
+ if record:
164
+ enumeration[record_type] = record
165
+ except Exception as e: # noqa: BLE001, PERF203
166
+ enumeration[record_type] = str(e)
167
+ return enumeration if enumeration else None
168
+
169
+ def resolve_subdomain_ipv4(domain: str) -> str | None:
170
+ """Resolve the IPv4 address of a domain.
171
+
172
+ Args:
173
+ domain: domain name
174
+
175
+ Returns:
176
+ The domain is returned provided
177
+ it was resolved. Otherwise nothing
178
+ is returned.
179
+ """
180
+ try:
181
+ _request_dns_record(domain, "A")
182
+ return domain # noqa: TRY300
183
+ except Exception: # noqa: BLE001
184
+ return None
185
+
186
+
187
+ def scrap_subdomains_for_domain(domain_name: str) -> list[str]:
188
+ """Retrieves subdomains associated to a domain if any.
189
+
190
+ The information retrieved from a domain is its subdomains
191
+ provided they are the top 1000 subdomain prefixes as
192
+ indicated by https://github.com/rbsec/dnscan/tree/master
193
+
194
+ Importantly, it finds subdomains only if their prefixes
195
+ are along the top 1000 most common. Hence, it may not
196
+ yield all the subdomains associated to the domain.
197
+
198
+ Example:
199
+ >>> scrap_subdomains_for_domain("github.com")
200
+ ... ['www.github.com', 'smtp.github.com', 'ns1.github.com',
201
+ 'ns2.github.com','autodiscover.github.com', 'test.github.com',
202
+ 'blog.github.com', 'admin.github.com', 'support.github.com',
203
+ 'docs.github.com', 'shop.github.com', 'wiki.github.com',
204
+ 'api.github.com', 'live.github.com', 'help.github.com',
205
+ 'jobs.github.com', 'services.github.com', 'de.github.com',
206
+ 'cs.github.com', 'fr.github.com', 'ssh.github.com',
207
+ 'partner.github.com', 'community.github.com',
208
+ 'mailer.github.com', 'training.github.com', ...]
209
+
210
+ Args:
211
+ domain_name: domain name for which to retrieve a
212
+ list of subdomains
213
+
214
+ Returns:
215
+ List of subdomains if any.
216
+ """
217
+ try:
218
+ with open(_COMMON_SUBDOMAINS_TXT_PATH) as file: # noqa: PTH123
219
+ subdomains = [line.strip() for line in file if line.strip()]
220
+ except FileNotFoundError:
221
+ return []
222
+
223
+ potential_subdomains = [f"{subdomain}.{domain_name}" for subdomain in subdomains]
224
+ with ThreadPoolExecutor(max_workers=5) as executor:
225
+ results = executor.map(resolve_subdomain_ipv4, potential_subdomains)
226
+ return [domain for domain in results if domain]
227
+
228
+ def retrieve_ioc_from_threatfox(potentially_ioc: str) -> str:
229
+ r"""Retrieves information about a potential IoC from ThreatFox.
230
+
231
+ It may be used to retrieve information of indicators of compromise
232
+ (IOCs) associated with malware, with the infosec community, AV
233
+ vendors and cyber threat intelligence providers.
234
+
235
+ Examples:
236
+ >>> retrieve_ioc_from_threatfox("139.180.203.104")
237
+ ... {
238
+ "query_status": "ok",
239
+ "data": [
240
+ {
241
+ "id": "12",
242
+ "ioc": "139.180.203.104:443",
243
+ "threat_type": "botnet_cc",
244
+ "threat_type_desc": "Indicator that identifies a botnet command&control...",
245
+ "ioc_type": "ip:port",
246
+ "ioc_type_desc": "ip:port combination that is used for botnet Command&...,
247
+ "malware": "win.cobalt_strike",
248
+ "malware_printable": "Cobalt Strike",
249
+ "malware_alias": "Agentemis,BEACON,CobaltStrike",
250
+ "malware_malpedia": "https:\/\/malpedia.caad.fkie.fraunhofer.de\/...",
251
+ "confidence_level": 75,
252
+ "first_seen": "2020-12-06 09:10:23 UTC",
253
+ "last_seen": null,
254
+ "reference": null,
255
+ "reporter": "abuse_ch",
256
+ "tags": null,
257
+ "malware_samples": [
258
+ {
259
+ "time_stamp": "2021-03-23 08:18:06 UTC",
260
+ "md5_hash": "5b7e82e051ade4b14d163eea2a17bf8b",
261
+ "sha256_hash": "b325c92fa540edeb89b95dbfd4400c1cb33599c66859....",
262
+ "malware_bazaar": "https:\/\/bazaar.abuse.ch\/sample\/b325c...\/"
263
+ },
264
+ ]
265
+
266
+ }
267
+ ]
268
+ }
269
+
270
+ Args:
271
+ potentially_ioc: this can be a url, a domain, a hash,
272
+ or any other type of IoC.
273
+
274
+ Returns:
275
+ Information of the input as an IoC: threat type, malware type andsamples,
276
+ confidence level, first/last seen dates, and more IoC information.
277
+ """
278
+ headers = {"Auth-Key": os.environ["THREATFOX_APIKEY"]}
279
+ pool = urllib3.HTTPSConnectionPool(
280
+ "threatfox-api.abuse.ch",
281
+ port=443,
282
+ maxsize=50,
283
+ headers=headers,
284
+ )
285
+ data = {
286
+ "query": "search_ioc",
287
+ "search_term": potentially_ioc,
288
+ }
289
+ json_data = json.dumps(data)
290
+ try:
291
+ response = pool.request("POST", "/api/v1/", body=json_data)
292
+ return response.data.decode("utf-8", "ignore")
293
+ except Exception as e: # noqa: BLE001
294
+ return str(e)
295
+
296
+
297
+ geo_location_tool = gr.Interface(
298
+ fn=get_geolocation,
299
+ inputs=["text"],
300
+ outputs=["text"],
301
+ title="Domain Associated Geolocation Finder",
302
+ description="Retrieves the geolocation associated to an input ip address",
303
+ theme="default",
304
+ )
305
+
306
+ dns_enumeration_tool = gr.Interface(
307
+ fn=enumerate_dns,
308
+ inputs=["text"],
309
+ outputs=["text"],
310
+ title="DNS record enumerator of domains",
311
+ description="Retrieves several dns record types for the input domain names",
312
+ theme="default",
313
+ )
314
+
315
+ scrap_subdomains_tool = gr.Interface(
316
+ fn=scrap_subdomains_for_domain,
317
+ inputs=["text"],
318
+ outputs=["text"],
319
+ title="Subdomains Extractor of domains",
320
+ description="Retrieves the subdomains for the input domain if they are common",
321
+ theme="default",
322
+ )
323
+
324
+ extractor_of_ioc_from_threatfox_tool = gr.Interface(
325
+ fn=retrieve_ioc_from_threatfox,
326
+ inputs=["text"],
327
+ outputs=["text"],
328
+ title="IoC information extractor associated to particular entities",
329
+ description=(
330
+ "If information as an Indicator of Compromise (IoC) exists"
331
+ "for the input url, domain or hash, it retrieves it"
332
+ ),
333
+ theme="default",
334
+ )
uv.lock CHANGED
The diff for this file is too large to render. See raw diff