首页
关于
README
Search
1
如何配置终端现代化Neovim
647 阅读
2
mdk3工具使用
520 阅读
3
关于C语言
472 阅读
4
Windows11pro 下载体验
455 阅读
5
关于Docker容器--0×01
379 阅读
默认分类
网络技术
渗透测试
编程语言
C语言
Python
Linux
搞机技巧
Termux
golang
数学
Search
标签搜索
printf
mach
sin cos tan
Toanle
累计撰写
40
篇文章
累计收到
1
条评论
首页
栏目
默认分类
网络技术
渗透测试
编程语言
C语言
Python
Linux
搞机技巧
Termux
golang
数学
页面
关于
README
搜索到
40
篇与
Toanle
的结果
2021-04-21
metasploit-framework使用指南
注意非合法网络安全人员请离开,谢谢本篇教材仅供参考学习,请勿用于犯罪行为。0*001认识Metasploit Framework是一个编写,测试和使用exploit代码的完善环境。这个环境为渗透测试,shellcode编写和漏洞研究提供了一个可靠的平台,这个框架主要是由面向对象的Ruby编程语言编写的,并带有由C语言,汇编程序和Python编写的可选组件。使用Metasploit安全测试工具在渗透测试中可以做很多事情,你可以保存你的日志、甚至定义每个有效负载在运行完成之后是如何将其自身清除的。值得一提的是这个强大的工具是免费的。基础了解msfupdate用于更新Metasploit服务。msfconsoleShell终端下进入Metasploit模式Stager中几种常见的payload windows/meterpreter/bind_tcp #正向连接windows/meterpreter/reverse_tcp #反向连接,常用windows/meterpreter/reverse_http #通过监听80端口反向连接windows/meterpreter/reverse_https #通过监听443端口反向连接正向连接使用场景:我们的攻击机在内网环境,被攻击机是外网环境,由于被攻击机无法主动连接到我们的主机,所以就必须我们主动连接被攻击机了。但是这里经常遇到的问题是,被攻击机上开了防火墙,只允许访问指定的端口,比如被攻击机只对外开放了80端口。那么,我们就只能设置正向连接80端口了,这里很有可能失败,因为80端口上的流量太多了反向连接使用场景:我们的主机和被攻击机都是在外网或者都是在内网,这样被攻击机就能主动连接到我们的主机了。如果是这样的情况,建议使用反向连接,因为反向连接的话,即使被攻击机开了防火墙也没事,防火墙只是阻止进入被攻击机的流量,而不会阻止被攻击机主动向外连接的流量。反向连接80和443端口使用场景:被攻击机能主动连接到我们的主机,还有就是被攻击机的防火墙设置的特别严格,就连被攻击机访问外部网络的流量也进行了严格的限制,只允许被攻击机的80端口或443端口与外部通信
2021年04月21日
109 阅读
0 评论
0 点赞
2021-04-21
关于Lisp
关于 LISP是一种通用高级计算机程序语言,长期以来垄断人工智能领域的应用。LISP作为因应人工智能而设计的语言,是第一个声明式系内函数式程序设计语言,有别于命令式系内过程式的C、Fortran和面向对象的Java、C#等结构化程序设计语言。Lisp是一门历史悠久的语言,全名叫LISt Processor,也就是“表处理语言”,它是由John McCarthy于1958年就开始设计的一门语言。和Lisp同时期甚至更晚出现的许多语言如Algo等如今大 多已经消亡,又或者仅仅在一些特定的场合有一些微不足道的用途,到现在还广为人知的恐怕只剩下了 Fortran和COBOL。但唯独Lisp,不但没有随着时间而衰退,反倒是一次又一次的焕发出了青春,从Lisp分支出来的Scheme、ML等语言在很多场合的火爆程度甚至超过了许多老牌明星。那么这颗常青树 永葆青春的奥秘究竟在哪里呢?如果你只接触过C/C++、Pascal这些“过程式语言”的话,Lisp可能会让你觉得十分不同寻常,首先吸引你眼球(或者说让你觉得混乱的)一定是Lisp程序中异常多的括号,当然从现在的角度来讲,这种设计的确对程序员不大友好,不过考虑到五六十年代的计算机处理能力,简化语言本身的设计在那时算得上是当务之急了。Lisp的基本语法很简单,它甚至没有保留字(有些语言学家可能对这一点有异议),它 只有两种基本的数据,仅有一种基本的语法结构就是表达式,而这些表达式同时也就是程序结构,但是正如规则最简单的围棋却有着最为复杂的变化一样,Lisp使用最基本的语言结构定义却可以完成其它语言难于实现的、最复杂的功能。语言应用 LISP是函数式程序设计的先锋,其诸多革命性的创新思维影响了后续编程语言的发展,亦完全垄断人工智能领域的应用长达三分之一个世纪。曾在开展初年出现的低效率因素亦在集体改良中被移去,成就了现在广被应用于软件开发、电子商务及金融系统的Common Lisp、Scheme、Emacs Lisp和Clojure等。关于Lisp9种语言思想 Lisp语言诞生的时候就包含了9种新思想。其中一些我们今天已经习以为常,另一些则刚刚在其他高级语言中出现,至今还有2种是Lisp独有的。按照被大众接受的程度,这9种思想依次如下排列。(1) 条件结构(即if-then-else结构)。现在大家都觉得这是理所当然的,但是Fortran I就没有这个结构,它只有基于底层机器指令的goto结构。(2) 函数也是一种数据类型。在Lisp语言中,函数与整数或字符串一样,也属于数据类型的一种。它有自己的字面表示形式(literal representation),能够存储在变量中,也能当作参数传递。一种数据类型应该有的功能,它都有。(3) 递归。Lisp是第一种支持递归函数的高级语言。(4) 变量的动态类型。在Lisp语言中,所有变量实际上都是指针,所指向的值有类型之分,而变量本身没有。复制变量就相当于复制指针,而不是复制它们指向的数据。(5) 垃圾回收机制。(6) 程序由表达式组成。Lisp程序是一些表达式树的集合,每个表达式都返回一个值。这与Fortran和大多数后来的语言都截然不同,它们的程序由表达式和语句组成。区分表达式和语句在Fortran I中是很自然的,因为它不支持语句嵌套。所以,如果你需要用数学式子计算一个值,那就只有用表达式返回这个值,没有其他语法结构可用,否则就无法处理这个值。后来,新的编程语言支持块结构,这种限制当然也就不存在了。但是为时已晚,表达式和语句的区分已经根深蒂固。它从Fortran扩散到Algol语言,接着又扩散到它们两者的后继语言。(7) 符号类型。符号实际上是一种指针,指向存储在散列表中的字符串。所以,比较两个符号是否相等,只要看它们的指针是否一样就行了,不用逐个字符地比较。(8) 代码使用符号和常量组成的树形表示法。(9) 无论什么时候,整个语言都是可用的。Lisp并不真正区分读取期、编译期和运行期。你可以在读取期编译或运行代码,也可以在编译期读取或运行代码,还可以在运行期读取或者编译代码。在读取期运行代码,使得用户可以重新调整(reprogram)Lisp的语法;在编译期运行代码,则是Lisp宏的工作基础;在运行期编译代码,使得Lisp可以在Emacs这样的程序中充当扩展语言(extension language);在运行期读取代码,使得程序之间可以用S表达式(S-expression)通信,近来XML格式的出现使得这个概念被重新“发明”出来了。Lisp语言刚出现的时候,这些思想与其他编程语言大相径庭,后者的设计思想主要由50年代后期的硬件决定。随着时间流逝,流行的编程语言不断更新换代,语言设计思想逐渐向Lisp靠拢。思想(1)到思想(5)已经被广泛接受,思想(6)开始在主流编程语言中出现,思想(7)在Python语言中有所实现,不过似乎没有专用的语法。思想(8)可能是最有意思的一点。它与思想(9)只是由于偶然原因才成为Lisp语言的一部分,因为它们不属于麦卡锡的原始构想,是由拉塞尔自行添加的。它们从此使得Lisp语言看上去很古怪,但也成为了这种语言最独一无二的特点。说Lisp语言古怪倒不是因为它的语法很古怪,而是因为它根本没有语法,程序直接以解析树(parse tree)的形式表达出来。在其他语言中,这种形式只是经过解析在后台产生,但是Lisp直接采用它作为表达形式。它由列表构成,而列表则是Lisp的基本数据结构。用一门语言自己的数据结构来表达该语言是非常强大的功能。思想(8)和思想(9),意味着你可以写出一种能够自己编程的程序。这可能听起来很怪异,但是对于Lisp语言却是再普通不过。最常用的做法就是使用宏。术语“宏”在Lisp语言中的意思与其他语言中的不一样。Lisp宏无所不包,它既可能是某样表达式的缩略形式,也可能是一种新语言的编译器。无论是想真正理解Lisp语言,还是只想拓宽编程视野,最好都学学宏。就我所知,宏(采用Lisp语言的定义)目前仍然是Lisp独有的。一个原因是为了使用宏,你大概不得不让你的语言看上去像Lisp一样古怪。另一个可能的原因是,如果你想为自己的语言添上这种终极武器,你从此就不能声称自己发明了新语言,只能说发明了一种Lisp的新方言。我把这件事当作笑话说出来,但是事实就是如此。如果你创造了一种新语言,其中有car、cdr、cons、quote、cond、atom、eq这样的功能,还有一种把函数写成列表的表示方法,那么在它们的基础上完全可以推导出Lisp语言的所有其他部分。事实上,Lisp语言就是这样定义的,麦卡锡把语言设计成这个样子就是为了让这种为什么Lisp没有流行起来很久以前,这种语言站在计算机科学研究的前沿,特别是人工智能的研究方面。现在,它很少被用到,这一切并不是因为古老,类似古老的语言却被广泛应用。其他类似的古老的语言有 FORTRAN、 COBOL、 LISP、 BASIC、 和ALGOL 家族,这些语言的唯一不同之处在于,他们为谁设计。FORTRAN是为科学家和工程师设计的,他们在计算机上编程的目的是是为了解决问题。COBOL是为了商业设计的,最好的体现在于让商人们可以利用电脑时代。LISP是了计算机科学研究设计的,最突出的体现在计算机基本原理研究。。BASIC是为初学者设计的。最后,ALGOL语言是有计算机程序员修改,演变成其他流行的语言,如C,Pascal和Java的一个庞大的家族。上面提到的某些语言已经不像当初那么流行了。我们在这里可以把它们称作“失败”。问题是它们为什么失败?第一站出来的是COBOL. 很不幸,它以面向商业人员的很好的可读性就是它的失败点。商业人员发现,他们可以雇佣程序员去管理他们的系统。程序员自然会偏向于为他们设计的语言,而不是他们的老板。所以随着时间推移,越来越多的商业功能都使用例如VB, C, C++ 和JAVA实现了。现在,只有很少一部分软件仍通过COBOL语言编写。BASIC却有不同的命运。他是为入门人员设计的。那些在微机上学习编程,他们会使用内置的BASIC语言作为起点。随着时间推移,微机被运行微软操作系统的个人电脑,或者MacOS的苹果电脑所代替。这种语言逐渐被VB所取代。虽然他是面向初级程序员,它有一段时间代替了COBOL。为什么要耗费这么多的资源在昂贵的编译器上,而便宜的解释器在我们的电脑上已经存在?最近,微软以迁移到.NET框架上,让VB跟在后面。它的替代者, C#就是ALGOL家族中的一员,跟Java相近。这些年FORTRAN的使用起起伏伏。在某一阶段,差不多所有科学方面的代码是用它来写的。它的优点是这门语言中没有指针,并且不允许存在递归。这意味着所有数据的引用位置都可以在编译时确定。FORTRAN编译器利用这些额外的信息使程序运行格外地迅速。不幸的是,随着时间的推移,固定大小的数组这种数据结构变得过时了。现在,科学要处理任意形状的风格,甚至表述更为复杂的真实世界。这需要在语言中额外地加入指针。这些情况发生的时间段里,FORTRAN逐渐走向没落。现在,它被转移到高性能计算工作,其中新的并行矩阵和矢量运算最近添加到这门语言中,仍然使它拥有性能优势。ALGOL语言家族取得了成功。其原因是,这些语言是由程序员为程序员写的。随着时间的推移,这些与系统和应用相关的语言成为了现在最常用的语言。它的优点是越多地程序员使用,这门语言就能得到更多地改进,并且越来越多地程序是用它们来写就的。这提供了一个良性循环,更多的程序员们又被聘请在己编写的程序上工作。这是一个网络效应的例子。一个系统的“价值”是它的用户数目的平方,在于以此速率增长的用户之间的交互作用。那么为什么Lisp语言家族会站在失败者一边呢?有些人认为是语法的错。Lisp因为它的括号而臭名昭著。我并不认为是这个理由。许多用户说良好的格式可以让他们跟上这些括号。同时,Lisp语言被发明不久后,有一个叫“super-bracket”的语法可以让人快速表示出任意数量的回括号”)”。这个特性在今天已经很少有人使用了。最后,优秀的编辑器解决了大多数的语法问题。另一些人经常抱怨Lisp是一门函数式语言。这是失败的理由吗?自然,跟早期的语言相比,只有Lisp算是函数式的。但事实上,我认为没有这么简单。Lisp也有命令式语言的特性,ALGOL系列语言也可以被当作一门纯正的函数式语言来用。 如果有人想选择一种特定的编程范式来写代码,一些特定的语言可以让这个选择更容易的实现。然而,现代语言已经足够灵活,它们能支持多种编程范式,近乎完全命令式的Lisp没有理由不存在。或许lisp的问题在于他使用了垃圾回收?在那个时候,只有lisp作为计算机语言采用了这个特性。诚然,垃圾回收会占用大量的计算资源,而早期计算机在该方面的不足足以组织lisp大展拳脚了。但是,我认为这仍然不是主要的原因。lisp是用来写那些复杂度相当高的程序的,而这些程序在事实上都必须带有一个垃圾回收模块,如果你用其他的语言来写……大概很难比lisp实现的要好吧?众所周知的事实是,任何一个如此复杂的程序,如果用其他语言写的话都不可避免的戴上一个比lisp垃圾回收臃肿不少的功能模块……lisp的失败,恰恰是因为他太成功,这让他的目标变得模糊。lisp相对与早期的语言实在是非常灵活,灵活到足以改变自身形式以适应需求。对于其他的语言来说,如果想要完成一个庞大的任务,就需要把这个任务打碎成一小块一小块的然后完成。如果是一个更大的呢?甚至连编译都需要分步完成了。但是lisp不是这样的,由于他强大的能力,程序员可以将lisp改造成特定领域的专门工具——顺手的工具将顺手的解决问题——任务轻松完成了。由于语言的正交性(译者注:这里可能应该理解为“自洽”),我们改造过的lisp仍然可以使用原有的编译器,解释器运行。那么建立特定领域的语言来作为一个问题的解决方案,它会出现什么问题呢?结果是它非常高效。然而,这种做法会使语言分化。这导致许多子语言都略有不同。这是Lisp代码对其他人而言可读性差的真正原因。在其他语言中,相对来说比较简单就能臆测出一段给定代码的作用。有着超强的表达力的Lisp,由于一个给定的符号(symbol)可能是一个变量,函数或操作,需要阅读大量代码才能找出它。Lisp失败的原因是因为它的碎片化,并且它的碎片化是因为其语言天性与特定领域方案的风格造成的。而网络效应则恰恰相反。越来越少的程序员使用相同的方言,因此它相对与ALGOL语言家族的总价值下降。如果有人现在设计一种语言,该如何避免这种问题呢?如果语言的表达性是我们的目标,那么它必须以某种方式加以调整。这门语言必须要有特意的限制,来保证所编写代码的可读性。Python是一门成功的语言,它已经做到了这些,其中某些限制是硬编码的,而另一些则是以约定成俗的方式存在。不幸的是,这么久过去了并且发明了这么多Lisp的变种语言,在其之上建立的其它新语言大概并不是所要的答案。根本不会有足够多的用户使它与众不同。也许解决的办法是,慢慢加入类似Lisp的语言功能到ALGOL语言家族中。幸运的是,这似乎是正在发生的事。新的语言(C#,D,Python等)趋向于拥有垃圾回收机制。他们也往往比旧的语言更具正交性。在未来,最终会有行为很像Lisp的一种流行语言。
2021年04月21日
122 阅读
68 评论
0 点赞
2021-04-17
NFS配置使用
0*001 Install:[root@localhost ~]# yum install -y nfs-utils 安装nfs服务[root@localhost ~]# yum install -y rpcbind 安装rpc服务0*002 Set:[root@localhost /]# mkdir /public #创建public共享目录[root@localhost /]# vi /etc/export#修改配置文件 /public 192.168.245.0/24(ro)*只读 /protected 192.168.245.0/24(rw) *可以读写/putian 192.168.1.1/24(rwx)*可以读写执行[root@localhost /]# systemctl reload nfs ~~如果想允许某个网段话,可以试试在后面加个*例如192.168.31.*~~ *重启NFS服务器参数作用ro只读rw读写root_squash当NFS客户端以root管理员访问时,映射为NFS服务器的匿名用户no_root_squash当NFS客户端以root管理员访问时,映射为NFS服务器的root管理员all_squash无论NFS客户端使用什么账户访问,均映射为NFS服务器的匿名用户sync同时将数据写入到内存与硬盘中,保证不丢失数据async优先将数据保存到内存,然后再写入硬盘;这样效率更高,但可能会丢失数据
2021年04月17日
218 阅读
0 评论
0 点赞
2021-03-26
Racket编程 《使用指南》
文件和表达式选项:-e <exprs>,——eval <exprs>:评估<exprs>,打印结果-f <file>,——load <file>: Like -e '(load "<file>")'而不打印t <文件>,<文件>:需要像- e”(要求(文件”<文件> "))”[*]l <路径>——自由<路径>:像- e”(要求(自由”<路径> "))”[*]-p <package>: Like -e '(require (planet "<package>")' [*] -r <file>,——script <file>:同-f <file> -N <file>——-u <file>,——require-script <file>:与-t <file> -N <file>——相同-k <n> <m> <p>:从偏移量<n>加载可执行嵌入代码到<p>-m,——main:使用命令行参数调用' main',打印结果[*] Also ' require'是一个' main'子模块,如果有的话交互选项:-i,——repl:执行交互式的read-eval-print循环;意味着- vn, no-lib:跳过(要求(自由”< init-lib >”))”- / - e / f / - r-v,——version:显示版本-V,——no-yield:在退出时跳过' ((executable-yield-handler) <status>)'配置选项:-c,——no-compiled:禁止加载已编译的文件-q,——no-init-file:跳过~/的加载。racketrc为我-I <path>: Set <init-lib> to <path>(设置语言)-X <dir>,——collect <dir>: Main在<dir>处收集(或""禁用所有)-S <dir>,——search <dir>: More在<dir>处收集(在main收集之后)-G <dir>,——config <dir>:主配置目录在<dir>-A <dir>,——addon <dir>: addon directory at <dir>-U,——no-user-path:忽略用户特定的收集等。-R <paths>,——compiled <paths>:将编译文件的搜索根设置为<paths>-C,——cross:交叉构建模式;保存当前收集和配置为主机-N <file>,——name <file>:将' (find-system-path 'run-file)'设置为<file>-j,——no-jit:禁用即时编译器-d,——no-delay:禁止按需加载语法和代码-b,——binary:以二进制方式读取stdin和写入stdout/stderr-W <级别>,——warn <级别>:设置标准错误日志记录为<级别>-L <级别>,——syslog <级别>:设置syslog日志记录为<级别>元选择:-h,——help:显示此信息并退出,忽略其他选项默认的选项:如果只有配置选项,则添加-i如果第一个参数前只有配置选项,则添加-u如果-t/-l/-p/-u出现在第一个-i/-e/-f/-r之前,则添加-n默认为racket/init开关的语法:可以折叠多个单字母开关,并放置参数开关倒塌后;第一个折叠的开关不能是——例如:' -ifve file expr'与' -i -f file -v -e expr'相同启动顺序:设置“current-library-collection-paths”要求(自由”< init-lib >”)的[当我/ - e / f / - r,除非- n)3.按顺序计算/加载表达式/文件,直到第一次出现错误~ /负载”。racketrc“(当我)执行read-eval-print循环[when -i]运行' (((executable-yield-handler) <status>)'[除非-V]
2021年03月26日
150 阅读
0 评论
1 点赞
2021-03-24
Linux系统管理员应该知道的journalctl知识
在Systemd出现之前,Linux系统及各应用的日志都是分别管理的,Systemd开始统一管理了所有Unit的启动日志,这样带来的好处就是可以只用一个 journalctl命令,查看所有内核和应用的日志。基础用法1.1 查看所有日志(默认显示本次启动的所有日志)[root@devops-101 ~]# journalctl查看本次启动的所有日志也可以使用[root@devops-101 ~]# journalctl -b1.2 查看内核日志[root@devops-101 ~]# journalctl -k1.3 查看指定时间的日志通过--since和--until选项,可以过滤任意时间限制,显示指定条件之前、之后或之间的日志。[root@devops-101 ~]# journalctl --since="2018-09-21 10:21:00"查询一个时间段范围内的日志。[root@devops-101 ~]# journalctl --since="2018-09-21 10:21:00" --until="2018-09-21 10:22:00"1.4 根据不同的主题进行过滤筛选根据服务筛选[root@devops-101 ~]# journalctl -u kubelet.service[root@devops-101 ~]# journalctl -u kubelet根据进程ID查询如果进程使用了systemd托管日志,则可以通过以下命令查找进程对应的日志。[root@devops-101 ~]# journalctl _PID=1Systemd journal 有很多可以用来过滤的字段,可以通过 man systemd.journal-fields 查看所有可以用来过滤的字段。对于用来筛选的字段,可以使用-F参数来查看所有可以用来过滤的值,例如journalctl -F _PID。按优先级操作系统提供了从0 (emerg) 到 7 (debug) 一共7个级别的日志,可以配合-p参数分别查看对应级别的日志。[root@devops-101 ~]# journalctl -p 5 -u kubelet7个级别的含义为0: emerg1: alert2: crit3: err4: warning5: notice6: info7: debug1.5 调整显示输出默认情况,journal输出进入分页模式,用户可以在终端上调整显示的内容,如果要不需要分页,需要加上--no-pager参数。以Json格式输出[root@devops-101 ~]# journalctl -p 5 --no-pager -o json通过-o参数,可以设置为json格式输出,这对于其他接收json格式的日志分析工具非常友好。[root@devops-101 ~]# journalctl -p 5 --no-pager -o json-pretty使用json-pretty则对于管理员查看日志非常易读。支持的各种格式如下:cat: 只显示信息字段本身。export: 适合传输或备份的二进制格式。json: 标准JSON,每行一个条目。json-pretty: JSON格式,适合人类阅读习惯。json-sse: JSON格式,经过打包以兼容server-sent事件。short: 默认syslog类输出格式。short-iso: 默认格式,强调显示ISO 8601挂钟时间戳。short-monotonic: 默认格式,提供普通时间戳。short-precise: 默认格式,提供微秒级精度。verbose: 显示该条目的全部可用journal字段,包括通常被内部隐藏的字段。1.6 活动日志跟踪journalctl也支持类似tail的功能,如通过-n参数指定显示最近的多少行,默认为10行,通过-f参数持续监控日志。维护2.1 查看日志占用的磁盘空间[root@devops-101 ~]# journalctl --disk-usageArchived and active journals take up 8.0M on disk.2.2 设置日志占用的空间root@devops-101 ~]# journalctl --vacuum-size=500MVacuuming done, freed 0B of archived journals on disk.2.3 设置日志保存的时间[root@devops-101 ~]# journalctl --vacuum-time=1monthVacuuming done, freed 0B of archived journals on disk.配置上面的一些维护动作,也可以通过配置参数设置,配置文件位于/etc/systemd/journald.conf。Storage=persistentCompress=yesSeal=yesSplitMode=uidSyncIntervalSec=5mRateLimitInterval=30sRateLimitBurst=1000SystemMaxUse=SystemKeepFree=SystemMaxFileSize=RuntimeMaxUse=RuntimeKeepFree=RuntimeMaxFileSize=MaxRetentionSec=MaxFileSec=1monthForwardToSyslog=yesForwardToKMsg=noForwardToConsole=noForwardToWall=yesTTYPath=/dev/consoleMaxLevelStore=debugMaxLevelSyslog=debugMaxLevelKMsg=noticeMaxLevelConsole=infoMaxLevelWall=emerg
2021年03月24日
125 阅读
2 评论
0 点赞
1
...
6
7
8