forked from champmq/GoogleFU
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathGoogleFU-gui.py
149 lines (126 loc) · 5.44 KB
/
GoogleFU-gui.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
import sys
import requests
from bs4 import BeautifulSoup
import urllib.parse
from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget, QVBoxLayout, QHBoxLayout, QLabel, QLineEdit, QPushButton, QTextEdit, QComboBox, QFileDialog, QMessageBox
from PyQt5.QtGui import QFont
from PyQt5.QtCore import Qt
from modules.sort import Sort
from modules.search import Search
import time
from urllib.error import HTTPError, URLError
class GoogleFuApp(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("GoogleFu")
self.setGeometry(100, 100, 800, 600)
main_widget = QWidget()
self.setCentralWidget(main_widget)
layout = QVBoxLayout()
main_widget.setLayout(layout)
# Banner
banner_label = QLabel("GoogleFu")
banner_label.setAlignment(Qt.AlignCenter)
banner_label.setFont(QFont("Arial", 24, QFont.Bold))
layout.addWidget(banner_label)
# Description
desc_label = QLabel("This tool will find information on Google about someone or a topic.")
desc_label.setAlignment(Qt.AlignCenter)
layout.addWidget(desc_label)
# Query input
query_layout = QHBoxLayout()
query_label = QLabel("Query:")
self.query_input = QLineEdit()
search_button = QPushButton("Search")
search_button.clicked.connect(self.perform_search)
query_layout.addWidget(query_label)
query_layout.addWidget(self.query_input)
query_layout.addWidget(search_button)
layout.addLayout(query_layout)
# Google Dorks section
dorks_layout = QHBoxLayout()
dorks_label = QLabel("Google Dork:")
self.dorks_combo = QComboBox()
self.dorks_combo.addItems([
"None",
"site:",
"filetype:",
"inurl:",
"intitle:",
"intext:",
"cache:",
"link:",
"related:"
])
self.dorks_input = QLineEdit()
self.dorks_input.setPlaceholderText("Enter dork parameter")
dorks_layout.addWidget(dorks_label)
dorks_layout.addWidget(self.dorks_combo)
dorks_layout.addWidget(self.dorks_input)
layout.addLayout(dorks_layout)
# Results display
self.results_display = QTextEdit()
self.results_display.setReadOnly(True)
layout.addWidget(self.results_display)
# Clear and Save buttons
clear_button = QPushButton("Clear Results")
clear_button.clicked.connect(self.clear_results)
layout.addWidget(clear_button)
save_button = QPushButton("Save Results")
save_button.clicked.connect(self.save_results)
layout.addWidget(save_button)
def perform_search(self):
query = self.query_input.text()
dork = self.dorks_combo.currentText()
dork_param = self.dorks_input.text()
if dork != "None" and dork_param:
query = f"{query} {dork}{dork_param}"
max_retries = 5
retry_delay = 1 # Start with a 1-second delay
for attempt in range(max_retries):
try:
urls = Search(query).urls() # Assuming this method returns a list of URLs.
sorted_urls = Sort(urls).sort() # Assuming this method sorts the URLs.
results = f"Search Query: {query}\n\n"
for item in sorted_urls:
if sorted_urls[item]:
results += f"{item.capitalize()}: {', '.join(sorted_urls[item])}\n\n"
self.results_display.setText(results)
return # Exit the function if successful
except HTTPError as e:
if e.code == 429:
# Handle Too Many Requests
if attempt < max_retries - 1:
time.sleep(retry_delay) # Wait before retrying
retry_delay *= 2 # Exponential backoff
else:
self.results_display.setText("Error: Too many requests. Please try again later.")
return
else:
self.results_display.setText(f"HTTP Error: {e.code} - {e.reason}")
return
except URLError as e:
self.results_display.setText(f"URL Error: {str(e)}")
return
except Exception as e:
self.results_display.setText(f"An unexpected error occurred: {str(e)}")
return
def clear_results(self):
"""Clear the results display."""
self.results_display.clear()
def save_results(self):
"""Save the results to a text file."""
options = QFileDialog.Options()
file_name, _ = QFileDialog.getSaveFileName(self, "Save Results", "", "Text Files (*.txt);;All Files (*)", options=options)
if file_name:
try:
with open(file_name, 'w') as file:
file.write(self.results_display.toPlainText())
QMessageBox.information(self, "Success", "Results saved successfully.")
except Exception as e:
QMessageBox.warning(self, "Error", f"Failed to save results: {e}")
if __name__ == "__main__":
app = QApplication(sys.argv)
window = GoogleFuApp()
window.show()
sys.exit(app.exec_())