Ryanus commited on
Commit
3f68295
·
verified ·
1 Parent(s): bc168d1

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +71 -163
app.py CHANGED
@@ -1,170 +1,78 @@
1
- import gradio as gr
2
- import subprocess
3
- import threading
4
- import time
5
  import os
6
- import signal
 
 
7
 
8
- class TrafficGenerator:
9
- def __init__(self):
10
- self.process = None
11
- self.is_running = False
12
- self.is_paused = False
13
-
14
- def start_traffic(self, target_url, requests_per_second, duration):
15
- if self.is_running:
16
- return "流量生成已在运行中!"
17
-
18
- try:
19
- # 构建命令行参数
20
- cmd = [
21
- "python", "web_traffic_generator.py",
22
- "--url", target_url,
23
- "--rps", str(requests_per_second),
24
- "--duration", str(duration)
25
- ]
26
-
27
- self.process = subprocess.Popen(
28
- cmd,
29
- stdout=subprocess.PIPE,
30
- stderr=subprocess.PIPE,
31
- preexec_fn=os.setsid
32
- )
33
- self.is_running = True
34
- self.is_paused = False
35
- return f"开始生成流量到: {target_url}"
36
- except Exception as e:
37
- return f"启动失败: {str(e)}"
38
-
39
- def pause_traffic(self):
40
- if not self.is_running:
41
- return "没有运行的流量生成进程"
42
-
43
- if self.is_paused:
44
- return "流量生成已经暂停"
45
-
46
- try:
47
- if self.process and self.process.poll() is None:
48
- os.killpg(os.getpgid(self.process.pid), signal.SIGSTOP)
49
- self.is_paused = True
50
- return "流量生成已暂停"
51
- except Exception as e:
52
- return f"暂停失败: {str(e)}"
53
- return "暂停操作失败"
54
-
55
- def resume_traffic(self):
56
- if not self.is_running:
57
- return "没有运行的流量生成进程"
58
-
59
- if not self.is_paused:
60
- return "流量生成已经在运行中"
61
-
62
- try:
63
- if self.process and self.process.poll() is None:
64
- os.killpg(os.getpgid(self.process.pid), signal.SIGCONT)
65
- self.is_paused = False
66
- return "流量生成已恢复"
67
- except Exception as e:
68
- return f"恢复失败: {str(e)}"
69
- return "恢复操作失败"
70
-
71
- def stop_traffic(self):
72
- if not self.is_running:
73
- return "没有运行的流量生成进程"
74
-
75
- try:
76
- if self.process:
77
- os.killpg(os.getpgid(self.process.pid), signal.SIGTERM)
78
- self.process.wait(timeout=5)
79
- except:
80
- try:
81
- self.process.kill()
82
- except:
83
- pass
84
-
85
- self.is_running = False
86
- self.is_paused = False
87
- return "流量生成已停止"
88
 
89
- # 创建流量生成器实例
90
- traffic_gen = TrafficGenerator()
 
 
 
 
 
91
 
92
- def control_traffic(action, target_url, requests_per_second, duration):
93
- if action == "开始":
94
- return traffic_gen.start_traffic(target_url, requests_per_second, duration)
95
- elif action == "暂停":
96
- return traffic_gen.pause_traffic()
97
- elif action == "继续":
98
- return traffic_gen.resume_traffic()
99
- elif action == "停止":
100
- return traffic_gen.stop_traffic()
101
- else:
102
- return "未知操作"
103
-
104
- # 创建Gradio界面
105
- with gr.Blocks(title="网络流量生成器") as demo:
106
- gr.Markdown("# 🌐 网络流量生成器控制面板")
107
- gr.Markdown("使用此界面控制网络流量生成器的启动、暂停、继续和停止操作")
108
-
109
- with gr.Row():
110
- with gr.Column():
111
- target_url = gr.Textbox(
112
- label="目标URL",
113
- value="https://example.com",
114
- placeholder="请输入目标URL"
115
- )
116
- requests_per_second = gr.Number(
117
- label="每秒请求数 (RPS)",
118
- value=10,
119
- minimum=1,
120
- maximum=1000
121
- )
122
- duration = gr.Number(
123
- label="持续时间 (秒)",
124
- value=60,
125
- minimum=10,
126
- maximum=3600
127
- )
128
-
129
- with gr.Column():
130
- action = gr.Radio(
131
- choices=["开始", "暂停", "继续", "停止"],
132
- label="控制操作",
133
- value="开始"
134
- )
135
- control_button = gr.Button("执行操作", variant="primary")
136
-
137
- output = gr.Textbox(
138
- label="操作结果",
139
- interactive=False,
140
- lines=3
141
- )
142
-
143
- # 状态显示
144
- status_display = gr.Textbox(
145
- label="当前状态",
146
- value="就绪",
147
- interactive=False
148
  )
149
-
150
- def update_status():
151
- if traffic_gen.is_running:
152
- if traffic_gen.is_paused:
153
- return "🟡 已暂停"
154
- else:
155
- return "🟢 运行中"
156
- else:
157
- return "⚪ 就绪"
158
-
159
- # 绑定事件
160
- control_button.click(
161
- fn=control_traffic,
162
- inputs=[action, target_url, requests_per_second, duration],
163
- outputs=output
164
- ).then(
165
- fn=update_status,
166
- outputs=status_display
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
167
  )
 
168
 
169
- if __name__ == "__main__":
170
- demo.launch(server_name="0.0.0.0", server_port=7860)
 
 
 
 
 
 
 
1
  import os
2
+ import asyncio
3
+ from pyrogram import Client, filters
4
+ from pyrogram.types import Message
5
 
6
+ # 從 Hugging Face Spaces 的環境變數中讀取憑證
7
+ # 這些變數需要在 Space 的 Settings -> Variables 中設定
8
+ api_id = int(os.getenv("API_ID"))
9
+ api_hash = os.getenv("API_HASH")
10
+ bot_token = os.getenv("BOT_TOKEN")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
11
 
12
+ # 初始化 Pyrogram 客戶端
13
+ app = Client(
14
+ "traffic_bot",
15
+ api_id=api_id,
16
+ api_hash=api_hash,
17
+ bot_token=bot_token
18
+ )
19
 
20
+ # 定義 /start 指令的處理器
21
+ @app.on_message(filters.command("start"))
22
+ async def start_command(client: Client, message: Message):
23
+ """
24
+ 當用戶發送 /start 時,回應歡迎訊息和使用說明。
25
+ """
26
+ welcome_text = (
27
+ "👋 歡迎使用流量機器人!\n\n"
28
+ "這個機器人可以幫你產生看起來很真實的流量。\n\n"
29
+ "請使用以下指令:\n"
30
+ "• `/visit <網址>` - 開始訪問指定的網址\n"
31
+ "• `/help` - 查看幫助訊息"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
32
  )
33
+ await message.reply_text(welcome_text)
34
+
35
+ # 定義 /visit 指令的處理器
36
+ @app.on_message(filters.command("visit"))
37
+ async def visit_command(client: Client, message: Message):
38
+ """
39
+ 當用戶發送 /visit <網址> 時,模擬訪問該網址。
40
+ """
41
+ # 檢查是否提供了網址
42
+ if len(message.command) < 2:
43
+ await message.reply_text("❌ 請提供一個網址。\n範例: `/visit https://www.google.com`")
44
+ return
45
+
46
+ url = message.command[1]
47
+
48
+ # 發送一個「正在處理」的訊息
49
+ processing_message = await message.reply_text(f"🚀 正在準備訪問 {url}...")
50
+
51
+ # 模擬一些處理時間
52
+ await asyncio.sleep(3)
53
+
54
+ # 更新訊息,表示已完成
55
+ await processing_message.edit_text(f"✅ 已成功模擬訪問 {url}!\n\n💡 這只是一個演示,實際的流量生成需要更複雜的邏輯。")
56
+
57
+ # 定義 /help 指令的處理器
58
+ @app.on_message(filters.command("help"))
59
+ async def help_command(client: Client, message: Message):
60
+ """
61
+ 提供幫助訊息。
62
+ """
63
+ help_text = (
64
+ "📖 **幫助說明**\n\n"
65
+ "這是一個基於 Pyrogram 的 Telegram 機器人範例,部署在 Hugging Face Spaces。\n\n"
66
+ "**可用指令:**\n"
67
+ "• `/start` - 開始使用機器人\n"
68
+ "• `/visit <網址>` - 模擬訪問一個網址\n"
69
+ "• `/help` - 顯示此幫助訊息\n\n"
70
+ "**如何部署自己的機器人?**\n"
71
+ "你可以 fork 這個專案,並在 Hugging Face Spaces 中設定你自己的 `API_ID`, `API_HASH`, 和 `BOT_TOKEN`。"
72
  )
73
+ await message.reply_text(help_text)
74
 
75
+ # 啟動機器人
76
+ print("機器人正在啟動...")
77
+ app.run()
78
+ print("機器人已停止。")