本项目最新版本

附注:此页面使用wsl构建不可行

安装配置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找到:

pic

pic

3.Docker 安装

Docker -> 虚拟化容器技术。
Docker基于镜像,可以秒级启动各种容器。每一种容器都是一个完整的运行环境,容器之间互相隔离。

  1. 官网地址

  2. 公共仓库

  3. 安装文档

  4. 下载Docker Desktop安装程序:

  1. 运行安装程序:

    • 双击下载的Docker Desktop安装文件。
    • 在安装向导中,你可以根据个人喜好勾选是否希望建立Docker Desktop的快捷方式或者是否希望Docker Desktop随Windows启动等选项。
  2. 完成安装并重启:

    • 完成安装向导后,重启计算机确保设置正确应用。
  3. 启动Docker Desktop:

  4. 配置Docker设置:

    • 你可以右键点击系统托盘中的Docker图标,选择“Settings”来调整Docker的配置,如更改镜像存储位置、设置代理服务器等。

国内网络环境拉不下镜像的话就配置别的源
pic

pic

我用的这几个镜像站
配置环境要慎重

我的配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{
"builder": {
"gc": {
"defaultKeepStorage": "20GB",
"enabled": true
}
},
"experimental": false,
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://huecker.io",
"https://dockerhub.timeweb.cloud",
"https://noohub.ru"
]
}
  1. 通过命令行界面测试Docker安装:

    • 打开命令提示符、Powershell或任何你喜欢的终端。
    • 输入命令 docker --version 来检查Docker版本,确保它已正确安装。
    • 运行 docker run hello-world 来下载一个测试镜像,并在容器中运行,这可以验证Docker Daemon是否已正确启动并且可以创建容器。
      pic

环境安装

准备材料

1 安装Wireshark和特定版本的LUA

linux的python版本要为3.10

1
2
sudo apt-get update && sudo apt-get upgrade
sudo apt-get install lua5.2 liblua5.2-dev wireshark python3.10

2 更改权限并复制Lunatic Python LUA ⇔ Python桥接二进制文件

python.so为文章最开始编译得来的

1
2
sudo chmod +x python.so
cp python.so /usr/local/lib/lua/5.2/

关于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版本
pic

查找你的Python版本

1
ldconfig -p | grep python

这条命令会列出系统中所有可用的Python库路径。你需要找到与你的Python版本相对应的路径。

准备编译(构建)

根据上一步输出的Python版本信息来配置CMake:

1
2
cmake -B./build -H. -DPYTHON_INCLUDE_DIR=/usr/include/python3.10 \
-DPYTHON_LIBRARY=/usr/lib/x86_64-linux-gnu/libpython3.10.so

使用的是Python 3.10

编译(构建)

1
cmake --build ./build

使用

定位二进制文件

构建完成后,你会在 build/bin/ 目录下找到两个重要的文件:

  • python.so 用于在Lua中调用Python
  • lua.so 用于在Python中调用Lua
  • 找不到直接搜

pic

然后把编译好的文件移到论文提到的目录下(见上文
![pic](./C:/Users/Think/Desktop/大学项目其三/环境安装/Pasted image 20241014220542.png)

3 克隆LUA解码器和PYDEVP2P项目

1
2
git clone https://github.com/jmkemp20/lua-devp2p-wireshark-dissector.git
git clone https://github.com/jmkemp20/pydevp2p.git

4 从源代码安装PYDEVP2P PIP包

1
2
3
cd pydevp2p
pip install -e .
sudo pip install -e .

5 创建Wireshark插件目录(本地用户和root)

1
2
mkdir -p ~/.local/lib/wireshark/plugins
sudo mkdir -p /usr/local/lib/wireshark/plugins

Step 6) 符号链接或复制.lua解码器文件到Wireshark插件目录

1
2
3
4
ln -s <location of cloned dissector>/rlpx.lua ~/.local/lib/wireshark/plugins/rlpx.lua
ln -s <location of cloned dissector>/discovery.lua ~/.local/lib/wireshark/plugins/discovery.lua
sudo ln -s <location of cloned dissector>/rlpx.lua /usr/local/lib/wireshark/plugins/rlpx.lua
sudo ln -s <location of cloned dissector>/discovery.lua /usr/local/lib/wireshark/plugins/discovery.lua

可以直接复制这些.lua文件而不是创建符号链接
终端里找不到文件用文件资源管理器搜

pic

好的,你提供的步骤是安装自定义的 Go Ethereum 客户端。以下是详细的步骤来从头开始安装和运行自定义的 Go Ethereum 客户端:

Live GETH Docker Startup

Step 1) 确保Docker和Docker Compose已安装并正在运行

检查Docker版本:

1
docker --version

pic

检查Docker Compose版本:

1
docker-compose --version

pic

Step 2) 克隆GETH-Docker存储库

1
2
git clone https://github.com/jmkemp20/geth-docker.git
cd geth-docker

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
2
3
4
docker-compose up -d geth-ubuntu-bootnode
docker-compose up -d geth-client-1
docker-compose up -d geth-client-2
docker-compose up -d geth-client-3

pic


接下来新开一个命令行窗口来做

论文原文操作:

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
2
cd go-ethereum
make geth

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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 下载 Go 1.20
wget https://mirrors.aliyun.com/golang/go1.20.6.linux-amd64.tar.gz

# 解压并安装
sudo tar -C /usr/local -xzf go1.20.6.linux-amd64.tar.gz

# 设置环境变量
nano ~/.bashrc
# 或者
nano ~/.zshrc

# 添加以下内容
export GOROOT=/usr/local/go
export GOPATH=$HOME/go
export PATH=$GOPATH/bin:$GOROOT/bin:$PATH

# 使配置生效
source ~/.bashrc
# 或者
source ~/.zshrc

# 验证 Go 版本
go version

编译 geth 或所有工具

进入 go-ethereum 目录并编译 geth 或所有工具。

1
2
3
4
5
6
7
8
9
10
11
12
13
cd go-ethereum

# 清理 Go 模块缓存
go clean -modcache

# 更新 Go 模块
go mod tidy

# 编译 geth
make geth

# 如果你想编译所有工具
make all

如果没猜错的话国内网络环境go下载依赖会卡住
pic
卡在这里

我看的教程

解决 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
2
3
4
5
# 如果 geth 在 PATH 中
geth

# 如果 geth 不在 PATH 中
./build/bin/geth

成功安装并运行自定义的 Go Ethereum 客户端

pic


最后的截图

pic

pic