Skip to content

Commit 5c65713

Browse files
Merge pull request #96 from OSINT-TECHNOLOGIES/rolling
Stabilized v1.2
2 parents 013d5ca + 6c3ee98 commit 5c65713

20 files changed

+609
-88
lines changed

.readthedocs.yaml

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
version: 2
2+
3+
build:
4+
os: ubuntu-20.04
5+
tools:
6+
python: "3.10"
7+
jobs:
8+
pre_build:
9+
- pip install mkdocs mkdocs-material
10+
11+
python:
12+
install:
13+
- requirements: requirements.txt
14+
15+
mkdocs:
16+
configuration: docs/dpulse-docs/mkdocs.yml

README.md

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# DPULSE - Domain Public Data Collection Service
22

33
<p align="center">
4-
<img src="https://github.com/OSINT-TECHNOLOGIES/dpulse/assets/77023667/fed8d368-7309-4aaa-a82e-2f0b277122de">
4+
<img src="https://github.com/user-attachments/assets/e49c764a-5039-4a54-b002-6b625f0b371b">
55
</p>
66

77
<p align="center">
@@ -20,32 +20,27 @@
2020

2121
> Attention! DPULSE is a research tool. It is not intended for criminal activities! Use DPULSE only on allowed domains and for legal purposes!
2222
23+
> Please, before creating an issue or DMing developer about DPULSE, make sure that your problem or question is not covered with [DPULSE documentation](https://dpulse.readthedocs.io)
24+
2325
# Repository map
2426

2527
## What to visit?
2628

2729
| What do you want to see? | Link |
2830
| --- | --- |
29-
| What is DPULSE? | [See "About DPULSE" page](https://github.com/OSINT-TECHNOLOGIES/dpulse?tab=readme-ov-file#about-dpulse) |
30-
| Where I can find some demo and use-cases? | [See "Demo and use-cases" page](https://github.com/OSINT-TECHNOLOGIES/dpulse?tab=readme-ov-file#dpulse-demo-and-use-cases) |
31-
| I want to read project documentation | [See DPULSE wiki](https://github.com/OSINT-TECHNOLOGIES/dpulse/wiki/DPULSE-WIKI) |
31+
| I want to read project documentation | [See DPULSE Readthedocs Page](https://dpulse.readthedocs.io) |
32+
| I want to see developer's contacts | [See "Contact developer" page on Readthedocs](https://dpulse.readthedocs.io/en/latest/contact_dev/#) |
3233
| I want to see project roadmap and future development plans | [See DPULSE roadmap](https://github.com/users/OSINT-TECHNOLOGIES/projects/1) |
3334

3435
## What to download?
3536

3637
| Your expectations | Version and link for you |
3738
| --- | --- |
3839
| I want to use only tested and stable version of DPULSE | [DPULSE stable ZIP archive](https://github.com/OSINT-TECHNOLOGIES/dpulse/archive/refs/heads/main.zip) |
39-
| I don't mind to use DPULSE with latest changes and you're OK with bugs and issues | [DPULSE rolling ZIP archive](https://github.com/OSINT-TECHNOLOGIES/dpulse/archive/refs/heads/rolling.zip) |
40+
| I don't mind to use DPULSE with latest changes and I'm OK with bugs and issues | [DPULSE rolling ZIP archive](https://github.com/OSINT-TECHNOLOGIES/dpulse/archive/refs/heads/rolling.zip) |
4041
| I want to use only one specific version of DPULSE | [See DPULSE releases page](https://github.com/OSINT-TECHNOLOGIES/dpulse/releases) |
4142
| I want to see more detailed installation instructions | [See DPULSE installation guides](https://github.com/OSINT-TECHNOLOGIES/dpulse?tab=readme-ov-file#how-to-install-and-run-dpulse)
4243

43-
## How can I contact the developer?
44-
45-
| Reasons to contact | Links & addresses |
46-
| --- | --- |
47-
| I want to talk with developer in person | DM to osint.technologies@gmail.com |
48-
| I want to report some bug or issue, or maybe I have some good idea for developer | [Make a new issue page](https://github.com/OSINT-TECHNOLOGIES/dpulse/issues/new/choose) |
4944

5045
# About DPULSE
5146

@@ -157,11 +152,11 @@ If you have problems with starting installer.sh, you should try to use `dos2unix
157152

158153
### You can start DPULSE and see the main menu on the screen using one of the recommended commands in DPULSE root folder. Don't forget to install all requirements before starting DPULSE
159154

160-
![dpulse_start](https://github.com/user-attachments/assets/49cb476c-d9a5-4ff6-999f-afa0badf0e0d)
155+
![dpulse_start](https://github.com/user-attachments/assets/9ec0ab73-2206-4d38-bae6-e88656e17f95)
161156

162157
### After choosing first menu point, you will be able to enter target's URL and case comment, and then you will see scanning progress
163158

164-
![dpulse_running](https://github.com/user-attachments/assets/9a3cd8c2-3281-4d58-b12e-91ced6dbbd91)
159+
![dpulse_bs](https://github.com/user-attachments/assets/b0ad7827-6dac-4f82-a369-4447a0e1c878)
165160

166161
### Finally, DPULSE will create report folder which contains case name (basically URL of target), date and time of scan. All report folders are contained in DPULSE root folder
167162

@@ -194,6 +189,12 @@ If you have problems with starting installer.sh, you should try to use `dos2unix
194189

195190
### [by @UndeadSec](https://x.com/UndeadSec/status/1827692406797689032)
196191

192+
### [by @akaclandestine](https://x.com/akaclandestine/status/1875980998418002151?t=Ac-fZ9oe2FLKkTTCClss8g&s=19)
193+
194+
### [by @hdH4dg8](https://x.com/hdH4dg8/status/1876106586869104906?t=Awfas25ukXkblPRt4krSzA&s=19)
195+
196+
### [by @wy88215534](https://x.com/wy88215534/status/1876522251828494794?t=cmwoNCDZv0kMEDMKokcVFA&s=19)
197+
197198
## Facebook mentions:
198199

199200
### [by Inteligência Cibernética](https://www.facebook.com/osintbrasil/posts/pfbid037ibycZcBWe2MjtV4HiWvRWxyKei8TJ5Ycfxai4TDNHXuwrYkDGuyjDsPow8WUNbyl)

datagather_modules/crawl_processor.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@ def subdomains_gather(url, short_domain):
103103
print(Fore.RED + f"Cannot gather subdomains due to error. See journal for details" + Style.RESET_ALL)
104104
logging.error(f'SUBDOMAINS GATHERING: ERROR. REASON: {e}')
105105
pass
106+
return ['No subdomains were found'], 0
106107

107108
def sm_gather(url):
108109
response = requests.get(url)
@@ -173,7 +174,7 @@ def domains_reverse_research(subdomains, report_file_type):
173174
for subdomain in subdomains:
174175
subdomain_url = "http://" + subdomain + "/"
175176
subdomain_urls.append(subdomain_url)
176-
except (socket.gaierror, requests.exceptions.SSLError, requests.exceptions.ConnectionError) as e:
177+
except Exception as e:
177178
print(Fore.RED + "Some URL seems unreachable! DPULSE will continue to work, but the URL causing the error won't be included in report. See journal for details" + Style.RESET_ALL)
178179
logging.error(f'SUBDOMAINS URL FORMING: ERROR. REASON: {e}')
179180
pass
@@ -183,7 +184,7 @@ def domains_reverse_research(subdomains, report_file_type):
183184
subdomains_ip = ip_gather(subdomain)
184185
subdomain_ip.append(subdomains_ip)
185186
subdomain_ip = list(set(subdomain_ip))
186-
except (socket.gaierror, requests.exceptions.SSLError, requests.exceptions.ConnectionError) as e:
187+
except Exception as e:
187188
print(Fore.RED + "Some URL seems unreachable! DPULSE will continue to work, but the URL causing the error won't be included in report. See journal for details" + Style.RESET_ALL)
188189
logging.error(f'SUBDOMAINS IP GATHERING: ERROR. REASON: {e}')
189190
pass
@@ -194,7 +195,7 @@ def domains_reverse_research(subdomains, report_file_type):
194195
subdomain_mails.append(subdomain_mail)
195196
subdomain_social = sm_gather(subdomain_url)
196197
subdomain_socials.append(subdomain_social)
197-
except (socket.gaierror, requests.exceptions.SSLError, requests.exceptions.ConnectionError) as e:
198+
except Exception as e:
198199
print(Fore.RED + "Some URL seems unreachable! DPULSE will continue to work, but the URL causing the error won't be included in report. See journal for details" + Style.RESET_ALL)
199200
logging.error(f'SUBDOMAINS MAIL/SOCIALS GATHERING: ERROR. REASON: {e}')
200201
pass

datagather_modules/data_assembler.py

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,12 @@ def data_gathering(self, short_domain, url, report_file_type, pagesearch_flag, k
8181
print(Fore.GREEN + 'Processing subdomain gathering' + Style.RESET_ALL)
8282
subdomains, subdomains_amount = cp.subdomains_gather(url, short_domain)
8383
print(Fore.GREEN + 'Processing social medias gathering' + Style.RESET_ALL)
84-
social_medias = cp.sm_gather(url)
84+
try:
85+
social_medias = cp.sm_gather(url)
86+
except:
87+
print(Fore.RED + "Social medias were not gathered because of error" + Style.RESET_ALL)
88+
social_medias = ['Social medias were not extracted because of error']
89+
pass
8590
print(Fore.GREEN + 'Processing subdomain analysis' + Style.RESET_ALL)
8691
if report_file_type == 'xlsx':
8792
subdomain_urls, subdomain_mails, subdomain_ip, sd_socials = cp.domains_reverse_research(subdomains, report_file_type)
@@ -164,17 +169,8 @@ def data_gathering(self, short_domain, url, report_file_type, pagesearch_flag, k
164169
api_scan_db.append('No')
165170
pass
166171

167-
#data_array = [ip, res, mails, subdomains, subdomains_amount, social_medias, subdomain_mails, sd_socials,
168-
# subdomain_ip, issuer, subject, notBefore, notAfter, commonName, serialNumber, mx_records,
169-
# robots_txt_result, sitemap_xml_result, sitemap_links_status,
170-
# web_servers, cms, programming_languages, web_frameworks, analytics, javascript_frameworks, ports,
171-
# hostnames, cpes, tags, vulns, common_socials, total_socials, ps_emails_return,
172-
# accessible_subdomains, emails_amount, files_counter, cookies_counter, api_keys_counter,
173-
# website_elements_counter, exposed_passwords_counter, total_links_counter, accessed_links_counter, dorking_status, dorking_results, vt_cats,
174-
# vt_deturls, vt_detsamples, vt_undetsamples]
175172

176173
cleaned_dorking = [item.strip() for item in dorking_results if item.strip()]
177-
#print(cleaned_dorking)
178174

179175
data_array = [ip, res, mails, subdomains, subdomains_amount, social_medias, subdomain_mails, sd_socials,
180176
subdomain_ip, issuer, subject, notBefore, notAfter, commonName, serialNumber, mx_records,

datagather_modules/networking_processor.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ def get_ssl_certificate(short_domain, port=443):
5151
commonName = str(cert['issuer'][2][0][1]) + ', version: ' + str(cert['version'])
5252
serialNumber = cert['serialNumber']
5353
return issuer, subject, notBefore, notAfter, commonName, serialNumber
54-
except (ssl.CertificateError, ssl.SSLError, socket.gaierror, ConnectionRefusedError) as e:
54+
except Exception as e:
5555
print(Fore.RED + "Error while gathering info about SSL certificate. See journal for details")
5656
logging.error(f'SSL CERTIFICATE GATHERING: ERROR. REASON: {e}')
5757
issuer = subject = notBefore = notAfter = commonName = serialNumber = "No information about SSL certificate was gathered"

docs/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+

docs/dpulse-docs/docs/api.md

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
# Third-party API scan mode
2+
3+
Currently DPULSE supports two third-party APIs:
4+
5+
* SecurityTrails API (securitytrails.com) for deep subdomains and DNS enumeration
6+
* VirusTotal API (virustotal.com) for brief domain information gathering
7+
8+
## SecurityTrails API
9+
10+
SecurityTrails API is used to gather information about a specified domain. It retrieves various types of DNS records, subdomains, and other details. SecurityTrails API in DPULSE returns these details about target domain:
11+
12+
* Alexa rank
13+
* Apex domain
14+
* Hostname
15+
* A/MX/NS/SOA/TXT records
16+
* All subdomains list
17+
* Alive (pingable) subdomains list
18+
19+
## VirusTotal API
20+
21+
VirusTotal API is used to interact with the VirusTotal service programmatically and analyze files and URLs using multiple antivirus engines and website scanners, providing insights into whether they are malicious. VirusTotal API in DPULSE returns these details about target domain:
22+
23+
* Categories
24+
* Detected samples
25+
* Undetected samples
26+
* Detected URLs
27+
28+
## API Keys database
29+
30+
In order to ensure the functioning of API services individually for each DPULSE user, API keys storage database was created. Similar to report storage database, it is lightweight .db extension database with simple structure shown below:
31+
32+
![apistordb](https://github.com/user-attachments/assets/02233813-781e-4bf8-be7c-76ec7627be06)
33+
34+
Since every API key is individual for each user, you can see fillers instead of actual keys when you start DPULSE for the first time, so until you replace filler with a real API key, you can't start using API in scans. You can enter your actual API keys using DPULSE CLI. You can see full process on the screenshot below:
35+
36+
![apiproc](https://github.com/user-attachments/assets/effb27ab-dd4b-4470-b90c-34c6f9a43d8c)
37+
38+
For the first time you will see red-colored API key field, which means that scan is not available with this API. After changing filler for actual key, you will see that color changed, which indicates that you can use your API key for scanning. Be advised that every free API service provided with some limitations (you can see them in DPULSE CLI for all supported API), so keep in mind that frequent usage of free API plans is not possible.
39+
40+
In case if you want to fully replace API keys, you can use reference API keys database. You can see menu point for this action on the screenshot above. This action will delete your actual API keys database, copy reference database and rename it. This action is very optional because you can change your API keys by just using first menu point in API Keys DB Manager (according to the screenshot above)
41+
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# Basic scan
2+
3+
Basic scan is default and the most basic scanning mode which starts after all preparation steps. It always starts first and you can't start scanning without it.
4+
5+
## Basic scan results
6+
7+
Basic scan returns some basic information open information about target domain, such as:
8+
9+
1. WHOIS information which contains domain name, full URL, IP address, registrar info, creation and expiration dates, organization name and contact e-mails.
10+
2. Subdomains list
11+
3. E-mail addresses list (gathered from subdomains)
12+
4. IP addresses list (gathered from subdomains)
13+
5. Social medias links, posts and profiles. Supported social medias are Facebook, Twitter (X.com), Instagram, Telegram, TikTok, LinkedIn, VKontakte, YouTube, Odnoklassniki, WeChat
14+
6. DNS and SSL information. DNS information contains name servers and MX addresses. SSL certificate information contains issuer, subject, creation and expiration dates, certificate name and serial number.
15+
7. Basic pre-pentest information such as possible vulnerabilities (CVEs), open ports and hostnames.
16+
8. Development and deployment services and frameworks information, such as CMS, web servers, used programming languages and web frameworks, analytics services, tags and so on.
17+
9. Downloaded copies of sitemap.xml and robots.txt files from a domain
18+
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
## Contact developer
2+
3+
DPULSE developer will be glad to see your messages with feedback, questions and suggestions. Feel free to contact developer with most convenient ways for you:
4+
5+
* OSINT-TECHNOLOGIES e-mail: osint.technologies@gmail.com
6+
* [Make an issue page on DPULSE GitHub repository](https://github.com/OSINT-TECHNOLOGIES/dpulse/issues/new/choose)
7+
8+
9+
10+

docs/dpulse-docs/docs/demo.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
# DPULSE demos & use-cases
2+
3+
On this page you can see some actual DPULSE demos and use-cases in some cybersecurity and OSINT scenarios
4+
5+
## Demo №1. Starting DPULSE
6+
7+
Yes, starting DPULSE is as simple as that. Don't forget to install all requirements before starting DPULSE
8+
9+
![dpulse_start](https://github.com/user-attachments/assets/9ec0ab73-2206-4d38-bae6-e88656e17f95)
10+
11+
## Demo №2. DPULSE basic scan workflow
12+
13+
Here you can see complete process of DPULSE basic scan from the beginning to the end. Remember that sometimes your scan might not be ideal and errors may appear. However, they will not interrupt scanning process, but will only affect the number and variety of results in the final report.
14+
15+
![dpulse_bs](https://github.com/user-attachments/assets/b0ad7827-6dac-4f82-a369-4447a0e1c878)
16+

0 commit comments

Comments
 (0)