Python黑帽子第二版读书笔记

Python黑帽子第二版读书笔记

本文是Python黑帽子 黑客与渗透测试编程之道的读书笔记

Part 1. 设置Python环境

kali&python环境

我并没有选择书中推荐的虚拟机,而是在树莓派上烧录了kali作为实验环境。

新版本kali系统中已经预置了python3,但是为了环境隔离还是按照书中所讲创建了虚拟环境。

sudo apt-get install python3-venv#安装虚拟环境工具
mkdir env
cd env
python3 -m venv venv3#建立虚拟环境
source /venv3/vin/activate#激活环境

然后一个python环境就创建好并激活啦,之所以没用anaconda是因为anaconda太庞大了,树莓派内存有限。

IDE

我选择了vscode作为IDE,由于换了源无法直接apt-get安装,所以就直接从官网下载了安装包,然后用apt-get安装。

apt-get install -f xxxxx.def

但是大部分时间下我选择直接用vim写代码,所以需要对vim做一些简单的配置,kali自带一个简单配置过的vim,设置了代码高亮和自动缩进,只需要再添加一个tab代码自动补全的插件就可以。

具体怎么做参考这篇博客,但是有一点需要注意,kali默认使用的是全局vim设置,位置在/etc/vim/vimrc,直接把需要加在~/.vimrc里的内容加在这里面就可以,不要重新建一个vimrc配置,不然还需要自己配置代码高亮和自动缩进。

基础的网络编程工具

这段前半部分几乎就是网络编程的内容,还好我学过网络编程。

TCP客户端和UDP客户端的区别在于TCP是基于连接的,而UDP是无连接的。

TCP客户端示例代码:

import socket
target_host = "www.google.com"# 国内谷歌上不去就换成百度的www.baidu.com
target_port = 80 #http端口

# 建立socket连接,socket.AF_INET表示使用IPv4地址或主机名,SOCK_STREAM代表使用TCP协议
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 建立连接参数为目标主机的地址和端口,80端口为http协议对应端口
client.connect(client.connect(target_host, target_port))
# 发送数据,这里是以bytes类型发送了HTTP的请求头
client.send(b"GET / HTTP/1.1\r\nHost: goole.com\r\n\r\n")
# 接收反馈数据,4096是buf长度也就是一次接收数据的最大长度
response = client.recv(4096)
# 打印返回的数据并关闭socket连接
print(response.decode())
client.close

UDP客户端示例代码:

import socket
target_host = "127.0.0.1"# 本机
target_port = 9997 # 随便设的

# 建立socket连接,SOCK_DGRAM代表使用UDP协议
client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 用的是UDP协议,不需要先建立链接再发送数据,所以这里没有connect这一步
# 发送数据,使用sendto函数,除了要发送的数据外还需要给出目标主机的地址和端口
client.sendto(b"AAABBBCCC", (target_host, target_prot))
# 使用recvfrom接收反馈数据和对方主机地址
data, addr = client.recvfrom(4096)
# 打印返回的数据并关闭socket连接
print(data.decode())
client.close

TCP服务端代码:

import socket
import threading

IP = '0.0.0.0'
PORT = 9998

def main():
  server = socket.socket(socket.AF_INET, socket.sock_STREAM)
  # 指定服务器监听的地址和端口
  server.bind((IP, PORT))
  #最大连接数为5
  server.listen(5)
  # 这个格式是python3.6内加入的,print(f'{xxx}')可以将变量嵌入输出
  print(f'[*] Listening on {IP}:{PORT}')

  while True:
    # accept函数监听连接,收到连接后返回一个套接字和地址,地址中包含ip地址和端口
    client, address = server.accept()
    print(f'[*] Accepted connection form {address[0]}:{address[1]}')
    # 建立一个线程处理连接,Thread传入线程执行的函数句柄和参数
    client_handler = threading.Thread(target=handle_client, args=(client,))
    client_handler.start()

# 线程内调用的函数,接收信息并返回一个反馈
def handle_client(client_socket):
  with client_sock as sock:
    request = sock.recv(1024)
    print(f'[*] Received: {request.decode("utf-8")}')
    sock.send(b'ACK')

if __name__ == '__main__':
  main()

如果要测试的话,需要修改原书tcp客户端的目标主机和端口,主机修改为127.0.0.1,端口修改为9998(服务器的监听端口),UDP服务端原书没写。

Python黑帽子第二版读书笔记

本文是Python黑帽子 黑客与渗透测试编程之道的读书笔记

Part 1. 设置Python环境

kali&python环境

我并没有选择书中推荐的虚拟机,而是在树莓派上烧录了kali作为实验环境。

新版本kali系统中已经预置了python3,但是为了环境隔离还是按照书中所讲创建了虚拟环境。

sudo apt-get install python3-venv#安装虚拟环境工具
mkdir env
cd env
python3 -m venv venv3#建立虚拟环境
source /venv3/vin/activate#激活环境

然后一个python环境就创建好并激活啦,之所以没用anaconda是因为anaconda太庞大了,树莓派内存有限。

IDE

我选择了vscode作为IDE,由于换了源无法直接apt-get安装,所以就直接从官网下载了安装包,然后用apt-get安装。

apt-get install -f xxxxx.def

但是大部分时间下我选择直接用vim写代码,所以需要对vim做一些简单的配置,kali自带一个简单配置过的vim,设置了代码高亮和自动缩进,只需要再添加一个tab代码自动补全的插件就可以。

具体怎么做参考这篇博客,但是有一点需要注意,kali默认使用的是全局vim设置,位置在/etc/vim/vimrc,直接把需要加在~/.vimrc里的内容加在这里面就可以,不要重新建一个vimrc配置,不然还需要自己配置代码高亮和自动缩进。

基础的网络编程工具

这段前半部分几乎就是网络编程的内容,还好我学过网络编程。

TCP客户端和UDP客户端的区别在于TCP是基于连接的,而UDP是无连接的。

TCP客户端示例代码:

import socket
target_host = "www.google.com"# 国内谷歌上不去就换成百度的www.baidu.com
target_port = 80 #http端口

# 建立socket连接,socket.AF_INET表示使用IPv4地址或主机名,SOCK_STREAM代表使用TCP协议
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 建立连接参数为目标主机的地址和端口,80端口为http协议对应端口
client.connect(client.connect(target_host, target_port))
# 发送数据,这里是以bytes类型发送了HTTP的请求头
client.send(b"GET / HTTP/1.1\r\nHost: goole.com\r\n\r\n")
# 接收反馈数据,4096是buf长度也就是一次接收数据的最大长度
response = client.recv(4096)
# 打印返回的数据并关闭socket连接
print(response.decode())
client.close

UDP客户端示例代码:

import socket
target_host = "127.0.0.1"# 本机
target_port = 9997 # 随便设的

# 建立socket连接,SOCK_DGRAM代表使用UDP协议
client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 用的是UDP协议,不需要先建立链接再发送数据,所以这里没有connect这一步
# 发送数据,使用sendto函数,除了要发送的数据外还需要给出目标主机的地址和端口
client.sendto(b"AAABBBCCC", (target_host, target_prot))
# 使用recvfrom接收反馈数据和对方主机地址
data, addr = client.recvfrom(4096)
# 打印返回的数据并关闭socket连接
print(data.decode())
client.close

TCP服务端代码:

import socket
import threading

IP = '0.0.0.0'
PORT = 9998

def main():
  server = socket.socket(socket.AF_INET, socket.sock_STREAM)
  # 指定服务器监听的地址和端口
  server.bind((IP, PORT))
  #最大连接数为5
  server.listen(5)
  # 这个格式是python3.6内加入的,print(f'{xxx}')可以将变量嵌入输出
  print(f'[*] Listening on {IP}:{PORT}')

  while True:
    # accept函数监听连接,收到连接后返回一个套接字和地址,地址中包含ip地址和端口
    client, address = server.accept()
    print(f'[*] Accepted connection form {address[0]}:{address[1]}')
    # 建立一个线程处理连接,Thread传入线程执行的函数句柄和参数
    client_handler = threading.Thread(target=handle_client, args=(client,))
    client_handler.start()

# 线程内调用的函数,接收信息并返回一个反馈
def handle_client(client_socket):
  with client_sock as sock:
    request = sock.recv(1024)
    print(f'[*] Received: {request.decode("utf-8")}')
    sock.send(b'ACK')

if __name__ == '__main__':
  main()

如果要测试的话,需要修改原书tcp客户端的目标主机和端口,主机修改为127.0.0.1,端口修改为9998(服务器的监听端口),UDP服务端原书没写。


文章作者: keevinzha
版权声明: 咳咳想白嫖文章?本文章著作权归作者所有,任何形式的转载都请注明出处。 https://www.keevinzha.com !
  目录