File size: 15,523 Bytes
4e9a80d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>在线Nmap端口扫描</title>
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0-beta3/css/all.min.css">
    <link href="https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;500;700&display=swap" rel="stylesheet">
    <link rel="stylesheet" href="{{ url_for('static', filename='css/style.css') }}">
    <script src="https://cdn.socket.io/4.4.1/socket.io.min.js"></script>
</head>
<body>
    <div class="main-wrapper">
        <div class="container">
            <header>
                <div class="logo-area">
                    <i class="fas fa-network-wired logo-icon"></i>
                    <h1>在线Nmap端口扫描</h1>
                </div>
                <p class="subtitle">安全、高效、专业的网络扫描服务</p>
            </header>

            <div class="card scan-form-card">
                <div class="card-header">
                    <i class="fas fa-search"></i> 扫描设置
                </div>
                <div class="card-body">
                    <form id="scanForm">
                        <div class="form-group">
                            <label for="target">
                                <i class="fas fa-crosshairs"></i> 目标
                            </label>
                            <div class="input-wrapper">
                                <input type="text" id="target" name="target" placeholder="IP地址、域名或IP段" required>
                                <div class="input-hint">支持单个IP、域名、CIDR格式的网段</div>
                            </div>
                        </div>
                        
                        <div class="form-group">
                            <label for="ports">
                                <i class="fas fa-plug"></i> 端口
                            </label>
                            <div class="input-wrapper">
                                <input type="text" id="ports" name="ports" placeholder="例如: 80,443 或 1-1000">
                                <div class="input-hint">指定端口或端口范围,留空则使用默认端口</div>
                                
                                <div class="port-option">
                                    <input type="checkbox" id="scanAllPorts" name="scanAllPorts">
                                    <label for="scanAllPorts">
                                        <i class="fas fa-exclamation-triangle"></i> 扫描全部端口 (1-65535)
                                    </label>
                                    <div class="option-hint">全端口扫描耗时较长,请耐心等待</div>
                                </div>
                            </div>
                        </div>
                        
                        <div class="form-group">
                            <label for="parallelTasks">
                                <i class="fas fa-microchip"></i> 线程数
                            </label>
                            <div class="threads-container">
                                <div class="threads-slider-container">
                                    <input type="range" id="parallelTasksSlider" name="parallelTasksSlider" min="4" max="16" value="8">
                                    <div class="threads-display">
                                        <input type="number" id="parallelTasks" name="parallelTasks" min="4" max="16" value="8">
                                        <span>线程</span>
                                    </div>
                                </div>
                                <div class="input-hint threads-hint">
                                    <i class="fas fa-info-circle"></i> 更多线程可以加快扫描速度,但会消耗更多系统资源
                                </div>
                                <div class="threads-modes">
                                    <div class="thread-mode" data-value="4">
                                        <div class="mode-icon"><i class="fas fa-balance-scale"></i></div>
                                        <div class="mode-label">标准</div>
                                    </div>
                                    <div class="thread-mode" data-value="8">
                                        <div class="mode-icon"><i class="fas fa-tachometer-alt"></i></div>
                                        <div class="mode-label">快速</div>
                                    </div>
                                    <div class="thread-mode" data-value="12">
                                        <div class="mode-icon"><i class="fas fa-bolt"></i></div>
                                        <div class="mode-label">高速</div>
                                    </div>
                                    <div class="thread-mode" data-value="16">
                                        <div class="mode-icon"><i class="fas fa-rocket"></i></div>
                                        <div class="mode-label">极速</div>
                                    </div>
                                </div>
                            </div>
                        </div>
                        
                        <div class="form-group">
                            <label>
                                <i class="fas fa-sliders-h"></i> 扫描类型
                            </label>
                            <div class="options-container">
                                <div class="option-item">
                                    <input type="radio" id="-sS" name="scan_type" value="-sS" checked>
                                    <label for="-sS">
                                        <span class="option-code">-sS</span>
                                        <span class="option-desc">SYN扫描</span>
                                        <span class="option-detail">半开放扫描,速度快</span>
                                    </label>
                                </div>
                                <div class="option-item">
                                    <input type="radio" id="-sT" name="scan_type" value="-sT">
                                    <label for="-sT">
                                        <span class="option-code">-sT</span>
                                        <span class="option-desc">TCP连接扫描</span>
                                        <span class="option-detail">完全建立连接</span>
                                    </label>
                                </div>
                                <div class="option-item">
                                    <input type="radio" id="-sU" name="scan_type" value="-sU">
                                    <label for="-sU">
                                        <span class="option-code">-sU</span>
                                        <span class="option-desc">UDP扫描</span>
                                        <span class="option-detail">检测UDP服务</span>
                                    </label>
                                </div>
                                <div class="option-item">
                                    <input type="radio" id="-sV" name="scan_type" value="-sV">
                                    <label for="-sV">
                                        <span class="option-code">-sV</span>
                                        <span class="option-desc">服务版本检测</span>
                                        <span class="option-detail">识别服务信息</span>
                                    </label>
                                </div>
                                <div class="option-item">
                                    <input type="radio" id="-O" name="scan_type" value="-O">
                                    <label for="-O">
                                        <span class="option-code">-O</span>
                                        <span class="option-desc">操作系统检测</span>
                                        <span class="option-detail">识别系统类型</span>
                                    </label>
                                </div>
                                <div class="option-item">
                                    <input type="radio" id="-A" name="scan_type" value="-A">
                                    <label for="-A">
                                        <span class="option-code">-A</span>
                                        <span class="option-desc">综合扫描</span>
                                        <span class="option-detail">多种检测方式</span>
                                    </label>
                                </div>
                            </div>
                        </div>
                        
                        <div class="form-group">
                            <label>
                                <i class="fas fa-tachometer-alt"></i> 扫描速度
                            </label>
                            <div class="options-container speed-options">
                                <div class="option-item">
                                    <input type="radio" id="-T0" name="scan_speed" value="-T0">
                                    <label for="-T0">
                                        <span class="option-code">-T0</span>
                                        <span class="option-desc">偷偷摸摸</span>
                                        <span class="option-detail">高度隐蔽</span>
                                    </label>
                                </div>
                                <div class="option-item">
                                    <input type="radio" id="-T1" name="scan_speed" value="-T1">
                                    <label for="-T1">
                                        <span class="option-code">-T1</span>
                                        <span class="option-desc">鬼鬼祟祟</span>
                                        <span class="option-detail">较为隐蔽</span>
                                    </label>
                                </div>
                                <div class="option-item">
                                    <input type="radio" id="-T2" name="scan_speed" value="-T2">
                                    <label for="-T2">
                                        <span class="option-code">-T2</span>
                                        <span class="option-desc">文明礼貌</span>
                                        <span class="option-detail">低资源占用</span>
                                    </label>
                                </div>
                                <div class="option-item">
                                    <input type="radio" id="-T3" name="scan_speed" value="-T3" checked>
                                    <label for="-T3">
                                        <span class="option-code">-T3</span>
                                        <span class="option-desc">正常</span>
                                        <span class="option-detail">默认速度</span>
                                    </label>
                                </div>
                                <div class="option-item">
                                    <input type="radio" id="-T4" name="scan_speed" value="-T4">
                                    <label for="-T4">
                                        <span class="option-code">-T4</span>
                                        <span class="option-desc">激进</span>
                                        <span class="option-detail">快速扫描</span>
                                    </label>
                                </div>
                            </div>
                        </div>
                        
                        <div class="form-actions">
                            <button type="submit" id="scanButton" class="btn primary-btn">
                                <i class="fas fa-play"></i> 开始扫描
                            </button>
                            <button type="button" id="clearButton" class="btn secondary-btn">
                                <i class="fas fa-broom"></i> 清除结果
                            </button>
                        </div>
                    </form>
                </div>
            </div>
            
            <div class="results-container" id="resultsContainer">
                <div class="loading" id="loading" style="display: none;">
                    <div class="spinner-container">
                        <div class="spinner"></div>
                    </div>
                    <h3><i class="fas fa-hourglass-half"></i> 正在扫描中</h3>
                    <div class="thread-count-display">
                        <i class="fas fa-microchip"></i> <span id="threadsInUse">8</span> 个线程正在工作中
                    </div>
                    <p>请耐心等待扫描完成...</p>
                    <p class="scan-warning" id="scanWarning" style="display: none;">
                        <i class="fas fa-exclamation-circle"></i> 全端口扫描可能需要较长时间,请耐心等待
                    </p>
                    
                    <div class="tasks-overview" id="tasksOverview">
                        <h4><i class="fas fa-tasks"></i> 子任务状态</h4>
                        <div class="tasks-grid" id="tasksGrid"></div>
                    </div>
                    
                </div>
                
                <div class="card results-card" id="results" style="display: none;">
                    <div class="card-header">
                        <i class="fas fa-clipboard-list"></i> 扫描结果
                    </div>
                    <div class="card-body">
                        <div class="results-content">
                            <pre id="resultsContent"></pre>
                        </div>
                    </div>
                </div>
                
                <div class="card error-card" id="error" style="display: none;">
                    <div class="card-header">
                        <i class="fas fa-exclamation-triangle"></i> 扫描错误
                    </div>
                    <div class="card-body">
                        <p id="errorMessage"></p>
                    </div>
                </div>
            </div>
            
            <footer>
                <div class="footer-content">
                    <p><i class="fas fa-shield-alt"></i> 免责声明: 本工具仅用于授权的安全测试。未经授权的网络扫描可能违反相关法律法规。</p>
                </div>
            </footer>
        </div>
    </div>

    <div id="socketStatus" class="socket-status"></div>

    <script src="{{ url_for('static', filename='js/script.js') }}"></script>
</body>
</html>