This repository has been archived by the owner on Nov 2, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtsznb.html
364 lines (268 loc) · 31 KB
/
tsznb.html
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
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
<!DOCTYPE html><html><head>
<title>探索者的简单实现</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/katex.min.css">
<style>
/**
* prism.js Github theme based on GitHub's theme.
* @author Sam Clarke
*/
code[class*="language-"],
pre[class*="language-"] {
color: #333;
background: none;
font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace;
text-align: left;
white-space: pre;
word-spacing: normal;
word-break: normal;
word-wrap: normal;
line-height: 1.4;
-moz-tab-size: 8;
-o-tab-size: 8;
tab-size: 8;
-webkit-hyphens: none;
-moz-hyphens: none;
-ms-hyphens: none;
hyphens: none;
}
/* Code blocks */
pre[class*="language-"] {
padding: .8em;
overflow: auto;
/* border: 1px solid #ddd; */
border-radius: 3px;
/* background: #fff; */
background: #f5f5f5;
}
/* Inline code */
:not(pre) > code[class*="language-"] {
padding: .1em;
border-radius: .3em;
white-space: normal;
background: #f5f5f5;
}
.token.comment,
.token.blockquote {
color: #969896;
}
.token.cdata {
color: #183691;
}
.token.doctype,
.token.punctuation,
.token.variable,
.token.macro.property {
color: #333;
}
.token.operator,
.token.important,
.token.keyword,
.token.rule,
.token.builtin {
color: #a71d5d;
}
.token.string,
.token.url,
.token.regex,
.token.attr-value {
color: #183691;
}
.token.property,
.token.number,
.token.boolean,
.token.entity,
.token.atrule,
.token.constant,
.token.symbol,
.token.command,
.token.code {
color: #0086b3;
}
.token.tag,
.token.selector,
.token.prolog {
color: #63a35c;
}
.token.function,
.token.namespace,
.token.pseudo-element,
.token.class,
.token.class-name,
.token.pseudo-class,
.token.id,
.token.url-reference .token.variable,
.token.attr-name {
color: #795da3;
}
.token.entity {
cursor: help;
}
.token.title,
.token.title .token.punctuation {
font-weight: bold;
color: #1d3e81;
}
.token.list {
color: #ed6a43;
}
.token.inserted {
background-color: #eaffea;
color: #55a532;
}
.token.deleted {
background-color: #ffecec;
color: #bd2c00;
}
.token.bold {
font-weight: bold;
}
.token.italic {
font-style: italic;
}
/* JSON */
.language-json .token.property {
color: #183691;
}
.language-markup .token.tag .token.punctuation {
color: #333;
}
/* CSS */
code.language-css,
.language-css .token.function {
color: #0086b3;
}
/* YAML */
.language-yaml .token.atrule {
color: #63a35c;
}
code.language-yaml {
color: #183691;
}
/* Ruby */
.language-ruby .token.function {
color: #333;
}
/* Markdown */
.language-markdown .token.url {
color: #795da3;
}
/* Makefile */
.language-makefile .token.symbol {
color: #795da3;
}
.language-makefile .token.variable {
color: #183691;
}
.language-makefile .token.builtin {
color: #0086b3;
}
/* Bash */
.language-bash .token.keyword {
color: #0086b3;
}
/* highlight */
pre[data-line] {
position: relative;
padding: 1em 0 1em 3em;
}
pre[data-line] .line-highlight-wrapper {
position: absolute;
top: 0;
left: 0;
background-color: transparent;
display: block;
width: 100%;
}
pre[data-line] .line-highlight {
position: absolute;
left: 0;
right: 0;
padding: inherit 0;
margin-top: 1em;
background: hsla(24, 20%, 50%,.08);
background: linear-gradient(to right, hsla(24, 20%, 50%,.1) 70%, hsla(24, 20%, 50%,0));
pointer-events: none;
line-height: inherit;
white-space: pre;
}
pre[data-line] .line-highlight:before,
pre[data-line] .line-highlight[data-end]:after {
content: attr(data-start);
position: absolute;
top: .4em;
left: .6em;
min-width: 1em;
padding: 0 .5em;
background-color: hsla(24, 20%, 50%,.4);
color: hsl(24, 20%, 95%);
font: bold 65%/1.5 sans-serif;
text-align: center;
vertical-align: .3em;
border-radius: 999px;
text-shadow: none;
box-shadow: 0 1px white;
}
pre[data-line] .line-highlight[data-end]:after {
content: attr(data-end);
top: auto;
bottom: .4em;
}html body{font-family:"Helvetica Neue",Helvetica,"Segoe UI",Arial,freesans,sans-serif;font-size:16px;line-height:1.6;color:#333;background-color:#fff;overflow:initial;box-sizing:border-box;word-wrap:break-word}html body>:first-child{margin-top:0}html body h1,html body h2,html body h3,html body h4,html body h5,html body h6{line-height:1.2;margin-top:1em;margin-bottom:16px;color:#000}html body h1{font-size:2.25em;font-weight:300;padding-bottom:.3em}html body h2{font-size:1.75em;font-weight:400;padding-bottom:.3em}html body h3{font-size:1.5em;font-weight:500}html body h4{font-size:1.25em;font-weight:600}html body h5{font-size:1.1em;font-weight:600}html body h6{font-size:1em;font-weight:600}html body h1,html body h2,html body h3,html body h4,html body h5{font-weight:600}html body h5{font-size:1em}html body h6{color:#5c5c5c}html body strong{color:#000}html body del{color:#5c5c5c}html body a:not([href]){color:inherit;text-decoration:none}html body a{color:#08c;text-decoration:none}html body a:hover{color:#00a3f5;text-decoration:none}html body img{max-width:100%}html body>p{margin-top:0;margin-bottom:16px;word-wrap:break-word}html body>ul,html body>ol{margin-bottom:16px}html body ul,html body ol{padding-left:2em}html body ul.no-list,html body ol.no-list{padding:0;list-style-type:none}html body ul ul,html body ul ol,html body ol ol,html body ol ul{margin-top:0;margin-bottom:0}html body li{margin-bottom:0}html body li.task-list-item{list-style:none}html body li>p{margin-top:0;margin-bottom:0}html body .task-list-item-checkbox{margin:0 .2em .25em -1.8em;vertical-align:middle}html body .task-list-item-checkbox:hover{cursor:pointer}html body blockquote{margin:16px 0;font-size:inherit;padding:0 15px;color:#5c5c5c;border-left:4px solid #d6d6d6}html body blockquote>:first-child{margin-top:0}html body blockquote>:last-child{margin-bottom:0}html body hr{height:4px;margin:32px 0;background-color:#d6d6d6;border:0 none}html body table{margin:10px 0 15px 0;border-collapse:collapse;border-spacing:0;display:block;width:100%;overflow:auto;word-break:normal;word-break:keep-all}html body table th{font-weight:bold;color:#000}html body table td,html body table th{border:1px solid #d6d6d6;padding:6px 13px}html body dl{padding:0}html body dl dt{padding:0;margin-top:16px;font-size:1em;font-style:italic;font-weight:bold}html body dl dd{padding:0 16px;margin-bottom:16px}html body code{font-family:Menlo,Monaco,Consolas,'Courier New',monospace;font-size:.85em !important;color:#000;background-color:#f0f0f0;border-radius:3px;padding:.2em 0}html body code::before,html body code::after{letter-spacing:-0.2em;content:"\00a0"}html body pre>code{padding:0;margin:0;font-size:.85em !important;word-break:normal;white-space:pre;background:transparent;border:0}html body .highlight{margin-bottom:16px}html body .highlight pre,html body pre{padding:1em;overflow:auto;font-size:.85em !important;line-height:1.45;border:#d6d6d6;border-radius:3px}html body .highlight pre{margin-bottom:0;word-break:normal}html body pre code,html body pre tt{display:inline;max-width:initial;padding:0;margin:0;overflow:initial;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}html body pre code:before,html body pre tt:before,html body pre code:after,html body pre tt:after{content:normal}html body p,html body blockquote,html body ul,html body ol,html body dl,html body pre{margin-top:0;margin-bottom:16px}html body kbd{color:#000;border:1px solid #d6d6d6;border-bottom:2px solid #c7c7c7;padding:2px 4px;background-color:#f0f0f0;border-radius:3px}@media print{html body{background-color:#fff}html body h1,html body h2,html body h3,html body h4,html body h5,html body h6{color:#000;page-break-after:avoid}html body blockquote{color:#5c5c5c}html body pre{page-break-inside:avoid}html body table{display:table}html body img{display:block;max-width:100%;max-height:100%}html body pre,html body code{word-wrap:break-word;white-space:pre}}.markdown-preview{width:100%;height:100%;box-sizing:border-box}.markdown-preview .pagebreak,.markdown-preview .newpage{page-break-before:always}.markdown-preview pre.line-numbers{position:relative;padding-left:3.8em;counter-reset:linenumber}.markdown-preview pre.line-numbers>code{position:relative}.markdown-preview pre.line-numbers .line-numbers-rows{position:absolute;pointer-events:none;top:1em;font-size:100%;left:0;width:3em;letter-spacing:-1px;border-right:1px solid #999;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.markdown-preview pre.line-numbers .line-numbers-rows>span{pointer-events:none;display:block;counter-increment:linenumber}.markdown-preview pre.line-numbers .line-numbers-rows>span:before{content:counter(linenumber);color:#999;display:block;padding-right:.8em;text-align:right}.markdown-preview .mathjax-exps .MathJax_Display{text-align:center !important}.markdown-preview:not([for="preview"]) .code-chunk .btn-group{display:none}.markdown-preview:not([for="preview"]) .code-chunk .status{display:none}.markdown-preview:not([for="preview"]) .code-chunk .output-div{margin-bottom:16px}.scrollbar-style::-webkit-scrollbar{width:8px}.scrollbar-style::-webkit-scrollbar-track{border-radius:10px;background-color:transparent}.scrollbar-style::-webkit-scrollbar-thumb{border-radius:5px;background-color:rgba(150,150,150,0.66);border:4px solid rgba(150,150,150,0.66);background-clip:content-box}html body[for="html-export"]:not([data-presentation-mode]){position:relative;width:100%;height:100%;top:0;left:0;margin:0;padding:0;overflow:auto}html body[for="html-export"]:not([data-presentation-mode]) .markdown-preview{position:relative;top:0}@media screen and (min-width:914px){html body[for="html-export"]:not([data-presentation-mode]) .markdown-preview{padding:2em calc(50% - 457px + 2em)}}@media screen and (max-width:914px){html body[for="html-export"]:not([data-presentation-mode]) .markdown-preview{padding:2em}}@media screen and (max-width:450px){html body[for="html-export"]:not([data-presentation-mode]) .markdown-preview{font-size:14px !important;padding:1em}}@media print{html body[for="html-export"]:not([data-presentation-mode]) #sidebar-toc-btn{display:none}}html body[for="html-export"]:not([data-presentation-mode]) #sidebar-toc-btn{position:fixed;bottom:8px;left:8px;font-size:28px;cursor:pointer;color:inherit;z-index:99;width:32px;text-align:center;opacity:.4}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] #sidebar-toc-btn{opacity:1}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc{position:fixed;top:0;left:0;width:300px;height:100%;padding:32px 0 48px 0;font-size:14px;box-shadow:0 0 4px rgba(150,150,150,0.33);box-sizing:border-box;overflow:auto;background-color:inherit}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar{width:8px}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar-track{border-radius:10px;background-color:transparent}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar-thumb{border-radius:5px;background-color:rgba(150,150,150,0.66);border:4px solid rgba(150,150,150,0.66);background-clip:content-box}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc a{text-decoration:none}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc ul{padding:0 1.6em;margin-top:.8em}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc li{margin-bottom:.8em}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc ul{list-style-type:none}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{left:300px;width:calc(100% - 300px);padding:2em calc(50% - 457px - 150px);margin:0;box-sizing:border-box}@media screen and (max-width:1274px){html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{padding:2em}}@media screen and (max-width:450px){html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{width:100%}}html body[for="html-export"]:not([data-presentation-mode]):not([html-show-sidebar-toc]) .markdown-preview{left:50%;transform:translateX(-50%)}html body[for="html-export"]:not([data-presentation-mode]):not([html-show-sidebar-toc]) .md-sidebar-toc{display:none}
/* Please visit the URL below for more information: */
/* https://shd101wyy.github.io/markdown-preview-enhanced/#/customize-css */
</style>
</head>
<body for="html-export">
<div class="mume markdown-preview ">
<h1 class="mume-header" id="%E5%BC%80%E5%A4%B4">开头</h1>
<h2 class="mume-header" id="%E5%90%84%E4%BD%8D%E8%AF%84%E5%A7%94%E4%BB%AC%E5%A4%A7%E5%AE%B6%E5%A5%BD%E6%88%91%E6%98%AF~~%E7%BB%83%E4%B9%A0%E6%97%B6%E9%95%BF%E4%B8%A4%E5%B9%B4%E5%8D%8A%E7%9A%84%E4%B8%AA%E4%BA%BA%E7%BB%83%E4%B9%A0%E7%94%9F~~%E7%8E%8B%E6%80%9D%E8%AF%9A%E8%BF%99%E6%98%AF%E6%8E%A2%E7%B4%A2%E8%80%85%E6%A0%B8%E5%BF%83%E5%8A%9F%E8%83%BD%E7%9A%84%E5%85%B7%E4%BD%93%E5%AE%9E%E7%8E%B0%E5%8E%9F%E7%90%86%E5%8F%8A%E5%8F%82%E8%80%83%E4%BB%A3%E7%A0%81%E5%B8%8C%E6%9C%9B%E5%A4%A7%E5%AE%B6%E5%96%9C%E6%AC%A2">各位评委们,大家好,我是<s>练习时长两年半的个人练习生</s>王思诚,这是探索者核心功能的具体实现原理及参考代码,希望大家喜欢。</h2>
<h2 class="mume-header" id="%E6%9C%AC%E6%96%87%E6%A1%A3%E9%80%82%E7%94%A8python39%E9%A2%84%E8%AE%A1%E6%94%AF%E6%8C%81mpython%E6%9C%80%E6%96%B0%E7%89%88%E4%B8%8D%E6%94%AF%E6%8C%81%E4%B9%9F%E5%8F%AF%E4%BB%A5%E6%94%B9%E5%98%9B">本文档适用:Python3.9,预计支持mPython最新版(不支持也可以改嘛)</h2>
<h1 class="mume-header" id="%E8%BF%9C%E7%A8%8B%E5%8A%A0%E5%AF%86%E5%91%BD%E4%BB%A4%E6%89%A7%E8%A1%8C">远程加密命令执行</h1>
<h2 class="mume-header" id="%E5%91%BD%E4%BB%A4%E6%89%A7%E8%A1%8C%E5%99%A8eval">命令执行器:Eval</h2>
<h3 class="mume-header" id="python-%E4%B8%AD%E6%9C%89%E8%BF%99%E4%B9%88%E4%B8%80%E7%A7%8D%E4%BB%A3%E7%A0%81">Python 中有这么一种代码:</h3>
<pre data-role="codeBlock" data-info="python" class="language-python"><span class="token builtin">eval</span><span class="token punctuation">(</span><span class="token string">"print('hello world')"</span><span class="token punctuation">)</span>
</pre><blockquote>
<p>eval() 函数用来执行一个字符串表达式,并返回表达式的值。</p>
</blockquote>
<p><a href="https://www.runoob.com/python/python-func-eval.html">菜鸟教程</a></p>
<h3 class="mume-header" id="%E4%BD%86%E6%98%AF%E8%BF%99%E8%A1%8C%E4%BB%A3%E7%A0%81%E4%BC%9A%E6%8A%A5%E9%94%99">但是这行代码会报错:</h3>
<pre data-role="codeBlock" data-info="python" class="language-python"><span class="token builtin">eval</span><span class="token punctuation">(</span><span class="token string">"import requests"</span><span class="token punctuation">)</span>
</pre><h4 class="mume-header" id="%E5%8E%9F%E5%9B%A0%E6%98%AF-eval-%E5%87%BD%E6%95%B0%E4%BB%85%E6%94%AF%E6%8C%81%E8%B0%83%E7%94%A8%E5%87%BD%E6%95%B0%E4%B8%8D%E6%94%AF%E6%8C%81%E9%83%A8%E5%88%86%E5%85%B3%E9%94%AE%E8%AF%8D%E8%B0%83%E7%94%A8">原因是 <code>eval()</code> 函数仅支持调用函数,不支持部分关键词调用</h4>
<h3 class="mume-header" id="eval%E7%9A%84%E5%A6%99%E7%94%A8"><code>eval</code>的妙用</h3>
<h4 class="mume-header" id="%E4%B8%8A%E6%96%87%E6%8F%90%E5%88%B0-eval-%E4%BB%85%E6%94%AF%E6%8C%81%E5%87%BD%E6%95%B0%E7%9A%84%E8%B0%83%E7%94%A8%E4%BD%86%E6%98%AF%E8%A6%81%E8%B0%83%E7%94%A8%E5%85%B3%E9%94%AE%E8%AF%8D%E6%88%91%E4%BB%AC%E5%8F%AF%E4%BB%A5%E8%BF%99%E4%B9%88%E5%86%99">上文提到 <code>eval()</code> 仅支持函数的调用,但是要调用关键词我们可以这么写</h4>
<pre data-role="codeBlock" data-info="python" class="language-python"><span class="token builtin">eval</span><span class="token punctuation">(</span><span class="token string">"exec('import requests')"</span><span class="token punctuation">)</span>
</pre><h2 class="mume-header" id="%E5%88%B0%E4%BA%86%E8%BF%99%E9%87%8C%E6%88%91%E4%BB%AC%E5%B7%B2%E7%BB%8F%E8%A7%A3%E5%86%B3%E4%BA%86%E5%A4%A7%E9%83%A8%E5%88%86%E5%91%BD%E4%BB%A4%E6%89%A7%E8%A1%8C%E7%9A%84%E9%9C%80%E6%B1%82%E4%BA%86%E6%8E%A5%E4%B8%8B%E6%9D%A5%E6%98%AF%E7%AE%80%E5%8D%95%E7%9A%84%E5%8A%A0%E8%A7%A3%E5%AF%86%E7%A8%8B%E5%BA%8F">到了这里,我们已经解决了大部分命令执行的需求了,接下来是简单的加解密程序</h2>
<h4 class="mume-header" id="%E4%B8%BA%E4%BA%86%E6%96%B9%E4%BE%BF%E6%BC%94%E7%A4%BA%E6%88%91%E4%BB%AC%E6%9A%82%E6%97%B6%E5%8F%AA%E6%98%AF%E7%94%A8%E7%AE%80%E5%8D%95%E7%9A%84%E5%AD%97%E7%AC%A6%E7%A7%BB%E4%BD%8D%E6%93%8D%E4%BD%9C">为了方便演示我们暂时只是用简单的字符移位操作😀</h4>
<h3 class="mume-header" id="%E5%8A%A0%E5%AF%86%E5%87%BD%E6%95%B0%E7%AE%80%E6%98%93%E7%89%88">加密函数(简易版)</h3>
<pre data-role="codeBlock" data-info="python" class="language-python"><span class="token keyword">def</span> <span class="token function">encode_easy</span><span class="token punctuation">(</span>raw<span class="token punctuation">:</span> <span class="token builtin">str</span><span class="token punctuation">)</span> <span class="token operator">-</span><span class="token operator">></span> <span class="token builtin">str</span><span class="token punctuation">:</span>
<span class="token keyword">return</span> <span class="token string">""</span><span class="token punctuation">.</span>join<span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token builtin">chr</span><span class="token punctuation">(</span><span class="token builtin">ord</span><span class="token punctuation">(</span>x<span class="token punctuation">)</span> <span class="token operator">+</span> <span class="token builtin">len</span><span class="token punctuation">(</span>raw<span class="token punctuation">)</span> <span class="token operator">//</span> <span class="token number">2</span> <span class="token operator">+</span> <span class="token number">1</span><span class="token punctuation">)</span> <span class="token keyword">for</span> x <span class="token keyword">in</span> raw<span class="token punctuation">]</span><span class="token punctuation">)</span>
</pre><h3 class="mume-header" id="%E8%A7%A3%E5%AF%86%E5%87%BD%E6%95%B0%E7%AE%80%E6%98%93%E7%89%88">解密函数(简易版)</h3>
<pre data-role="codeBlock" data-info="python" class="language-python"><span class="token keyword">def</span> <span class="token function">decode_easy</span><span class="token punctuation">(</span>ecd<span class="token punctuation">:</span> <span class="token builtin">str</span><span class="token punctuation">)</span> <span class="token operator">-</span><span class="token operator">></span> <span class="token builtin">str</span><span class="token punctuation">:</span>
<span class="token keyword">return</span> <span class="token string">""</span><span class="token punctuation">.</span>join<span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token builtin">chr</span><span class="token punctuation">(</span><span class="token builtin">ord</span><span class="token punctuation">(</span>x<span class="token punctuation">)</span> <span class="token operator">-</span> <span class="token builtin">len</span><span class="token punctuation">(</span>ecd<span class="token punctuation">)</span> <span class="token operator">//</span> <span class="token number">2</span> <span class="token operator">-</span> <span class="token number">1</span><span class="token punctuation">)</span> <span class="token keyword">for</span> x <span class="token keyword">in</span> ecd<span class="token punctuation">]</span><span class="token punctuation">)</span>
</pre><h2 class="mume-header" id="%E8%BF%9C%E7%A8%8B%E4%BC%A0%E8%BE%93%E5%91%BD%E4%BB%A4%E5%8C%85%E6%8B%AC%E4%BC%A0%E8%BE%93mpython%E5%86%85%E7%BD%AE%E7%9A%84%E5%B9%BF%E6%92%AD%E5%8F%A5%E6%9F%84%E5%85%B6%E5%AE%9E%E5%8F%AA%E9%9C%80%E8%A6%81%E5%BB%BA%E7%AB%8B%E4%B8%80%E4%B8%AA%E8%81%8A%E5%A4%A9%E5%AE%A4">远程传输命令包括传输mPython内置的广播句柄其实只需要建立一个聊天室</h2>
<h4 class="mume-header" id="%E6%88%91%E6%87%92%E5%BE%97%E5%86%99%E4%BB%A3%E7%A0%81%E5%A4%AA%E6%99%9A%E4%BA%86%E5%87%86%E5%A4%87%E7%9D%A1%E8%A7%89%E5%8E%BB%E4%BA%86">我懒得写代码,太晚了(准备睡觉去了)</h4>
<h3 class="mume-header" id="%E5%AE%A2%E6%88%B7%E7%AB%AF">客户端</h3>
<h4 class="mume-header" id="%E6%8E%A5%E5%8F%97%E6%89%80%E6%9C%89%E4%BC%A0%E9%80%81%E8%BF%87%E6%9D%A5%E7%9A%84python%E5%91%BD%E4%BB%A4%E5%B9%B6%E6%89%A7%E8%A1%8C%E6%AF%94%E5%A6%82mpython%E7%9A%84%E5%B9%BF%E6%92%AD%E6%A8%A1%E5%9D%97%E7%9A%84%E5%8F%A5%E6%9F%84%E5%87%BD%E6%95%B0">接受所有传送过来的Python命令并执行,比如mPython的广播模块的句柄函数</h4>
<h3 class="mume-header" id="%E6%9C%8D%E5%8A%A1%E7%AB%AF">服务端</h3>
<h4 class="mume-header" id="%E9%80%9A%E8%BF%87%E5%A4%9A%E7%BA%BF%E7%A8%8B%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%9D%A5%E4%B8%80%E6%AD%A5%E6%AD%A5%E6%89%A7%E8%A1%8C%E5%B9%B6%E6%8E%A5%E5%8F%97%E6%89%80%E6%9C%89%E7%9A%84%E5%91%BD%E4%BB%A4%E7%BB%93%E6%9E%9C%E5%9C%A8%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E9%9D%A2%E5%86%99%E6%AF%8F%E4%B8%80%E5%8F%B0%E6%9C%BA%E5%99%A8%E7%9A%84%E4%BB%A3%E7%A0%81%E5%8F%AF%E4%BB%A5%E5%85%81%E8%AE%B8%E5%A4%8D%E7%94%A8">通过多线程服务器来一步步执行并接受所有的命令结果,在服务器上面写每一台机器的代码(可以允许复用)</h4>
<h1 class="mume-header" id="%E7%A8%8B%E5%BA%8F%E9%80%BB%E8%BE%91%E5%8F%8A%E8%87%AA%E5%8A%A8%E7%AD%96%E7%95%A5">程序逻辑及自动策略</h1>
<h4 class="mume-header" id="%E5%85%B6%E5%AE%9E%E5%B0%B1%E6%98%AF%E8%AF%BB%E5%8F%96%E4%B8%8B%E7%94%A8%E6%88%B7%E5%86%99%E7%9A%84%E7%A8%8B%E5%BA%8F%E5%B9%B6%E5%8F%91%E5%88%B0%E5%AE%A2%E6%88%B7%E7%AB%AF%E5%95%A6%E8%87%AA%E5%8A%A8%E7%AD%96%E7%95%A5%E5%B0%B1%E6%98%AF%E5%9C%A8%E7%A8%8B%E5%BA%8F%E6%89%A7%E8%A1%8C%E6%97%B6%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%80%E7%9B%B4%E5%9C%A8%E6%94%B6%E9%9B%86%E6%95%B0%E6%8D%AE%E6%89%80%E4%BB%A5%E6%98%AF%E5%8F%AF%E4%BB%A5%E9%9A%8F%E6%97%B6%E6%8E%A2%E6%B5%8B%E6%95%B0%E6%8D%AE%E5%B9%B6%E8%BF%9B%E8%A1%8C%E5%8F%8D%E5%BA%94%E7%9A%84">🤫,其实就是读取下用户写的程序并发到客户端啦,自动策略就是在程序执行时服务器一直在收集数据,所以是可以随时探测数据并进行反应的</h4>
<h1 class="mume-header" id="%E8%A1%A5%E5%85%85%E5%8A%9F%E8%83%BD">补充功能</h1>
<h2 class="mume-header" id="%E6%9D%83%E9%99%90%E7%AE%A1%E7%90%86">权限管理</h2>
<h3 class="mume-header" id="%E5%B0%B1%E6%98%AF%E4%B8%80%E4%B8%AA%E5%AF%B9%E6%93%8D%E4%BD%9C%E6%9C%BA%E5%99%A8%E7%9A%84%E6%9D%83%E9%99%90%E6%A0%A1%E9%AA%8C%E6%89%80%E4%BB%A5%E6%B2%A1%E5%BF%85%E8%A6%81%E7%BB%86%E8%AE%B2">就是一个对操作机器的权限校验,所以没必要细讲</h3>
<h2 class="mume-header" id="%E9%9B%86%E7%BE%A4%E6%8E%A7%E5%88%B6">集群控制</h2>
<h3 class="mume-header" id="%E5%8E%9F%E7%90%86%E6%98%AF%E5%AE%9A%E4%B9%89%E4%B8%80%E4%B8%AA%E5%87%BD%E6%95%B0">原理是定义一个函数</h3>
<h4 class="mume-header" id="%E4%BC%AA%E4%BB%A3%E7%A0%81">伪代码</h4>
<pre data-role="codeBlock" data-info="python" class="language-python"><span class="token keyword">def</span> <span class="token function">kaiden</span><span class="token punctuation">(</span>machine<span class="token punctuation">,</span> interface<span class="token punctuation">)</span><span class="token punctuation">:</span>
<span class="token keyword">pass</span>
</pre><h3 class="mume-header" id="%E5%9C%A8%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E4%B8%8D%E8%BF%90%E8%A1%8C%E9%92%88%E5%AF%B9%E6%8E%8C%E6%8E%A7%E6%9D%BF%E7%9A%84%E4%B8%AA%E4%BD%93%E7%A8%8B%E5%BA%8F%E8%80%8C%E6%98%AF%E8%BD%AC%E6%8D%A2%E4%B8%BA%E8%BF%90%E8%A1%8C%E4%B8%80%E4%B8%AA%E7%A8%8B%E5%BA%8F%E7%A8%8B%E5%BA%8F%E4%B8%AD%E5%8F%AA%E6%9C%89%E5%BC%80%E7%81%AF%E7%AD%89%E7%A1%AC%E4%BB%B6%E6%93%8D%E4%BD%9C%E8%B0%83%E7%94%A8%E6%88%91%E5%86%99%E7%9A%84%E5%87%BD%E6%95%B0%E5%85%B6%E4%BB%96%E7%9A%84%E5%85%A8%E9%83%A8%E6%98%AF%E5%8E%9F%E7%94%9Fpython%E4%BB%A3%E7%A0%81%E5%B9%B6%E4%B8%94%E6%94%AF%E6%8C%81%E8%BF%9C%E7%A8%8Beval">在服务器上不运行针对掌控板的个体程序而是转换为运行一个程序,程序中只有开灯等硬件操作调用我写的函数,其他的全部是原生Python代码,并且支持远程eval</h3>
<h2 class="mume-header" id="%E4%BA%8B%E6%95%85%E6%A3%80%E6%B5%8B%E5%8F%8A%E5%AE%89%E5%85%A8%E7%AD%96%E7%95%A5%E7%9A%84%E5%AE%9E%E7%8E%B0">事故检测及安全策略的实现</h2>
<h4 class="mume-header" id="%E5%9B%A0%E4%B8%BA%E8%BF%99%E5%8F%AA%E6%98%AF%E4%B8%AA%E6%88%91%E4%BB%AC%E5%81%9A%E7%9A%84%E6%A8%A1%E5%9E%8B%E6%89%80%E4%BB%A5%E6%9C%89%E5%8F%AF%E8%83%BD%E4%B8%80%E9%83%A8%E5%88%86%E5%AF%B9%E6%BC%94%E7%A4%BA%E6%B2%A1%E6%9C%89%E5%A4%AA%E5%A4%A7%E5%B8%AE%E5%8A%A9%E7%9A%84%E5%8A%9F%E8%83%BD%E4%BC%9A%E8%A2%AB%E7%A0%8D%E6%8E%89%E4%BD%86%E6%98%AF%E6%83%B3%E8%A6%81%E5%8A%A0%E5%9B%9E%E6%9D%A5%E5%A4%A7%E5%AE%B6%E5%8F%AF%E4%BB%A5%E9%9A%8F%E6%97%B6%E6%8C%89%E7%85%A7%E8%BF%99%E7%A7%8D%E6%80%9D%E8%B7%AF%E5%AE%9E%E7%8E%B0">因为这只是个我们做的模型,所以有可能一部分对演示没有太大帮助的功能会被砍掉:(,但是想要加回来大家可以随时按照这种思路实现</h4>
<h3 class="mume-header" id="1-%E5%AE%9A%E6%97%B6%E5%8F%91%E9%80%81%E6%8E%A2%E6%B5%8B%E4%BF%A1%E5%8F%B7%E6%8C%89%E7%85%A7%E7%AD%96%E7%95%A5%E8%AF%A2%E9%97%AE%E6%AF%8F%E4%B8%AA%E4%BC%A0%E6%84%9F%E5%99%A8%E7%9A%84%E5%80%BC">1、定时发送探测信号,按照策略询问每个传感器的值</h3>
<h3 class="mume-header" id="2-%E5%9C%A8%E7%A8%8B%E5%BA%8F%E5%86%85%E5%86%99%E5%85%A5%E4%BA%8B%E6%95%85%E6%A3%80%E6%B5%8B%E4%BD%86%E9%80%9A%E8%BF%87%E4%BA%8B%E6%95%85%E6%8A%A5%E5%91%8Aapi%E6%88%96%E7%9B%B4%E6%8E%A5%E5%90%91%E6%89%80%E6%9C%89%E6%8E%8C%E6%8E%A7%E6%9D%BF%E5%8F%91%E5%91%BD%E4%BB%A4%E7%9A%84%E6%96%B9%E6%B3%95%E8%BF%9B%E8%A1%8C%E7%AD%96%E7%95%A5%E6%89%A7%E8%A1%8C">2、在程序内写入事故检测,但通过事故报告api或直接向所有掌控板发命令的方法进行策略执行</h3>
<h3 class="mume-header" id="3-%E5%9C%A8%E4%B8%BB%E7%A8%8B%E5%BA%8F%E9%80%9A%E8%BF%87%E6%88%91%E7%9A%84%E5%87%BD%E6%95%B0%E8%BF%9B%E8%A1%8C%E5%AE%9E%E6%97%B6%E6%A3%80%E6%B5%8B%E5%B9%B6%E5%AE%9E%E6%97%B6%E8%BF%9B%E8%A1%8C%E4%BA%8B%E6%95%85%E5%A4%84%E7%90%86">3、在主程序通过我的函数进行实时检测,并实时进行事故处理</h3>
<h2 class="mume-header" id="%E5%9C%A8%E7%BA%BF%E7%AE%A1%E7%90%86">在线管理</h2>
<h4 class="mume-header" id="%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%9A%84%E6%90%AD%E5%BB%BA%E6%98%AF%E5%BE%88%E7%AE%80%E5%8D%95%E7%9A%84%E5%AF%B9%E4%BA%8E%E5%A4%A7%E5%AE%B6%E6%9D%A5%E8%AF%B4%E6%89%80%E4%BB%A5%E4%B8%8D%E4%BC%9A%E7%BB%86%E8%AE%B2%E4%BD%86%E6%88%91%E4%BB%AC%E8%BF%99%E6%AC%A1%E7%9A%84%E7%95%8C%E9%9D%A2%E4%B8%8D%E4%BC%9A%E5%A4%AA%E5%A5%BD%E7%9C%8B%E5%9B%A0%E4%B8%BA%E6%88%91%E6%B2%A1%E6%80%8E%E4%B9%88%E5%AD%A6css">服务器的搭建是很简单的,对于大家来说,所以不会细讲,但我们这次的界面不会太好看,因为我没怎么学css</h4>
</div>
</body></html>