Python黑客绝技04:Python基础知识2

本文是Python黑客技术学习笔记的第四部分,深入讲解Python的基础知识,包括条件选择语句(如if和异常处理)、函数、迭代、文件输入/输出,以及sys和os模块的使用。通过实例展示了如何处理错误、创建函数、遍历IP和端口、读写文件,为构建Python黑客工具奠定基础。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Python黑客绝技学习笔记04:Python基础知识2

在上一期中,我们学习了Python解释器、基本数据类型、网络模块等Python基础知识,本期我们将继续学习Python的基础知识。

1.3.4 条件选择语句

和大多数编程语言一样,python提供了条件选择语句的方法。使用if 语句,计算一个逻辑表达式来判断选择的结果。
我们以上一期中套接字模块测试的脚本为例,我们想要知道某个指定的服务是否存在可以攻击的漏洞,这就需要将靶机的响应结果与一些一直存在漏洞的SSH服务版本进行比较。
条件选择语句的基本语法如下:

if 条件一:
	语句一
elif 条件二:
	语句二
...    
else:
	语句N

下面是例子:

>>> import socket
>>> socket.setdefaulttimeout(2)
>>> s = socket.socket()
>>> s.connect(("192.168.21.130",22))
>>> ans = (s.recv(1024)).decode('utf-8')  # 将返回的内容以uft-8形式编码
>>> # 条件选择语句,判断版本是否存在漏洞
>>> if ("SSH-2.0-OpenSSH_5.3p1 Debian-3ubuntu4" in ans):
...     print("[+] SSH-2.0-OpenSSH_5.3p1 is vulnerable.")  # 如果是该版本,打印存在漏洞
... elif ("SSH-2.0-OpenSSH_5.3p2 Debian-3ubuntu4" in ans):
...     print( "[+] SSH-2.0-OpenSSH_5.3p2 is vulnerable.")
... elif ("SSH-2.0-OpenSSH_5.4p1 Debian-3ubuntu4" in ans):
...     print( "[+] SSH-2.0-OpenSSH_5.4p1 is vulnerable.")
... elif ("SSH-2.2-OpenSSH_5.3p1 Debian-3ubuntu4" in ans):
...     print( "[+] SSH-2.2-OpenSSH_5.3p1 is vulnerable.")
... else:
...     print( "[-] SSH Server is not vulnerable.")
... 
[+] SSH-2.0-OpenSSH_5.3p1 is vulnerable.

这里要说明的是Python3对文本以及二进制数据做了比较清晰的区分。文本总是Unicode,由str类型进行表示,二进制数据使用bytes进行表示,不会将str与bytes偷偷的混在一起,使得两者的区别更加明显。在python2中会明显发现不能将str与bytes拼接在一起,也不能在bytes中查找字符。
然而在实际应用中经常需要对两者进行转换操作以便后续的代码能够顺利跑完。两者之间的关如下所示:

str->bytes:encode编码
bytes->str:decode解码

简单的说就是字符串通过编码成为字节码,字节码通过解码成为字符串
而socket模块receive()接受过来的数据是二进制的内容,需要通过解码转换为文本。
ans = (s.recv(1024)).decode('utf-8')

1.3.5 异常处理

即使我们写的程序语法完全正确,但程序运行或执行是仍可能有错误。这里有一个经典的错误就是除以0,因为0不可以做除数,所以,所以python解释器会打印出一条消息,把错误内容告诉我们:ZeroDivisionError: division by zero。该错误使程序停止执行。

>>> 1/0
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ZeroDivisionError: division by zero

如果我们只是想在我们预设的范围内处理错误,该怎么办?
python 语言提供的异常处理功能可以版主我们完成这个任我。我们使用可以使用try/except 进行异常处理。
当程序试图除以零,错误发生,我们的异常处理捕获错误并把错误信息打印到屏幕上。

>>> try:
...     print( "[+] 1/0 = "+str(1/0))
... except:
...     print ("[-] Error. ")
... 
[-] Error. 

遗憾的是,这样我们仅得到一个Error信息,为什么出错我们无法得知。但是我们需要知道为什么出错,所以我们可以把异常信息存储到一个变量中,将其打印出来。

>>> try:
...     print( "[+] 1/0 = "+str(1/0))
... except Exception as e:
...     print ("[-] Error = "+str(e))
... 
[-] Error = division by zero

try/except 语句还有一个可选的 else 子句,如果使用这个子句,那么必须放在所有的 except 子句之后。else 子句将在 try 子句没有发生任何异常的时候执行。
在这里插入图片描述
我们可以使用异常处理来更新抓取banner的脚本,我们把网络连接代码写在try语句块中,尝试连接到一台没有在TCP端口21上运行FTP服务的机器。如果连接超时,就会看到一条表明网络连接操作超时的消息。

>>> import socket
>>> socket.setdefaulttimeout(2)
>>> s = socket.socket()
>>> 
>>> try
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值