python安全开发基础篇–第四节
注意:本文是python2.7的代码,使用Python3的自己改下语法
第一个真正意义的程序–某个端口的扫描
try except 异常访问控制
当我们认为某些代码可能会出错时,就可以用try来运行这段代码,如果执行出错,则后续代码不会继续执行,而是直接跳转至错误处理代码,即except语句块,执行完except后,如果有finally语句块,则执行finally语句块
a=10
b=0
try:
c=a/b
print c
except:
print "执行失败,请查找原因"
##################################
try:
c=a/b
except ZeroDivisionError,e:
print e.message
try …except …finally
a=10
b=0
try:
c=a/b
print c
except:
print "执行失败,请查找原因"
finally:
print "程序运行结束"
如何把步骤执行变成一个代码可执行文件
python 代码编写的程序可以保存为python文件,即*.py格式的文件,执行的时候可以使用python *.py的方式来执行,也可以指定文件的 文件头.让我们打开文件test.py,编辑内容如下:
#coding=utf-8
a=10
b=0
try:
c=a/b
print c
except:
print "执行失败,请查找原因"
finally:
print "程序运行结束"
执行命令:python test.py
编写一个函数化的可执行代码
为什么要将代码函数化?
1.函数化有助于减少编写重复的代码,提高代码的复用
2.函数化有助于阅读代码
3.过程式代码在大量代码的项目中会出现无法快速迭代和修改的问题
注释:不过作为IT安全人员,过程式代码有的时候也很合适,因为安全人员往往很少编写大型程序,而是需要快速的写出辅助代码帮助分析病毒或者漏洞
函数一般结构
>>> def fun(x,y):
pass
空函数
def nop():
pass
带参数的函数
>>> def power(x):
return x * x
>>> power(5)
out:25
>>> power(10)
out:100
返回多个值
>>> def power(x,y):
a=x-y
b=x+y
return a,b
>>> x,y=power(5,3)
>>>print x,y
2 8
带默认参数的函数
>>> def power(x,y=2)
a=x-y
b=x+y
return a,b
>>> power(2)
(0, 4)
>>> power(3,2)
(1, 5)
####保存成脚本文件执行
#coding=utf-8
def add(a,b)
c=a+b
print c
add(8,9)
脚本工具化
作为一个安全员,我们会大量的编写脚本,一个好的脚本要可以做到工具化
python argparse模块介绍
python 一共有2个命令行工具相关的库:optparse 和argparse,argparse是optparse的替代品,也更加符合我们的编码规则,这里主要使用argparse来编写命令行工具
#coding=utf-8
import argparse
def test(a, b):
print int(a)+int(b)
if __name__ == '__main__':
parser=argparse.ArgumentParser(description="这是我的一个讲工具的例子") # 创建解析器
parser.add_argument("-x","--one",dest="a",help="这是第一个参数") # 增加命令行参数
parser.add_argument("-y","--yes",dest="b",help="这是第二个参数")
args=parser.parse_args()
if args.a and args.b :
test(a=args.a, b=args.b)
else:
print parser.format_help()
更多用法看这里argsparse相对详细的用法
#还有一种简单的工具参数制作方式
这种方式也很常见,很多小工具会这样写,当然最好使用的argparse,sys.argv接收的将是字符串类型,这个要注意
#coding=utf-8
import sys #导入模块
def test(a,b):
print int(a)+int(b) #要把str类型强制转换为int类型
if __name__ == '__main__':
if len(sys.argv) !=3:
print "example:python xxx.py arg1 arg2 \n"
else:
a=sys.argv[1]
b=sys.argv[2]
test(a,b)
课后作业
1查看更多argparse的用法,并熟悉它;