工具簡介
ATC是FaceBook開源的移動網(wǎng)絡(luò)測試工具Augmented Traffic Control(ATC),能夠方便的讓我們模擬各種網(wǎng)絡(luò)環(huán)境進行測試。
ATC有兩個最吸引人的特點:
- 在手機上通過Web界面就可以隨時切換不同的網(wǎng)絡(luò)環(huán)境。
- 多個手機可以連接到同一個WIFI下,相互之間模擬的網(wǎng)絡(luò)環(huán)境各不影響。
搭建步驟
一、基礎(chǔ)準(zhǔn)備
1. 硬件準(zhǔn)備
我這里用的是水星(Mercury)MW150U 150M無線USB網(wǎng)卡(別問為什么,要是你用別的網(wǎng)卡可以支持ap模式且有驅(qū)動也是可以的,我之前用Ralink和360wifi因為驅(qū)動和網(wǎng)卡本身不支持ap模式踩的坑非常多),還有,如果有樹莓派玩一玩就更好了
2. 系統(tǒng)
ubuntu 14.04 LTS 桌面版
二、配置ubuntu下wifi
1. 檢查無線網(wǎng)卡連接情況
我的ubuntu是安裝vmware下,所以要先點擊右鍵連接到虛擬機上(右下角的USB圖標(biāo))

連接上之后,在命令行輸入:lsusb
如果顯示f201:5370就是我們的無線網(wǎng)卡的信息,說明我們識別出我們的usb無線網(wǎng)卡
2. 安裝hostapd 和 dhcp
簡單的概念解釋下:
- hostapd
通過Hostapd可以將無線網(wǎng)卡切換為AP/Master模式,通過修改配置文件,可以建立一個開放式的(不加密)的,WEP,WPA或WPA2的無線網(wǎng)絡(luò) - dhcp
簡單的說ip管理 - 安裝
apt-get install hostapd isc-dhcp-server - 驗證是否安裝成功
分別敲入hostapd和dhcpd,顯示命令詳解則為成功

3. 配置hostapd
創(chuàng)建并編輯配置文件 ,在terminal中輸入命令:
root@lufukeng:/#vi /etc/hostapd/hostapd.conf
配置內(nèi)容如下:
interface=wlan0
driver=nl80211
ssid=autotest //wifi名字
channel=10
hw_mode=g
macaddr_acl=0
auth_algs=3
wpa=2
wpa_passphrase=12345678 //密碼
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP CCMP
rsn_pairwise=TKIP CCMP
PS:除了wifi名字和密碼,其他都可以一樣,然后記得注釋的反斜杠和內(nèi)容要刪掉
4.運行hostapd
terminal中輸入以下命令:
root@lufukeng:/#nmcli nm wifi off
root@lufukeng:/#rfkill unblock wlan
root@lufukeng:/#killall hostapd
root@lufukeng:/#hostapd -B /etc/hostapd/hostapd.conf
hostapd -B是后臺運行,-d是前臺運行

5. 查詢DNS,下一步備用
root@lufukeng:/# nmcli dev list iface eth0 | grep IP4
IP4.ADDRESS[1]: ip = 192.168.200.131/24, gw = 192.168.200.2
IP4.DNS[1]: 192.168.200.2
IP4.DOMAIN[1]: localdomain
IP4.WINS[1]: 192.168.200.2
查詢結(jié)果,DNS:192.168.200.2
6.配置dhcpd
root@lufukeng:/#vi /etc/dhcp/dhcpd.conf
輸入以下內(nèi)容:
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 192.168.200.2;//查詢的DNS,前面不用改
}
7.設(shè)置wlan0
root@lufukeng:/#ifconfig wlan0 192.168.0.1 netmask 255.255.255.0
8.啟動dhcp-server
root@lufukeng:/# touch /var/run/dhcp-server/dhcpd.pid
root@lufukeng:/# chmod 777 /var/run/dhcp-server/dhcpd.pid
root@lufukeng:/# dhcpd wlan0 -pf /var/run/dhcp-server/dhcpd.pid

9.IP轉(zhuǎn)發(fā)
root@lufukeng:/#bash -c "echo 1 >/proc/sys/net/ipv4/ip_forward"
10.設(shè)置NAT
root@lufukeng:/#iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
到這里,如果手機連接wifi,并正常上網(wǎng)則說明成功。
三、下載并配置ATC
1.安裝pip
root@lufukeng:/#apt-get install python-pip
通過pip安裝ATC需要的django組件:
root@lufukeng:/#pip install atc_thrift atcd django-atc-api django-atc-demo-ui django-atc-profile-storage
2. 創(chuàng)建一個django工程以便使用ATC服務(wù)端app
root@lufukeng:/#django-admin startproject atcui
此時會在當(dāng)前路徑生成actui項目
3.修改ATC配置
切換到項目路徑下,編輯配置文件
cd atcui/atcui
vi settings.py
在INSTALLED_APPS里添加如下內(nèi)容:
'rest_framework',
'atc_api',
'bootstrap_themes',
'django_static_jquery',
'atc_demo_ui',
'atc_profile_storage',

vi urls.py
將urlpatterns 內(nèi)容改為一下內(nèi)容:
from django.views.generic.base import RedirectView
from django.conf.urls import include
urlpatterns = [
url(r'^admin/',admin.site.urls),
url(r'^api/v1/',include('atc_api.urls')),
url(r'^atc_demo_ui/',include('atc_demo_ui.urls')),
url(r'^api/v1/profiles/',include('atc_profile_storage.urls')),
url(r'^$',RedirectView.as_view(url='/atc_demo_ui/', permanent=False)),
]

最后切換到manage.py所在目錄,更新django數(shù)據(jù)庫,執(zhí)行以下命令:
python manage.py migrate

4.設(shè)置網(wǎng)卡
配置完成然后可以運行了,這里使用網(wǎng)卡eth0作為公網(wǎng)連接,wlan0作為內(nèi)網(wǎng)連接,啟動時通過參數(shù)指定,執(zhí)行以下命令:
atcd --atcd-wan eth0 --atcd-lan wlan0
5.運行ATC UI
執(zhí)行啟動命令:
python manage.py runserver 0.0.0.0:8000
這時通過手機瀏覽器訪問192.168.0.1:8000,會顯示沒有配置過任何profile的網(wǎng)頁,下面提供Facebook已經(jīng)配置好的文件配置。
6.使用facebook已經(jīng)配置好的網(wǎng)絡(luò)配置文件
獲取方式如下:
apt-get install git
git clone https://github.com/facebook/augmented-traffic-control.git
apt-get install curl
cd augmented-traffic-control
utils/restore-profiles.sh localhost:8000
好了,這個時候再次在手機瀏覽器上訪問192.168.0.1:8000,就可以看到如下界面:
基本使用如下:
turn on //打開
select //選擇
update Shaping //更新,選擇網(wǎng)絡(luò)之后,點擊更新
turn off //關(guān)閉
7.啟動腳本
為了方便,把以上操作步驟寫在shell腳本中,每次開機之后,只要執(zhí)行腳本就可以啟動項目和wifi,暫時沒有配置成開機啟動腳本
start-up.sh
#!/bin/bash
nmcli nm wifi off
sudo rfkill unblock wlan
sudo killall hostapd
sleep 2
sudo hostapd -B /etc/hostapd/hostapd.conf
sleep 3
sudo ifconfig wlan0 192.168.0.1 netmask 255.255.255.0
sleep 1
sudo touch /var/run/dhcp-server/dhcpd.pid
sudo chmod 777 /var/run/dhcp-server/dhcpd.pid
sudo dhcpd wlan0 -pf /var/run/dhcp-server/dhcpd.pid
sleep 3
sudo bash -c "echo 1 >/proc/sys/net/ipv4/ip_forward"
sleep 1
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
sleep 1
cd /home/lufukeng/Desktop/atcui/
nohup sh atcd.sh >atcd.log &
sleep 3
nohup sh start-atcserver.sh >atcserver.log &
sleep 3
atcd.sh
#!/bin/bash
atcd --atcd-wan eth0 --atcd-lan wlan0
start-atcserver.sh
#!/bin/bash
python manage.py runserver 0.0.0.0:8000
8.最后附上一份網(wǎng)絡(luò)參數(shù)配置
| Name (網(wǎng)絡(luò)名稱) | 延遲(latency) | 網(wǎng)絡(luò)帶寬(bandwidth) | 丟包率(packet loss) |
|---|---|---|---|
| GPRS (good) | 500 | 50 | 2 |
| EDGE (good) | 300 | 250 | 1.5 |
| 3G/HSDPA (good) | 250 | 750 | 1.5 |
| DIAL-UP (good) | 185 | 40 | 2 |
| DSL (poor) | 70 | 2000 | 2 |
| DSL (good) | 40 | 8000 | 0.5 |
| WIFI (good) | 40 | 30000 | 0.2 |
| Satellite | 1500 | - | 0.2 |
可以根據(jù)自己的需要進行配置
至此,搭建結(jié)束,童鞋們可以根據(jù)自己的需要進行使用了。
參考文獻
Facebook網(wǎng)絡(luò)模擬測試工具ATC使用
Facebook/atc環(huán)境搭建總結(jié)