-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathproxyfire.py
More file actions
137 lines (117 loc) · 4.65 KB
/
proxyfire.py
File metadata and controls
137 lines (117 loc) · 4.65 KB
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
#!/usr/bin/env python3
# Вставь сюда полный GUI-код ProxyFire
#!/usr/bin/env python3
import sys
import os
import subprocess
import tempfile
from PyQt5.QtWidgets import (
QApplication, QMainWindow, QWidget, QVBoxLayout, QHBoxLayout,
QPushButton, QLineEdit, QLabel, QComboBox, QFileDialog,
QListWidget, QMessageBox, QGroupBox, QFormLayout
)
class ProxyFireApp(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("ProxyFire for Linux")
self.resize(720, 520)
central = QWidget()
self.setCentralWidget(central)
layout = QVBoxLayout(central)
# Прокси-настройки
proxy_group = QGroupBox("Настройки прокси")
proxy_form = QFormLayout()
self.proxy_type = QComboBox()
self.proxy_type.addItems(["socks5", "socks4", "http"])
self.proxy_host = QLineEdit("127.0.0.1")
self.proxy_port = QLineEdit("1080")
self.proxy_user = QLineEdit()
self.proxy_pass = QLineEdit()
self.proxy_pass.setEchoMode(QLineEdit.Password)
proxy_form.addRow("Тип:", self.proxy_type)
proxy_form.addRow("Хост:", self.proxy_host)
proxy_form.addRow("Порт:", self.proxy_port)
proxy_form.addRow("Логин (опц.):", self.proxy_user)
proxy_form.addRow("Пароль (опц.):", self.proxy_pass)
proxy_group.setLayout(proxy_form)
# Приложение
app_group = QGroupBox("Приложение")
app_form = QFormLayout()
self.app_path = QLineEdit()
browse_btn = QPushButton("Обзор...")
browse_btn.clicked.connect(self.browse_app)
app_form.addRow("Путь:", self.app_path)
app_form.addRow("", browse_btn)
self.app_args = QLineEdit()
app_form.addRow("Аргументы:", self.app_args)
app_group.setLayout(app_form)
# Кнопка запуска
self.launch_btn = QPushButton("🚀 Запустить через прокси")
self.launch_btn.setStyleSheet("font-size: 14px; padding: 8px;")
self.launch_btn.clicked.connect(self.launch_app)
# Лог
self.log = QListWidget()
layout.addWidget(proxy_group)
layout.addWidget(app_group)
layout.addWidget(self.launch_btn)
layout.addWidget(QLabel("Лог:"))
layout.addWidget(self.log)
def browse_app(self):
path, _ = QFileDialog.getOpenFileName(self, "Выберите приложение")
if path:
self.app_path.setText(path)
def log_msg(self, msg):
self.log.addItem(msg)
self.log.scrollToBottom()
def launch_app(self):
proxy_type = self.proxy_type.currentText()
host = self.proxy_host.text().strip()
port = self.proxy_port.text().strip()
user = self.proxy_user.text().strip()
password = self.proxy_pass.text().strip()
app = self.app_path.text().strip()
args = self.app_args.text().strip()
if not all([host, port, app]):
QMessageBox.critical(self, "Ошибка", "Заполните хост, порт и путь к приложению!")
return
if not os.path.isfile(app):
QMessageBox.critical(self, "Ошибка", "Файл приложения не найден!")
return
try:
port = int(port)
except ValueError:
QMessageBox.critical(self, "Ошибка", "Порт должен быть числом!")
return
# Формат прокси для proxychains
if user and password:
proxy_line = f"[{proxy_type}://{user}:{password}@]{host}:{port}"
else:
proxy_line = f"[{proxy_type}://]{host}:{port}"
config = f"""strict_chain
proxy_dns
remote_dns_subnet 224
tcp_read_time_out 15000
tcp_connect_time_out 8000
{proxy_line}
"""
with tempfile.NamedTemporaryFile(mode='w', suffix='.conf', delete=False) as f:
f.write(config)
conf_path = f.name
cmd = ["proxychains4", "-q", "-f", conf_path, app]
if args:
cmd += args.split()
self.log_msg(f"→ Запуск: {' '.join(cmd)}")
try:
subprocess.Popen(cmd, preexec_fn=os.setsid)
self.log_msg("✅ Приложение запущено через прокси!")
except Exception as e:
self.log_msg(f"❌ Ошибка: {e}")
finally:
os.unlink(conf_path)
def main():
app = QApplication(sys.argv)
window = ProxyFireApp()
window.show()
sys.exit(app.exec_())
if __name__ == "__main__":
main()