python知识总结:
(1)、 if __name__ == "__main__":
我们将它当做应用程序的入口,name将不再是它本身模块名称,而强制改为__mian__
if name == ‘main’ 就相当于是 Python 模拟的程序入口。Python 本身并没有规定这么写,这只是一种编码习惯。由于模块之间相互引用,不同模块可能都有这样的定义,而入口程序只能有一个。到底哪个入口程序被选中,这取决于 name 的值。
(2)、self用法:
由于类起到模板的作用,因此,可以在创建实例的时候,把我们认为必须绑定的属性强制填写进去。这里就用到Python当中的一个内置方法__init__方法,例如在Student类时,把name、score等属性绑上去:
class Student(object):
def __init__(self, name, score):
self.name = name
self.score = score
__init__方法的第一参数永远是self,表示创建的类实例本身,因此,在__init__方法内部,就可以把各种属性绑定到self,因为self就指向创建的实例本身。(2)、有了__init__方法,在创建实例的时候,就不能传入空的参数了,必须传入与__init__方法匹配的参数,但self不需要传,Python解释器会自己把实例变量传进去。
(3)、构造方法:
在Python中是使用__new__
和__init__
来完成的。
__new__
负责进行对象的创建,object中的__new__
示例代码如下
@staticmethod # known case of __new__
def __new__(cls, *more): # known special case of object.__new__
""" Create and return a new object. See help(type) for accurate signature. """
pass
__init__
负责进行对象的初始化,object中的__init__
示例代码如下:
def __init__(self): # known special case of object.__init__
""" Initialize self. See help(type(self)) for accurate signature. """
pass
(4)、公有和私有:
1. _xxx "单下划线 " 开始的成员变量叫做保护变量,意思是只有类实例和子类实例能访问到这些变量,需通过类提供的接口进行访问
2. __xxx 类中的私有变量/方法名 " 双下划线 " 开始的是私有成员,意思是只有类对象自己能访问,连子类对象也不能访问到这个数据。
3. __x__ 系统定义名字,前后均有一个“双下划线” 代表python里特殊方法专用的标识,如 __init__()代表类的构造函数。
如果想要直接访问私有变量和私有函数,解释器会报错说类里没有这个属性
但是python的私有其实是伪私有,其实是python的名字改装在起作用,在类外访问类里的私有元素,变量和方法会被改名,加上_<类名>即可访问私有变量和私有方法
(5)、闭包:
闭包(Closure)指的则是附带相应数据的函数。闭包函数能够引用一些并不在当前代码上下文中定义的变量。这些被引用的变量是在闭包函数的包围作用域(enclosing scope)的代码中定义的。这样的一些函数被称为闭包。
1.定义:本质上来说,就是一个函数里嵌套一个函数定义,内部函数能够带够调用外部函数的变量以及外部函数的传入参数。闭包的大概形式列如:
def test1(a,b):
pass
def test2(c):
pass
return test
# 调用
test_1 = test1(a,b)
test_1(c)
2.概述:
上述代码return返回的是一个指向,指向test2这个函数,调用闭包时会开辟一个存储空间来存储变量和函数,调用一次就开辟一次。调用后,会将函数与数据一起传给test_1这个变量。实质上test_1这个变量就是指向test2函数的内部。
3.内部函数修改外部函数数据内部函数开始要用nonlocal 变量名来定义外部函数内内部函数外的变量:如:
def test1(a,b):
x = 300
def test2(c):
nonlocal x
print(-----1---->%d)% x
x = 20
print(------2------>%d)%x
return test
assert利用蚁剑登录:
此处同样采用上文提到的墨者学院文件上传漏洞靶场进行蚁剑使用体验,与冰蝎不同的是,蚁剑没有单独的蚁剑木马,它采用的是跟中国菜刀一样原始的一句话木马:
使用中国蚁剑配置木马连接信息(此处暂不理会编码器和解码器的设置,后面再单独谈,暂选默认即可):
蚁剑具有“代理设置”功能,此处为了直接使用 BurpSuite 观察蚁剑与服务端(被上传一句话木马的受害主机)的通信过程的数据包,我们启用下蚁剑的代理功能(不启用代理的话可直接使用 WireShark 抓包观察也行):
开始使用蚁剑连接木马,开启文件管理功能:
打开靶机的虚拟终端
此时可以在 BurpSuite 上捕抓到对应的通信数据包:
数据包头“cmd”是木马的连接密码。可以看到中国蚁剑默认状态下的通信数据包仅仅做了URL编码处理,与明文无异。