添加Python模块
Python 有一个专门用于安装和管理 Python 包的包管理器,称为 pip(Pip Installs Packages)。由于我们在这里使用 Python 3,因此您将需要 Python 3 的 pip 来下载和安装软件包。默认情况下应包含 Pip,但如果需要,可以输入以下命令从存储库下载并安装 pip:apt-get install python3-pip
现在,要从 PyPI 下载模块,您只需输入:pip3 install <功能包名>
当您下载这些包时,它们会自动放置在 /usr/local//lib/<python-version>/dist-packages
目录中。如果您不确定软件包在系统上的位置(有时不同的 Linux 发行版使用不同的目录),您可以输入 pip3,后跟 show 和软件包名称,如下所示:pip3 show <功能包名>
作为使用 pip 的替代方法,您可以直接从站点下载软件包(确保下载到正确的目录),解压它,然后进入对应目录运行以下命令:python3 setup.py install
,这将安装尚未安装的解压包。
安装第三方模块
要安装由 Python 社区的其他成员创建的第三方模块(而不是官方发布的 Python 包),您只需使用 wget 从在线存储的任何位置下载它,解压缩该模块,进入该模块目录,然后运行 python setup.py install
命令。
开始使用 Python 编写脚本
变量
变量是编程中最基本的数据类型之一。 简单来说,变量是与特定值关联的名称,这样每当您在程序中使用该名称时,它就会调用关联的值。
它的工作方式是变量名指向存储在内存位置的数据,该数据可能包含任何类型的值,例如整数、实数、字符串、浮点数、布尔值(真或假陈述)、列表、 或字典。
为了熟悉基础知识,我们创建一个简单的脚本,并将其保存为 hackers-arise_greetings.py。
#! /usr/bin/python3
name="OccupyTheWeb"
print("Greetings to " + name + " from Hackers-Arise. The Best Place to Learn Hacking!")
第一行只是告诉你的系统你希望它使用Python解释器来运行这个程序,而不是任何其他语言。 第二行定义一个名为 name 的变量并为其分配一个值(在本例中为“OccupyTheWeb”)。 您应该将此值更改为您自己的名字。 该变量的值采用字符串字符数据格式,这意味着内容用引号引起来并被视为文本。 您也可以将数字放入字符串中,它们将被视为文本,因为您将无法在数值计算中使用它们。
第三行创建一个 print() 语句,将 Greetings 与 name 变量中的值连接起来,后跟 Hackers-Arise 中的文本。 print() 语句将在屏幕上的括号内显示您传递给它的任何内容。
现在,在运行此脚本之前,您需要授予自己执行它的权限。 我们需要 chmod 命令来做到这一点。chmod 755 hackers-arise_greetings.py
要运行此脚本,请输入以下内容:./hackers-arise_greetings.py
注释
解释器会忽略注释。 这意味着解释器会跳过任何指定为注释的行,解释器会继续执行,直到遇到合法的代码行。 Python 使用 #
符号来指定单行注释的开始。 如果要编写多行注释,可以在注释部分的开头和结尾使用三个双引号 (``````)。
函数
Python 中的函数是执行特定操作的代码段。 例如,您之前使用的 print() 语句是一个显示您传递给它的任何值的函数。Python 有许多可以立即导入和使用的内置函数。 其中大多数可以在 Kali Linux 中默认安装的 Python 中使用,但还有更多可以从可下载的库中获取。 让我们看一下您可以使用的数千个功能中的几个:
exit()
– 退出程序。float()
– 以浮点数形式返回其参数。help()
– 显示有关其参数指定的对象的帮助。int()
– 返回其参数的整数部分(截断)。len()
– 返回列表或字典中的元素数量。max()
– 返回其参数(列表)中的最大值。open()
– 以参数指定的模式打开文件。range()
– 返回由其参数指定的两个值之间的整数列表。sorted()
– 接受一个列表作为参数并按顺序返回它及其元素。type()
– 返回其参数的类型(例如,int、文件、方法、函数)。
列表
Python 中的列表是可迭代的,这意味着当您一直运行列表时,列表可以提供连续的元素。
模块
模块只是保存到单独文件中的一段代码,您可以在程序中根据需要多次使用它,而无需再次将其全部键入。 如果您想使用模块或模块中的任何代码,则需要导入它。 如前所述,使用标准和第三方模块是 Python 强大的关键功能之一。 如果我们想使用之前安装的模块,我们可以将以下行添加到脚本中:import 模块名
面向对象编程(OOP)
下图显示了 OOP 背后的基本概念:该语言的主要工具是对象,它具有属性和状态形式的属性,以及由对象执行或在对象上执行的操作的方法。
Python 中的网络通信
构建 TCP 客户端
我们将使用套接字模块在 Python 中创建网络连接。 Python 附带了一个用于多种任务的模块库。 在这种情况下,我们需要套接字模块来创建 TCP 连接。 让我们看看它的实际效果。
#! /usr/bin/python3
import socket
s = socket.socket()
s.connect(("127.0.0.1", 22))
answer = s.recv(1024)
print(answer)
s.close()
首先,我们导入套接字模块,以便我们可以使用它的功能和工具。 在这里,我们将使用套接字模块中的网络工具来为我们处理网络连接。 套接字为两个计算机节点提供了一种相互通信的方式。 通常,一个是服务器,一个是客户端。
然后我们创建一个名为 s 的新对象,从套接字模块的套接字类实例化。这样,我们现在可以使用该对象执行进一步的操作,例如连接和读取数据。
然后,我们使用套接字模块中的 connect()
方法来建立到特殊 IP 和端口的网络连接。 请记住,方法是可用于特定对象的函数。
这里,我们使用接收方法recv
从套接字读取1024字节的数据并将它们存储在名为answer
的变量中;这 1024 字节将包含横幅信息。 然后我们使用 print()
函数将该变量的内容打印到屏幕上,以查看通过该套接字传递了哪些数据,从而使我们能够监视它! 在最后一行,我们关闭连接。
创建 TCP 监听器
下面所示的 Python 脚本中,您将在系统的任何端口上创建一个套接字,当有人连接到该套接字时,该套接字会收集有关连接器系统的关键信息。 输入脚本并将其保存为 tcp_server.py。 确保使用 chmod 授予自己执行权限。
#! /usr/bin/python3
import socket
TCP_IP = "192.168.181.190"
TCP_PORT = 6996
BUFFER_SIZE = 100
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((TCP_IP, TCP_PORT))
s.listen(1)
conn, addr = s.accept()
print('Connection address: ', addr )
while True:
data=conn.recv(BUFFER_SIZE)
if not data:
break
print("Received data: ", data)
conn.send(data) #echo
conn.close()
我们声明我们希望脚本使用 Python 解释器运行,然后像以前一样导入套接字模块,这样我们就可以使用它的功能。 然后,我们定义变量来保存 TCP/IP 地址、要侦听的端口以及我们想要从连接系统捕获的数据的缓冲区大小的信息。
我们定义套接字并使用刚刚创建的变量将套接字绑定到 IP 地址和端口。 我们使用套接字库中的listen()
方法告诉套接字进行监听。
然后,我们使用套接字库的accept
方法捕获连接系统的IP地址和端口,并将该信息打印到屏幕上,以便用户可以看到它。 注意这里的 while True:
语法;
最后,我们将来自连接系统的信息放入缓冲区,打印它,然后关闭连接。
字典、循环和控制语句
字典
字典以无序对的形式保存信息,其中每对都包含一个键和一个关联的值。 我们可以使用字典来存储项目列表,并给每个项目一个标签,以便我们可以单独使用和引用该项目。 例如,我们可以使用字典来存储用户 ID 及其关联名称,或者存储与特定主机关联的已知漏洞。 Python 中的字典就像其他语言中的关联数组。
与列表一样,字典是可迭代的,这意味着我们使用控制结构(例如 for 语句)来遍历整个字典,将字典的每个元素分配给一个变量,直到到达字典的末尾。
创建字典的语法如下:dict = {key1:value1, key2:value2, key3:value3...}
请注意,对于字典,您可以使用大括号并用逗号分隔项目。 您可以包含任意数量的键值对。
控制语句
控制语句允许您的代码根据某些条件做出决策。 Python 中有多种方法可以控制脚本的流程。 让我们看看 Python 中的一些结构。
if 语句
Python 中的 if 结构与包括 bash 在内的许多其他编程语言一样,用于检查条件是否为真,并为每个场景运行不同的代码集。 语法如下:
if conditional expression:
run this code if the expression is true
在 Python 中,引入控制块的行必须以冒号结尾,并且控制块必须缩进。 这个缩进向解释器标识了控制块。 下一个未缩进的语句位于控制块之外,因此不是 if 语句的一部分,这就是 Python 在不满足条件时知道跳到哪里的方式。
if…else
if conditional expression:
*** # run this code when the condition is met
else:
*** # run this code when the condition is not met
循环
循环是 Python 中另一个非常有用的结构。 循环使程序员能够根据值或条件多次重复代码块。 两种循环是 while 和 for。
while 循环
while 循环计算布尔表达式(只能计算为 true 或 false 的表达式),并在表达式计算为 true 时继续执行。 例如,我们可以创建一个代码片段,打印从 1 到 10 的每个数字,然后退出循环,如下所示:
count = 1
while (count <= 10):
print(count)
count += 1
for 循环
for 循环可以每次通过循环将列表、字符串、字典或其他可迭代结构中的值分配给索引变量,从而允许我们逐个使用结构中的每一项。 例如,我们可以使用 for 循环来尝试密码,直到找到匹配项,如下所示:
for password in passwords:
attempt = connect(username, password)
if attempt == "230":
print("Password found: " + password)
sys.exit(0)