弱網絡
工具簡介
ATC是FaceBook開源的移動網絡測試工具Augmented Traffic Control(ATC),能夠方便 的讓我們模擬各種網絡環境進行測試。ATC-Git傳送門
ATC有兩個最吸引人的特點:
在手機上通過Web界面就可以隨時切換不同的網絡環境。 多個手機可以連接到同一個WIFI下,相互之間模擬的網絡環境各不影響。 。
環境要求
Linux: 僅支持Linux.
Python 2.7: 僅支持 2.7+ 版本,python3也不支持 Django 1.10: 僅支持1.10+版本
安裝linux虛擬機 這里不再接受虛擬機怎么裝了,直接查看教程
環境准備 更新服務器
-
sudo apt-get update
-
sudo apt-get upgrade
python2.7安裝
python 安裝
1. sudo apt-get install python
看到上圖提示輸入 y 回車。
安裝完成后輸入 python -V 確認是否安裝成功
顯示如圖說明安裝成功。
pip 安裝
1. sudo apt-get install python-pip python-dev build-essential 安裝完成后輸入 pip -V 進行驗證,顯示
- 升級pip
1. sudo pip install --upgrade pip
Wifi熱點搭建
安裝是使用的是騰達(Tenda)U12遵循IEEE 802.11ac, IEEE 802.11a IEEE 802.11n, IEEE 802.11g, IEEE 802.11b協議。需要安裝驅動,支持ap。選擇無線網卡的時候需要支持Linux, 支持ap, 最好是免驅。
添加usb到虛擬機 點擊usb圖標
勾選無線網卡
查看無線網卡信息 lsusb
安裝驅動 下載驅動
1. # 下載驅動 2. wget
http://down.tenda.com.cn/uploadfile/2017/Drive/U12_linux_v5.1.5_19247.201 60830.rar
下載成功后查看
如果機器沒有rar解壓工具使用如下命令安裝
1. sudo apt-get install rar 解壓
1. rar x U12_linux_v5.1.5_19247.20160830.rar #解壓 解壓后查看
添加設備信息到 usb_intf.c
-
cd U12_linux_v5.1.5_19247.20160830/driver/rtl8812AU_linux_v5.1.5_19247. 20160830/os_dep/linux
-
sudo vi usb_intf.c
添加騰達U12的設備信息
1. {USB_DEVICE(0x2604, 0x0012), .driver_info = RTL8812}, /* Tenda U12 */
安裝 返回到安裝目錄
進行安裝
1. sudo sh install.sh 安裝完成后插拔網卡,輸入 iwconfig 顯示如下信息
安裝驅動參考文章
Tenda U12 Linux驅動安裝 在Linux下安裝Tenda U12驅動
安裝hostapd和dhcpd
1. sudo apt-get install hostapd isc-dhcp-server 安裝完成后進行驗證,輸入 hostapd
輸入 dhcpd
創建hostapd.conf
在/etc/hostapd目錄下新建 hostapd.conf ,文件內容如下:
-
interface=wlan0 #使用的無線網卡接口名稱
-
driver=nl80211 #這里基本是固定的,是驅動接口
-
ssid=ATC #設置熱點的名稱
-
hw_mode=g
-
channel=10
-
macaddr_acl=0
-
auth_algs=3
-
wpa=2 #從這開始都是用來設置認證的,如果去掉這些設置,熱點就是沒有密碼的
-
wpa_passphrase=11111111
-
wpa_key_mgmt=WPA-PSK
-
wpa_pairwise=TKIP CCMP
-
rsn_pairwise=TKIP CCMP
創建成功后,驗證是否有效果
1. sudo hostapd -B /etc/hostapd/hostapd.conf #-B為在后台執行 執行成功后的顯示如下
如果啟動時出現如下報錯信息
執行如下命令
1. sudo rfkill unblock wlan 正常情況下就可以啟動hostapd了
1. sudo hostapd -B /etc/hostapd/hostapd.conf 但是如果是重新開啟熱點的話還是會報錯
原因是hostapd進程占用了這個網卡,關閉這個進程就好了
1. sudo killall hostapd 然后啟動hostapdj就可以了
1. sudo hostapd -B /etc/hostapd/hostapd.conf 一切搞定后可以使用手機搜索下WIFI,就可以看到ATC了。
創建dhcpd.conf
在/etc/dhcp/dhcpd.conf 在文件最后添加如下信息
1. 2. 3. 4. 5. 6.
subnet 192.168.0.0 netmask 255.255.255.0 {
range 192.168.0.2 192.168.0.10; option routers 192.168.0.1;
option domain-name-servers 8.8.8.8;
# 根據本機dns進行行修改
}
使用nmcli dev list iface eth0 | grep IP4查看本機dns信息
所以我的 dhcpd.conf 應該是這樣的
1. subnet 192.168.0.0 netmask 255.255.255.0
2. 3. 4. 5. 6.
{
range 192.168.0.2 192.168.0.10;
option routers 192.168.0.1;
option domain-name-servers 114.114.114.114;
}
設置無線網卡 設置並啟動無線網卡
1. sudo ifconfig wlan0 192.168.0.1 netmask 255.255.255.0 輸入執行完成輸入 ifconfig 查看,會顯示wlan0
開啟IP內核轉發
1. sudo bash -c "echo 1 >/proc/sys/net/ipv4/ip_forward" 設置NAT
1. sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE 啟動dhcp-server
1. sudo dhcpd wlan0 -pf /var/run/dhcp-server/dhcpd.pid 如果出現如下問題,說明 dhcpd.pid 文件不存在。
進入 /var/run/dhcp-server/ 創建 dhcpd.pid ,創建完成后在啟動一次 dhcp-server
設置完后后,使用手機連接ATC,可以愉快的訪問網絡了。
ATC安裝 安裝包
1. sudo pip install atc_thrift atcd django-atc-api django-atc-demo-ui dja ngo-atc-profile-storage
如果安裝過程中出現 Cannot uninstall 'six' 安裝命令后加 --ignore-installed six
1. sudo pip install atc_thrift atcd django-atc-api django-atc-demo-ui dja ngo-atc-profile-storage --ignore-installed six
安裝完畢后查看django版本,如果版本大於1.10,需要卸載重新裝
-
sudo pip list #查看已安裝的包
-
sudo pip uninstall Django #卸載Django
-
sudo pip isntall Django==1.10.8
創建一個django工程以便使用ATC服務端app
-
sudo django-admin startproject atcui
-
cd atcui
進入到atcui目錄后編輯 settings.py ALLOWED_HOSTS = [] 大括號內加'*'
在INSTALLED_APPS里添加如下內容,
1.
# Django ATC API 'rest_framework', 'atc_api', # Django ATC Demo UI 'bootstrap_themes', 'django_static_jquery', 'atc_demo_ui', # Django ATC Profile Storage 'atc_profile_storage',
編輯 urls.py 文件,文件開始導入
1. from django.views.generic.base import RedirectView
-
# 導入include
-
from from django.conf.urls import url, include
在urlpatterns 添加如下內容
# Django ATC API url(r'^api/v1/', include('atc_api.urls')), # Django ATC Demo UI url(r'^atc_demo_ui/', include('atc_demo_ui.urls')), # Django ATC profile storage url(r'^api/v1/profiles/', include('atc_profile_storage.urls')), url(r'^$', RedirectView.as_view(url='/atc_demo_ui/', permanent=False)),
返回到上一級目錄,跟新django數據庫
1. cd..
2. sudo python manage.py migrate
配置完成然后可以運行了,這里使用網卡eth0作為公網連接,wlan0作為內網連接,啟動時通 過參數指定
1. sudo atcd --atcd-wan eth0 --atcd-lan wlan0
新建一個終端運行ATC UI
1. sudo python manage.py runserver 0.0.0.0:8000
手機端輸入 192.168.0.1:8000 就可以訪問了。 添加配置
facebook已經在自己的工程中為我們配置了常見網絡的配置,可以通過如下方式添加
1. git clone https://github.com/facebook/augmented-traffic-control.git 克隆完成后執行添加命令
-
cd augmented-traffic-control
-
sudo utils/restore-profiles.sh localhost:8080
執行完成后手機刷新界面