从零学网络安全 - Web 技术核心与安全风险(四)后端 Python

一、Python 基础语法

1. Python 介绍

Python 是⼀种解释型、⾯向对象、动态数据类型的⾼级编程语⾔。它被设计为可读性强、 简洁且易于学习,具有⾼效的⾼级数据结构,并且⽀持简单有效的⾯向对象编程。

特点:

  1. 易于学习:Python 有相对较少的关键字,结构简单,和一个明确定义的语法,学习起来更加简单。
  2. 易于阅读:Python 代码定义的更清晰。
  3. 易于维护:Python 的成功在于它的源代码是相当容易维护的。

应用领域:

web 开发、数据科学、人工智能和机器学习、自动化运维和测试、游戏开发、系统运维。

2. Python 基本语法

1. 变量与数据类型

Python 最大的特点是无需声明变量类型,直接赋值即可。

age = 30 # 整数 (Int)
pi = 3.14159 # 浮点数 (Float)
name = 'niko' # 字符串 (String)
is_student = True # 布尔值 (Boolean)
# 输出括号中的内容
print(f"姓名: {name}, 年龄: {age}")

单行注释:以“#”开始,到该行末尾结束。

单⾏注释: #

2. 类型转换

语法:

Python f-string:是在字符串前加f或F修饰符,Python 会自动将其值转换为字符串插入。
(1)允许在字符串中直接嵌入变量、表达式或函数调用的一种字符串格式化方法。
(2)语法:字符串前添加f,使用花括号{}包裹内容。
(3)另一种方式:+号拼接。
(4)注意:必须使用 str() 将数字转换为字符串后,才能进行字符串连接。

str_num = "123"
int_num = int(str_num) # 字符串转换为整数
print(f"字符串 '{str_num}' 转换为整数: {int_num}")
new_message = "我的分数是: " + str(int_num) # 数字转换为字符串
print(new_message)

3. 数据类型 list\tuple\dict

list:list 列表用[ ]标识,可以修改

# 定义一个待办事项列表
todo_list = ["买牛奶", "取快递", "写代码"]
# 添加新项
todo_list.append("运动30分钟")
# 修改第二项
todo_list[1] = "取快递(顺丰)"
# 删除第三项
del todo_list[2]
print(todo_list) # 输出:['买牛奶', '取快递(顺丰)', '运动30分钟']

tuple:tuple 元组用( )标识,是不可变序列,只能读取,适合存储固定数据

# 定义个人核心信息元组
person_info = ("zs", "110101199001011234", "1990-01-01")
print(person_info[0]) # 查看姓名
# 尝试修改元组元素(会报错,体现不可变性)
person_info[1] = "110101199001015678" # TypeError: 'tuple' object does not support item assignment

dict:dict 字典用{ }标识,以键值对形式存在。

# 定义通讯录字典
contact = {"zs": "13800138000"}
# 新增联系人
contact["lisi"] = "13700137000"
# 修改手机号
contact["wu"] = "13900139999"
# 通过键取值
print(contact["zs"]) # 输出:13800138000

4. 条件判断语句

核心规则:缩进!

  • Python 不使用大括号 `{}`,而是依赖缩进(通常是 4 个空格)来定义代码块。
  • 缩进的空白数量是可变的,但是所有代码块语句必须包含相同的缩进空白数量,这个必须严格执行。

语法:

#if-elif-else 语句
if 条件 1 :
	条件 1 为真执⾏的语句
elif 条件 2 :
	条件 2 为真执⾏的语句
elif 条件 3 :
	条件 3 为真执⾏的语句
elif 条件 4 :
	条件 4 为真执⾏的语句
else:
	以上条件为假执⾏的语句

示例:

user_score = 85
if user_score >= 90:
	print("成绩优秀")
elif user_score >= 80:
	print("成绩良好") # 缩进划分代码块
else:
	print("需要努力")

5. while 循环

语法:

while 条件 :
	条件为真 重复执⾏的代码

示例:

# while 循环
count = 3
while count > 0:
	print(f"While倒计时: {count}")
	count -= 1

6. for 循环

语法:

for 临时变量 in 容器 :
	重复执⾏的代码

示例1:

# for 循环遍历范围 (左闭右开)
for i in range(1, 6): # 遍历 1, 2, 3, 4, 5
	print(f"For循环数字: {i}")

示例2:

#遍历列表
fruits=["apple","banana","orange","peach","watermelon"]
for fruit in fruits: # 遍历列表中的每个元素
	print(fruit)

示例3:

# 遍历元组
tuple = ("zs", "110101199001011234", "1990-01-01")
for tup in tuple: # 遍历元组中的每个元素
	print(tup)

示例4:

#遍历字典
iddict = {'name':'zs','age':'18'}
#遍历字典的键
for key in iddict:
	print(key)
#遍历字典的值
for value in iddict.values():#需要使用.values进行取值
	print(value)

二、面相对象实战

1. Python 函数

函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。

自定义函数格式:

def 函数名(参数列表):
	# 函数体
	# 包含一系列缩进的语句
	return 返回值 # 可选,用于返回结果给调用者

示例1:

# 定义函数
def printme(name) :
	"打印传⼊的字符串"
	print('我的名字叫:',name)
# 调用函数
printme('张三')

示例2:

# 定义函数 sum,返回 2 个参数的和
def sum(arg1, arg2) :
	total = arg1 + arg2
	print("函数内 : ", total)
	return total
# 调⽤ sum 函数
total = sum(10, 20)
print(total)

2. 类\实例化\构造函数

类(Class)

类是⼀个模板或蓝图,它定义了对象的结构和⾏为。类包含了属性和⽅法,这些属性和⽅法定义了对象将拥有的数据(状态)以及可以执⾏的操作(行为)。

Python中的魔术方法,也被称为双下划线方法或特殊方法,这些方法的名称前后都带有两个下划线,例如__init__、__str__等。

  • 主要作用是为Python中的对象提供内置的、特殊的行为。
  • 构造函数: 固定命名为 __init__(可以将类中需要外部赋值的放入到其中)。
  • self: 必须是所有实例方法和构造函数的第一个参数,代表当前对象。

示例1:

class Dog:
	species = "犬科" # 类属性
	def __init__(self, name, age): # 构造函数
		self.name = name # 实例属性
		self.age = age
	def bark(self): # 实例方法
		print(f"{self.name}在汪汪叫")
# 创建对象
dog1 = Dog("小黑", 3)
dog1.bark() # 输出:小黑在汪汪叫

示例2:

class Dog:
	species = "犬科" # 类属性
	def __init__(self, name, age): # 构造函数
		self.name = name # 实例属性
		self.age = age
	def bark(self): # 实例方法
		print(f"{self.name}在汪汪叫")
	def __str__(self): # 实例方法
		return f"{self.name}今年{self.age}岁了"
# 创建对象
dog1 = Dog("小黑", 3)
dog1.bark() # 输出:小黑在汪汪叫
# 当你对一个对象执行print() 操作时,Python 会自动查找并调用该对象的 `__str__` 方法
print(dog1) # 输出:小黑今年3岁了

3. PHP 与 Python 核心区别:选择合适的工具

特性 PHP Python 适用场景
语法快 大括号{} 缩进 PHP 更接近 C 系语言,Python 更简洁
变量 必须带$ 直接命名 Python 学习门槛更低
应用领域 专注 Web 后端 全领域(Web、AI、数据分析等) 建网站优先 PHP,复杂系统考虑 Python
字符串连接 点号. 加号 + 或 f-string Python 的字符串处理更直观

三、Python模块

1. 什么是 Python 模块

Python 模块是包含Python代码的文件,其扩展名通常为`.py`。

  • 模块是 Python 程序的基本组成部分,它们提供了封装代码的方式,使得代码更加组织化、易于重用和维护。
  • 模块可以包含函数、类和变量,也可以包含可执⾏的代码。
  • 常见模块类型:系统内置模块、自定义模块、第三方模块。

Python 模块特点

  1. 封装性:模块可以将相关的函数、类和变量封装在⼀起,形成⼀个独⽴的代码单元。这有助于保持代码的整洁和组织性。
  2. 重⽤性:⼀旦⼀个模块被编写和测试完毕,它就可以被多个程序重复使⽤,⽽⽆需重复编写相同的代码。
  3. 可维护性:模块化的代码更容易维护和更新。如果需要修改某个功能,只需要修改相应的模块,而不需要修改整个程序。
  4. 命名空间管理:每个模块都有⼀个独⽴的命名空间,这有助于避免命名冲突。当两个模块包含相同名称的函数或变量时,它们不会相互⼲扰,因为它们是在不同的命名空间中定义的。

2. 系统内置模块

是 Python 自带的标准库,它们提供了丰富的功能和工具,用于执行各种常见的任务。系统内置模块包括:os模块、sys模块、random模块、time模块。

示例:

#导入math模块
import math
#求平方根
num=math.sqrt(4)
print(num)

3. 自定义模块

⾃定义模块是开发者⾃⼰编写的模块,⽤于封装特定的功能或逻辑。⾃定义模块可以是任何有效的Python⽂件(以“.py”为后缀名),⾥⾯可以包含全局变量、函数、类等。

示例:

第一步:定义一个新的 my_sum.py 文件,注意不要与系统内置模块重名

#求两个数的和
def add(num1,num2):
	return num1 + num2

第二步:导入新定义的 my_sum.py 文件

import my_sum
#调用自定义模块内函数
num = my_sum.add(1,2)
print(num)

4. 通过 pip 命令下载第三方模块

是由其他开发者或组织编写的,并发布到 Python 包索引等公共仓库中的模块。pip 是 Python 中的标准库管理器。它允许你安装和管理不属于 Python 标准库的其它软件包。

命令格式:

pip install 库名
pip install 库名 -i 镜像源 #-i 更换安装源(默认是使用国外的源,下载速度慢)

常见的国内的镜像源:

5. requests 库

requests 是 Python 常⽤的⽹络请求库,核心功能是模拟浏览器向⽹站发送请求、获取数据。

示例:

第一步:

pip install requests

第二步:

import requests
domain="https://www.zhibangyang.cn/"
r=requests.get( domain )
#获取状态码
print(r.status_code);
#获取 HTTP 响应的文本内容
print(r.text);

6. 第三方工具 oneforall

OneForAll 是一款基于 Python 开发的、功能全面的域名信息收集与爆破工具。

  • 可高效枚举目标域名的子域名、获取相关解析记录与资产信息。
  • 常用于网络安全渗透测试。

如何使用?

  1. 下载地址
    https://github.com/shmily

  2. 安装

(1)cd D:\Oneforall\OneForAll-master

(2)通过指定的依赖清单文件requirements.txt,批量安装项目依赖。

pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/

  1. 版本不兼容、安装报错:可以使用虚拟环境

以 Win11 举例,以管理员打开 cmd 后,进入 oneforall 所在的目录,然后执行以下命令

python -m venv oneforall_env #创建一个虚拟环境。
oneforall_env\Scripts\activate #进入oneforall使用的虚拟环境,之后每次使用需执行这条命令。
pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/ #通过镜像安装依赖。
  1. 简单例子

方式一:使用默认字典扫描

python oneforall.py --target 域名 run

python oneforall.py --target https://www.baidu.com run

方式二:使用自定义字典扫描

python oneforall.py --target 域名 --wordlist=字典完整路径\字典文件完整名称 run
posted @ 2026-02-05 23:26  CloverChu  阅读(17)  评论(0)    收藏  举报