本文完全按照官方文档进行安装,所有安装步骤均复制自官方安装教程,仅记录了个人安装过程及遇到的问题,为多次试错后的汇总,逻辑有点混乱,仅供参考。
2021年shadow更新至2.x版本,其中运行tor的插件也进行了修改,由支持1.x版本shadow的shadow-plugin-tor改为支持2.x版本的tornettools。具体情况详见github README。
官方整合文档
https://neverenough-sec2021.github.io
本文安装的所有工具及版本
- shadow:默认最新v2.0.0,直接git clone
- Tor:默认最新版本,直接git clone 可以自选版本或自己修改的源码
- TGen:v1.0.0,还需安装TGenTools
- OnionTrace:v1.0.0,还需安装OnionTraceTools
- tornettools:默认最新,直接git clone
shadow安装官方文档
https://shadow.github.io/docs/guide/supported_platforms.html
shadow-tornettools工具官方安装
https://github.com/shadow/tornettools
TGen安装官方文档
https://github.com/shadow/tgen
OnionTrace官方安装文档
https://github.com/shadow/oniontrace
Tor官方安装文档
https://github.com/torproject/tor
注:本次实验没有使用虚拟环境,工具安装时忽略了官方开启虚拟环境的建议,如果要开启虚拟环境则需要三个安装在同一虚拟环境下
linux系统准备
shadow官方明确指出无法支持centos7,其余支持版本详见官网,本文使用云服务器,安装ubuntu,在root用户下创建个人用户安装。
踩雷记录:wsl出现莫名错误,1核2G的服务器性能不足以支撑完整的仿真使用,Arch linux在安装tgen时出现链接错误,应该是依赖的问题,在arch中不能yay -S xxx-devel,最后也没能成功解决问题,最终还是使用了ubuntu20.04
#Arch 使用过的部分命令记录
#创建用户
useradd -m -G wheel -s /bin/bash [用户名]
#设置密码
passwd [用户名]
#进入用户
su [用户名]
#设置root权限详见参考链接
visudo
#去掉#%wheel ALL=(ALL) ALL的#
#查询具体包的版本
pacman -Qi xxx
Arch linux命令参考链接:
https://www.ohyee.cc/post/note_linux_shell
参考链接:
https://blog.csdn.net/weixin_31569671/article/details/116709653
#ubuntu创建用户
sudo adduser [username]
#赋予管理员权限
sudo usermod -aG sudo [username]
参考链接:
https://www.myfreax.com/how-to-add-and-delete-users-on-ubuntu-20-04/
shadow安装
- 安装依赖(存在部分依赖找不到的情况,安装替代依赖即可),不同系统安装的依赖本质相同,由系统决定安装时略有不同。示例均为ubuntu系统。
#ubuntu安装命令
# 需要的依赖
sudo apt-get install -y \
cmake \
findutils \
libc-dbg \
libglib2.0-0 \
libglib2.0-dev \
libprocps-dev \
make \
python3 \
python3-pip \
xz-utils \
util-linux \
gcc \
g++
sudo apt install libprocps-dev
# rustup: https://rustup.rs
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
#注意一般完成这一步后会提示需要
source $HOME/.cargo/env
#不进行这一步操作,即使安装成功也无法使用cargo
- 安装shadow
git clone https://github.com/shadow/shadow.git
cd shadow
./setup build --clean --test
./setup test
# Optionally install (to ~/.local/bin by default). Can otherwise run the binary
# directly at build/src/main/shadow.
./setup install
#配置PATH
echo 'export PATH="${PATH}:/home/${USER}/.local/bin"' >> ~/.bashrc && source ~/.bashrc
#测试是否安装成功
shadow --version
shadow --help
运行成功界面
安装成功!
在成功安装TGen和Tor后回来测试
cd shadow/src/test/tor/minimal
./run.sh
./verify.sh
测试通过
TGen安装
- 安装依赖
#ubuntu安装依赖
sudo apt-get install cmake libglib2.0-0 libglib2.0-dev libigraph1 libigraph-dev
ubuntu无法安装libigraph
自行到igraph官网:
https://igraph.org/2021/11/11/igraph-0.9.5-c.html
https://github.com/igraph/igraph/releases/tag/0.9.5
下载安装igraph
tar -zxvf igraph-0.9.5.tar.gz
cd igraph-0.9.5/
mkdir build && cd build
cmake ..
cmake --build .
sudo cmake --install .
pip install python-igraph
在cmake时缺包,运行安装
sudo apt-get install libsuitesparse-dev libarpack2-dev libgmp10 libgmp-dev flex bison
#https://en.wikibooks.org/wiki/GLPK/Linux_OS#Install
wget ftp://ftp.gnu.org/gnu/glpk/glpk-4.65.tar.gz
tar -xzvf glpk-4.65.tar.gz
cd glpk-4.65
./configure
sudo make install
- 安装TGen
#下载 git clone https://github.com/shadow/tgen.git(此处没有直接clone,而是直接下载的release 1.0.0版本,其1.1.1版本遇到了未能解决的问题,在这里初次安装还是建议1.0.0)
cd tgen
#安装
mkdir build && cd build
cmake .. -DCMAKE_INSTALL_PREFIX=/home/$USER/.local
make
make install
arch linux 在make时遇到问题
ubuntuan安装报错,错误解决较为曲折,并不知道是哪一个解决的问题,因此全部记录
https://jjzhou012.github.io/blog/2020/07/12/Tutorials-python-igraph.html
https://blog.csdn.net/maruifeng__/article/details/104606357
https://lists.gnu.org/archive/html/igraph-help/2017-01/msg00011.html
根据这三个链接解决了问题
sudo apt-get install -y libigraph0-dev
sudo apt-get install build-essential
sudo apt-get install python-dev
sudo apt install pkg-config
sudo apt install libxml2-dev
pip uninstall python-igraph
pip install python-igraph
安装TGenTools
官方安装网址:
https://github.com/shadow/tgen/blob/main/tools/README.md
- 安装依赖
sudo apt-get install python3 python3-dev python3-pip python3-venv libxml2 libxml2-dev libxslt1.1 libxslt1-dev libpng16-16 libpng-dev libfreetype6 libfreetype6-dev libblas-dev liblapack-dev
#安装
cd ../tools
pip3 install -r requirements.txt
pip3 install -I .
- 安装TGenTools
python3 setup.py build
sudo python3 setup.py install
#安装检查
tgentools -h
安装成功!
OnionTrace安装
- 安装依赖(此处的依赖在安装shadow时均已安装过了)
sudo apt-get install cmake libglib2.0-0 libglib2.0-dev
- 安装OnionTrace
#下载 git clone https://github.com/shadow/oniontrace.git(此处没有直接clone,而是下载的release版本)
cd oniontrace
#安装
mkdir build && cd build
cmake .. -DCMAKE_INSTALL_PREFIX=/home/$USER/.local
make
make install
- 安装OnionTraceTools
https://github.com/shadow/oniontrace/tree/main/tools
#此处所需的依赖之前应该是都安装过了,不放心可以再装一下
#直接执行安装
pip install -r path/to/oniontrace/tools/requirements.txt
pip install -I path/to/oniontrace/tools
#根据Tgentools的安装教程来说,我们不启用虚拟环境需要执行下述安装
python3 setup.py build
sudo python3 setup.py install
#检查是否安装成功
oniontracetools -h
安装成功!
tornettools安装
命令简介
所有的步骤都在tornettools目录下进行
- 安装依赖
#下载(此处必须clone,直接下载release版本报错了)
git clone https://github.com/shadow/tornettools.git
cd tornettools
#虚拟环境
#python3 -m venv toolsenv
#source toolsenv/bin/activate
#安装依赖
pip install -r requirements.txt
pip install -I .
python3 setup.py build
sudo python3 setup.py install
- 获取需要的数据
wget https://collector.torproject.org/archive/relay-descriptors/consensuses/consensuses-2020-11.tar.xz
wget https://collector.torproject.org/archive/relay-descriptors/server-descriptors/server-descriptors-2020-11.tar.xz
wget https://metrics.torproject.org/userstats-relay-country.csv
wget https://collector.torproject.org/archive/onionperf/onionperf-2020-11.tar.xz
wget -O bandwidth-2020-11.csv "https://metrics.torproject.org/bandwidth.csv?start=2020-11-01&end=2020-11-30"
#解压
tar xaf consensuses-2020-11.tar.xz
tar xaf server-descriptors-2020-11.tar.xz
tar xaf onionperf-2020-11.tar.xz
附:数据
链接:https://pan.baidu.com/s/1p4cznQsbuEnAeJ3zbyaG2g
提取码:uh7j
- 安装privcount Tor流量模型
git clone https://github.com/tmodel-ccs2018/tmodel-ccs2018.github.io.git
- 安装Tor(具体安装位置其实并无限制,只要注意后续的tornettools stage命令需要修改对应路径
--geoip_path 【tor/src/config/geoip】
#依赖
sudo apt-get install openssl libssl-dev libevent-dev build-essential automake zlib1g zlib1g-dev
#源码下载
git clone https://git.torproject.org/tor.git
cd tor
#安装
./autogen.sh
#这是官方原命令,但后期会报错,因此直接在此处修改
#./configure --disable-asciidoc --disable-unittests --disable-manpage --disable-html-manual
#将上文中的此条命令修改如下
./configure --disable-asciidoc --disable-unittests --disable-manpage --disable-html-manual --prefix=/home/$USER/.local
make -j$(nproc)
#多执行一步如下
make install
cd ..
#添加PATH
export PATH=${PATH}:`pwd`/tor/src/core/or:`pwd`/tor/src/app:`pwd`/tor/src/tools
截止目前操作为止,目录下应该拥有的文件
- stage -首先处理中继和用户信息(此处运行较慢,需要大量内存)
tornettools stage \
consensuses-2020-11 \
server-descriptors-2020-11 \
userstats-relay-country.csv \
tmodel-ccs2018.github.io \
--onionperf_data_path onionperf-2020-11 \
--bandwidth_data_path bandwidth-2020-11.csv \
--geoip_path tor/src/config/geoip
此时目录下文件
- generate-使用上一步生成的文件生成网络
使用--network_scale 0.01
以公共Tor规模的“1%”生成一个私有Tor网络(由于1%规模的网络仿真运行时间过长,内存消耗过大,因此使用0.1%的网络规模进行测试,大约需要运行2小时)
tornettools generate \
relayinfo_staging_2020-11-01--2020-11-30.json \
userinfo_staging_2020-11-01--2020-11-30.json \
networkinfo_staging.gml \
tmodel-ccs2018.github.io \
--network_scale 0.01 \
--prefix tornet-0.01
- 运行仿真结果(确保已安装shadow,tgen和oniontrace)
请注意,模拟一个“1%”Tor网络60分钟可能需要多达30GiB的RAM。
tornettools simulate tornet-0.01
tornettools parse tornet-0.01
tornettools plot \
tornet-0.01 \
--tor_metrics_path tor_metrics_2020-11-01--2020-11-30.json \
--prefix pdfs
tornettools archive tornet-0.01
第一步就遇到了错误Shadow did not complete successfully: Controller exited with code 1
注意:重新运行需要进入tornet-0.01中删除shadow.data再重新运行rm -rf shadow.data
查看日志shadow.log之后发现错误:无法找到tor路径
For host ‘4uthority1’, couldn’t find program path: ‘~/.local/bin/tor’
重新回顾tornettools中tor的安装部分,发现安装路径确实不符合需求,因此重新安装
#将上文中的此条命令修改如下
./configure --disable-asciidoc --disable-unittests --disable-manpage --disable-html-manual --prefix=/home/$USER/.local
#重新执行make
make -j$(nproc)
#多执行一步
make install
发现路径确实修改为所需命令
再次报错(并没有解决,重装系统重装了没再遇到)
thread ‘’ panicked at ‘called Result::unwrap()
on an Err
value: RecvError’
fatal runtime error: failed to initiate panic, error 5
- 运行过程中系统状态监控
运行成功
文件变化
parse成功
plot成功