[[Geth]] 存在一个服务器,然后有多个节点 每个节点运行一个geth客户端
geth的相关文件
需要/root/Work/PraviteChain 这个地址下,保存日志等信息
然后通过python写出一些脚本来进行测试 环境
[root@gzdx-bcn-ordinary-ethnode-v3-202 ~]# tcpdump --version
tcpdump version 4.9.2
libpcap version 1.5.3
OpenSSL 1.0.2k-fips 26 Jan 2017
[root@gzdx-bcn-ordinary-ethnode-v3-202 ~]# python3 --version
Python 3.12.3
[root@gzdx-bcn-ordinary-ethnode-v3-202 ~]# pip3 list
^[[APackage Version
------------------ ---------------
aiohappyeyeballs 2.6.1
aiohttp 3.12.15
aiosignal 1.4.0
annotated-types 0.7.0
attrs 25.3.0
bitarray 3.7.1
certifi 2025.8.3
charset-normalizer 3.4.3
ckzg 2.1.4
cytoolz 1.0.1
distlib 0.4.0
eth_abi 5.2.0
eth-account 0.13.7
eth-hash 0.7.1
eth-keyfile 0.8.1
eth-keys 0.7.0
eth-rlp 2.2.0
eth-typing 5.2.1
eth-utils 5.3.1
filelock 3.19.1
frozenlist 1.7.0
hexbytes 1.3.1
idna 3.10
multidict 6.6.4
parsimonious 0.10.0
pip 24.0
platformdirs 4.4.0
propcache 0.3.2
pycryptodome 3.23.0
pydantic 2.11.9
pydantic_core 2.33.2
pyunormalize 16.0.0
regex 2025.9.18
requests 2.32.5
rlp 4.1.0
scapy 2.6.1
toolz 1.0.0
types-requests 2.32.4.20250913
typing_extensions 4.15.0
typing-inspection 0.4.1
urllib3 2.5.0
virtualenv 20.34.0
web3 7.13.0
websockets 15.0.1
yarl 1.20.1
[root@gzdx-bcn-ordinary-ethnode-v3-202 ~]# geth -v
Incorrect Usage. flag provided but not defined: -v
NAME:
geth - the go-ethereum command line interface
Copyright 2013-2022 The go-ethereum Authors
USAGE:
geth [options] [command] [command options] [arguments...]
VERSION:
1.10.19-stablegeth的启动
[root@gzdx-bcn-ordinary-ethnode-v3-202 ddos]# ps aux | grep geth
root 3364 0.0 0.0 112812 980 pts/2 S+ 21:06 0:00 grep --color=auto geth
root 3593 100 40.4 5090304 1568592 ? Sl Oct27 4470:38 /root/zjm/go-ethereum-1.10.19/build/bin/geth --networkid 88 --datadir . --bootnodes enr:-KO4QGcD
-b8whs2_HpRtmcN2hmQHj8gn8wS_8yKWD2TrTIA-ABr2zJrThHu5JunNDKOkFU71baaBUvTF47EaYGTdfwOGAZolWyG9g2V0aMfGhAClW42AgmlkgnY0gmlwhMp2GxCJc2VjcDI1NmsxoQOLGBK2Fz8Yu2yxcUn2Jw
tCmzqf8SChkSYzLCtbt0X6MYRzbmFwwIN0Y3CCdl-DdWRwgnZf,enr:-KO4QDbSFLV4rjhezJCIFPNdkaZEDiwI1teKtB_wJt78PTFrcTbZ2H-CerfuY9LrtEsSBwYRrAx55ngGA0k2gKY-0UeGAZolXPTHg2V0aMf
GhAClW42AgmlkgnY0gmlwhMp2AA-Jc2VjcDI1NmsxoQMma5T6azAFcVYBP5el9Q00aUo-DLFgc8kVGaoyv4NAEoRzbmFwwIN0Y3CCdl-DdWRwgnZf --nat extip:202.118.4.10 --netrestrict 202.118.0
.0/16 --http --http.port 8545 --port 30303 --http.addr 0.0.0.0 --http.api db,eth,net,web3,personal,admin,shh,txpool,debug,miner --verbosity 5 --allow-insecure-unl
ock
[root@gzdx-bcn-ordinary-ethnode-v3-202 ddos]# 排查 personal_unlockAccount 请求是否被网络拦截
- 确认远端节点监听端口(远端执行)
ss -tnlp | grep 8545,确保 HTTP/8545 在LISTEN状态且绑定外网地址。 - 基础 JSON-RPC 连通性(攻击源执行)
curl -X POST http://202.118.7.10:8545 -H 'Content-Type: application/json' --data '{"jsonrpc":"2.0","method":"web3_clientVersion","params":[],"id":1}';若此请求也超时,说明链路就被阻断。 - 抓取 personal 请求
- 远端:
tcpdump -i eth0 -n host <攻击源IP> and port 8545 -w /tmp/personal_unlock.pcap - 攻击源:
curl -X POST \ -H 'Content-Type: application/json' \ --data '{"jsonrpc":"2.0","method":"personal_unlockAccount","params":["0x地址","123",60],"id":1}' \ http://202.118.7.10:8545
- 停止 tcpdump 后用
tcpdump -r /tmp/personal_unlock.pcap -nn或 Wireshark 分析:若只见入站无出站表示 geth 未响应;若毫无记录表示被中间设备丢弃。
- 远端:
- 检查链路与 ACL:使用
traceroute -n 202.118.7.10识别路径节点,与网络团队确认是否存在拦截 POST/8545 的策略。 - 调整超时:若确认链路通但 RTT 大,可把脚本中的 HTTPProvider 超时时间从 30 秒调大(例如 120 秒),或在 curl 加
--max-time 120。
给centos安装python
#只是将python3.12.3的安装包下载到 /root目录下
cd /root
#下载最新的软件安装包
wget https://www.python.org/ftp/python/3.12.3/Python-3.12.3.tgz
#解压缩安装包
tar -xzf Python-3.12.3.tgz
#安装源码编译需要的编译环境
yum -y install gcc zlib zlib-devel libffi libffi-devel
#可以解决后期出现的方向键、删除键乱码问题,这里提前避免。
yum install readline-devel -y
#解决No module named '_bz2'
yum install bzip2-devel -y
#安装openssl之前先安装这个
yum install epel-release -y
#安装openssl11,后期的pip3安装网络相关模块需要用到ssl模块。
yum install openssl-devel openssl11 openssl11-devel -y
#设置编译FLAG,以便使用最新的openssl库
export CFLAGS=$(pkg-config --cflags openssl11)
export LDFLAGS=$(pkg-config --libs openssl11)
#进入刚解压缩的目录
cd /root/Python-3.12.3
#1.不指定python安装目录(使用默认python安装目录)
#因为:不建议加--prefix=/usr/python,这样会导致你后续pip安装的可执行文件
#(比如virtualenv)都放在/usr/python/bin而不是默认的/usr/bin里面,不能直接用,还得逐个ln
#2.使用--with-openssl=<path_to_openssl>
# 可以通过使用which openssl查看openssl的安装路径
# 我这里是/usr/bin/openssl
# 最后的指令如下
./configure --with-openssl=/usr/bin/openssl
#然后就算源码编译并安装了,时间会持续几分钟。
make
make install
#指定链接,此后我们系统的任何地方输入python3就是我们安装的
ln -s /usr/local/bin/python3.12 /usr/bin/python3
ln -s /usr/local/bin/pip3 /usr/bin/pip3
#pip3安装包
pip3 install virtualenv
#指定virtualenv的链接
ln -s /usr/local/bin/virtualenv /usr/bin/virtualenv
#这个最新版python3了pip3安装库 安装web3
pip3 install web3
pip3 install scapy
ZzudYaMfJa 安装tcpdump
yum install tcpdump
jHp071IuAr
打开geth控制台,链接已经启动的客户端
geth attach http://127.0.0.1:8545