(旧)创建一个网络包解码器分析DEVP2P协议
安装配置WSL2(ubuntu20.04)
Windows Subsystem for Linux(简称WSL),Windows下的Linux子系统,是一个在Windows 10上能够运行原生Linux二进制可执行文件(ELF格式)的兼容层。它是由微软与Canonical公司合作开发,其目标是使纯正的Ubuntu、Debian等映像能下载和解压到用户的本地计算机,并且映像内的工具和实用工具能在此子系统上原生运行。
1.安装Windows Terminal
Window Terminal 安装以及使用(2021最新) - 知乎
一个目前在用的windows命令行工具
可以直接从 Microsoft Store 下载安装,而且Github仓库上发布有内部版本。
2.安装wsl
Windows 10 安装配置WSL2(ubuntu20.04)教程 超详细_win10安装wsl2-CSDN博客
对于windows10版本可以直接命令符安装
1 | wsl --install |
设置 WSL 开发环境见微软官方文档
设置 WSL 开发环境 | Microsoft Learn
完成后打开Windows Terminal找到:
3.Docker 安装
Docker -> 虚拟化容器技术。
Docker基于镜像,可以秒级启动各种容器。每一种容器都是一个完整的运行环境,容器之间互相隔离。
-
下载Docker Desktop安装程序:
- 访问Docker官网下载页面:https://www.docker.com/get-started/
- 选择对应版本点击下载安装程序。
- 没猜错的话应该被墙了可以找我要安装包
-
运行安装程序:
- 双击下载的Docker Desktop安装文件。
- 在安装向导中,你可以根据个人喜好勾选是否希望建立Docker Desktop的快捷方式或者是否希望Docker Desktop随Windows启动等选项。
-
完成安装并重启:
- 完成安装向导后,重启计算机确保设置正确应用。
-
启动Docker Desktop:
- 在重启后,运行Docker Desktop。当它启动时,Docker图标会出现在系统托盘中。
- 系统托盘中的Docker图标表明Docker正在运行,并可能需要一点时间来启动服务。
- 电脑要开VM虚拟化
- Windows 10 |VMware开启虚拟化的最全面说明_vmware虚拟化引擎-CSDN博客
- 开VM时BIOS不懂的不要瞎搞
-
配置Docker设置:
- 你可以右键点击系统托盘中的Docker图标,选择“Settings”来调整Docker的配置,如更改镜像存储位置、设置代理服务器等。
国内网络环境拉不下镜像的话就配置别的源
我用的这几个镜像站
配置环境要慎重
我的配置文件
1 | { |
-
通过命令行界面测试Docker安装:
- 打开命令提示符、Powershell或任何你喜欢的终端。
- 输入命令
docker --version
来检查Docker版本,确保它已正确安装。 - 运行
docker run hello-world
来下载一个测试镜像,并在容器中运行,这可以验证Docker Daemon是否已正确启动并且可以创建容器。
环境安装
准备材料
- Lua-devp2p-wireshark-dissector: GitHub链接
- PYDEVP2P: GitHub链接
- Lunatic-Python: GitHub链接
- Go-Ethereum: GitHub链接
- GETH-Docker: GitHub链接
1 安装Wireshark和特定版本的LUA
linux的python版本要为3.10
1 | sudo apt-get update && sudo apt-get upgrade |
2 更改权限并复制Lunatic Python LUA ⇔ Python桥接二进制文件
python.so为文章最开始编译得来的
1 | sudo chmod +x python.so |
关于python.so是从哪来的:
python在linux编译后的文件为.so
这个由编译Lunatic-Python: GitHub链接得来
不会编译的可以找我要我编译好的(
如何编译见项目文档:
Lunatic Python 是一个双向桥接项目,它允许Python和Lua两种语言互相通信。这意味着你可以在Lua中调用Python代码,也可以在Python中调用Lua代码,甚至可以嵌套调用(如Lua中的Python再调用Lua)。这个项目的主要用途之一是为 LUA-devp2p-dissector
提供必要的工具,使其能够调用 pydevp2p
中的函数。
项目起源
- 这个项目是一个fork版本,原始项目来自
labix-lunatic-python
。 - 另一个相关的版本由
bastibe
维护。
开始使用
克隆仓库
1 | git clone https://github.com/jmkemp20/lunatic-python.git && cd lunatic-python |
确保安装了LUA 5.3
通过运行 lua5.3
来检查是否已经安装了正确的LUA版本
查找你的Python版本
1 | ldconfig -p | grep python |
这条命令会列出系统中所有可用的Python库路径。你需要找到与你的Python版本相对应的路径。
准备编译(构建)
根据上一步输出的Python版本信息来配置CMake:
1 | cmake -B./build -H. -DPYTHON_INCLUDE_DIR=/usr/include/python3.10 \ |
使用的是Python 3.10
编译(构建)
1 | cmake --build ./build |
使用
定位二进制文件
构建完成后,你会在 build/bin/
目录下找到两个重要的文件:
python.so
用于在Lua中调用Pythonlua.so
用于在Python中调用Lua- 找不到直接搜
然后把编译好的文件移到论文提到的目录下(见上文
![pic](./C:/Users/Think/Desktop/大学项目其三/环境安装/Pasted image 20241014220542.png)
3 克隆LUA解码器和PYDEVP2P项目
1 | git clone https://github.com/jmkemp20/lua-devp2p-wireshark-dissector.git |
4 从源代码安装PYDEVP2P PIP包
1 | cd pydevp2p |
5 创建Wireshark插件目录(本地用户和root)
1 | mkdir -p ~/.local/lib/wireshark/plugins |
Step 6) 符号链接或复制.lua解码器文件到Wireshark插件目录
1 | ln -s <location of cloned dissector>/rlpx.lua ~/.local/lib/wireshark/plugins/rlpx.lua |
可以直接复制这些.lua文件而不是创建符号链接。
终端里找不到文件用文件资源管理器搜
好的,你提供的步骤是安装自定义的 Go Ethereum 客户端。以下是详细的步骤来从头开始安装和运行自定义的 Go Ethereum 客户端:
Live GETH Docker Startup
Step 1) 确保Docker和Docker Compose已安装并正在运行
检查Docker版本:
1 | docker --version |
检查Docker Compose版本:
1 | docker-compose --version |
Step 2) 克隆GETH-Docker存储库
1 | git clone https://github.com/jmkemp20/geth-docker.git |
Step 3) 构建自定义docker镜像
1 | ./build-dockers.sh |
Step 4) 启动路由器容器
1 | docker-compose up -d bridge-router |
Step 5) 打开Wireshark并连接到网络接口
1 | sudo wireshark |
Step 6) 依次启动每个GETH节点/客户端容器
1 | docker-compose up -d geth-ubuntu-bootnode |
接下来新开一个命令行窗口来做
论文原文操作:
7.5 Installing the Custom GO Ethereum Client from Scratch
Step 1) 克隆自定义GO Ethereum源代码
1 | git clone https://github.com/jmkemp20/go-ethereum.git |
Step 2) 编译GETH或其他所有GO Ethereum工具
编译GETH是个大坑,出问题的话可以看文档后面有讲
1 | cd go-ethereum |
Step 3) 运行GETH
文档是
1 | geth |
就行,看终端geth编译完后的输出来定,我这边的是
1 | ./build/bin/geth |
不出问题的话终端没报错这里就成功了(一般不太可能,出问题见下
我的操作:
编译geth
1. 克隆自定义的 Go Ethereum 源代码
克隆自定义的 Go Ethereum 源代码仓库。
1 | git clone https://github.com/jmkemp20/go-ethereum.git |
2. 安装 Geth 或所有 Go Ethereum 工具
进入克隆的 go-ethereum
目录,并编译 geth
或所有工具。
安装 Go 1.20(版本好像会影响编译,翻了下issue,我当时用的1.20
确保你已经安装了 Go 1.20 或更高版本。如果没有,请按照以下步骤安装:
1 | # 下载 Go 1.20 |
编译 geth
或所有工具
进入 go-ethereum
目录并编译 geth
或所有工具。
1 | cd go-ethereum |
如果没猜错的话国内网络环境go下载依赖会卡住
卡在这里
我看的教程
解决 go get golang.org/x 包失败
GOPROXY
我们知道从Go 1.11
版本开始,官方支持了go module
包依赖管理工具。
其实还新增了GOPROXY
环境变量。如果设置了该变量,下载源代码时将会通过这个环境变量设置的代理地址,而不再是以前的直接从代码库下载。这无疑对我等无法科学上网的开发良民来说是最大的福音。
更可喜的是,goproxy.io 这个开源项目帮我们实现好了我们想要的。该项目允许开发者一键构建自己的GOPROXY
代理服务。同时,也提供了公用的代理服务https://goproxy.io
,我们只需设置该环境变量即可正常下载被墙的源码包了:
1 | export GOPROXY=https://goproxy.io |
也可以通过置空这个环境变量来关闭,export GOPROXY=
。
对于 Windows 用户,可以在 PowerShell
中设置:
1 | $env:GOPROXY = "https://goproxy.io" |
我这边这样做能正常下载
3. 运行 Geth
编译完成后,你可以运行 geth
。确保 geth
可执行文件在你的 PATH
中,或者直接在 go-ethereum/build/bin
目录下运行它。
1 | # 如果 geth 在 PATH 中 |
成功安装并运行自定义的 Go Ethereum 客户端