python基本语法
变量:整型、实数、布尔值、字符串、或更复杂的数据结构,如列表、字典。
python2版本
函数:
查看变量类型:
>>>port = '21'
>>>type(port)
<type 'str'>
字符串函数:小写转大写:upper();小写转小写:lower();字符串old替换成new:replace(old,new);检测字符串中是否包含指定子字符串'FTP':find('FTP')
例:
>>>banner = "FreeFloat FTP Server"
>>>print banner.upper() 运行结果:FREEFLOAT FTP SERVER
>>>print banner.lower() 运行结果:freefloat ftp server
>>>print banner.replace('FreeFloat', 'Ability') 运行结果:Ability FTP Server
>>>print banner.find('FTP') 运行结果:10
数据结构——列表
>>>portList = []
>>>portList.append(21) #增加列表数据
>>>portList.append(80)
>>>portList.append(443)
>>>portList.append(25)
>>>print portList #打印列表
[21,80,443,25]
>>>portList.sort() #列表排序
>>>print partList
[21,25,80,443]
>>>pos = portList.index(80) #查看80位置,21在第0位,25在第1位,80在第2位,所以pos=2
>>>print "[+]There are "+str(pos)+" ports to scan before 80."
[+]There are 2 ports to scan before 80.
>>>portList.remove(443) #移除443
>>>cnt = len(portList) #len() 返回portList列表长度,所以cnt=3
数据结构——字典
>>>services = {'ftp':21, 'ssh':22, 'smtp':25, 'http':80}
>>>services.keys()
['ftp', 'smtp', 'ssh', 'http']
>>>services.items()
[('ftp',21),('smtp',25),('ssh',22), ('http',80)]
>>>services.has_key('ftp')
True
>>>services['ftp']
21
网络
套接字模块提供了一个可以使python 建立网络连接的库。让我们快速的编写一个获取提示信息的脚本,连接到特定IP 地址和端口后,我们的脚本将打印提示信息,之后,我们使用connect()函数连接到IP 地址和端口。一旦连接成功,就可以通过套接字进行读写。这种recv(1024)的方法将读取之后在套接字中1024 字节的数据。我们把这种方式的结果存到一个变量中,然后打印到服务器。
异常处理
即使一个程序设计师编写的程序语法正确,该程序仍然可能在运行或执行时发生错误。考虑经典的一种运行错误——除以零。因为零不能做除数,所以python 解释器显示一条消息,把错误信息告诉程序设计师:该错误使程序停止执行。
>>> print 1337/0
Traceback (most recent call last):File "<stdin>", line 1, in <module> ZeroDivisionError: integer division or modulo by zero
如果我们想在我们预设的范围内处理错误,会对运行的程序产生什么影响呢?python 语言提供的异常处理能力就可以这样做。让我们来更新前面的例子,我们使用try/except 进行异常处理。现在程序试图除以零。当错误发生时,我们的异常处理捕获
错误并把错误信息打印到屏幕上。
>>> try:
... print "[+] 1337/0 = "+str(1337/0)
... except:
... print "[-] Error. "
...
[-] Error
不幸的是,这给了我们非常少的关于错误的异常处理的信息。但在对待特殊错误时,这可能很有用,要做到这一点,我们将存储异常信息到一个变量中,来打印出异常信息。
>>> try:
... print "[+] 1337/0 = "+str(1337/0)
... except Exception, e:
... print "[-] Error = "+str(e)
...
[-] Error = integer division or modulo by zero
>>>
函数
在python 中,函数提供了组建好的,可反复使用的代码片段。通常,这允许程序设计师写代码来执行单独或关联的行为。
尽管python 提供了许多内置函数,程序设计师仍然可以创建自定义的函数。关键字def()开始了一个函数,程序设计师可以把任何变量放到括号里。这些变量随后被传递,这意味着在函数内部对这些变量的任何变化,都将影响调用的函数的值。继续以我们的FTP 漏洞扫描器为例,让我们创建一个函数来执行只连接到FTP 服务器的操作并返回提示信息。