(旧)创建一个网络包解码器分析DEVP2P协议
Last Update:
Page View: loading...
link 本项目最新版本, https://zhongye1.github.io/posts/1104.html, https://pic1.zhimg.com/80/v2-593dd0a3b84d023b3827b97e81e0242a_720w.webp
安装配置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 开发环境见微软官方文档
设置 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 |
|
2 更改权限并复制Lunatic Python LUA ⇔ Python桥接二进制文件
python.so为文章最开始编译得来的
1 |
|
关于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 |
|
确保安装了LUA 5.3
通过运行 lua5.3
来检查是否已经安装了正确的LUA版本
查找你的Python版本
1 |
|
这条命令会列出系统中所有可用的Python库路径。你需要找到与你的Python版本相对应的路径。
准备编译(构建)
根据上一步输出的Python版本信息来配置CMake:
1 |
|
使用的是Python 3.10
编译(构建)
1 |
|
使用
定位二进制文件
构建完成后,你会在 build/bin/
目录下找到两个重要的文件:
python.so
用于在Lua中调用Pythonlua.so
用于在Python中调用Lua- 找不到直接搜
然后把编译好的文件移到论文提到的目录下(见上文
3 克隆LUA解码器和PYDEVP2P项目
1 |
|
4 从源代码安装PYDEVP2P PIP包
1 |
|
5 创建Wireshark插件目录(本地用户和root)
1 |
|
Step 6) 符号链接或复制.lua解码器文件到Wireshark插件目录
1 |
|
可以直接复制这些.lua文件而不是创建符号链接。
终端里找不到文件用文件资源管理器搜
好的,你提供的步骤是安装自定义的 Go Ethereum 客户端。以下是详细的步骤来从头开始安装和运行自定义的 Go Ethereum 客户端:
Live GETH Docker Startup
Step 1) 确保Docker和Docker Compose已安装并正在运行
检查Docker版本:
1 |
|
检查Docker Compose版本:
1 |
|
Step 2) 克隆GETH-Docker存储库
1 |
|
Step 3) 构建自定义docker镜像
1 |
|
Step 4) 启动路由器容器
1 |
|
Step 5) 打开Wireshark并连接到网络接口
1 |
|
Step 6) 依次启动每个GETH节点/客户端容器
1 |
|
接下来新开一个命令行窗口来做
论文原文操作:
7.5 Installing the Custom GO Ethereum Client from Scratch
Step 1) 克隆自定义GO Ethereum源代码
1 |
|
Step 2) 编译GETH或其他所有GO Ethereum工具
编译GETH是个大坑,出问题的话可以看文档后面有讲
1 |
|
Step 3) 运行GETH
文档是
1 |
|
就行,看终端geth编译完后的输出来定,我这边的是
1 |
|
不出问题的话终端没报错这里就成功了(一般不太可能,出问题见下
我的操作:
编译geth
1. 克隆自定义的 Go Ethereum 源代码
克隆自定义的 Go Ethereum 源代码仓库。
1 |
|
2. 安装 Geth 或所有 Go Ethereum 工具
进入克隆的 go-ethereum
目录,并编译 geth
或所有工具。
安装 Go 1.20(版本好像会影响编译,翻了下issue,我当时用的1.20
确保你已经安装了 Go 1.20 或更高版本。如果没有,请按照以下步骤安装:
1 |
|
编译 geth
或所有工具
进入 go-ethereum
目录并编译 geth
或所有工具。
1 |
|
如果没猜错的话国内网络环境go下载依赖会卡住
卡在这里
我看的教程
解决 go get golang.org/x 包失败
GOPROXY
我们知道从Go 1.11
版本开始,官方支持了go module
包依赖管理工具。
其实还新增了GOPROXY
环境变量。如果设置了该变量,下载源代码时将会通过这个环境变量设置的代理地址,而不再是以前的直接从代码库下载。这无疑对我等无法科学上网的开发良民来说是最大的福音。
更可喜的是,goproxy.io 这个开源项目帮我们实现好了我们想要的。该项目允许开发者一键构建自己的GOPROXY
代理服务。同时,也提供了公用的代理服务https://goproxy.io
,我们只需设置该环境变量即可正常下载被墙的源码包了:
1 |
|
也可以通过置空这个环境变量来关闭,export GOPROXY=
。
对于 Windows 用户,可以在 PowerShell
中设置:
1 |
|
我这边这样做能正常下载
3. 运行 Geth
编译完成后,你可以运行 geth
。确保 geth
可执行文件在你的 PATH
中,或者直接在 go-ethereum/build/bin
目录下运行它。
1 |
|
成功安装并运行自定义的 Go Ethereum 客户端
最后的截图
g)