facebook atc介紹html
Augmented Traffic Control(又名atc)是一種模擬網絡情況的工具。由facebook開源,是一個容許開發人員控制設備與互聯網鏈接的項目。atc能夠模擬不一樣的網絡條件,包括控制帶寬,延遲,數據包丟失、數據包損壞、數據包重排序等幾個因素均可以由atc來控制。atc運行在網關,能夠控制鏈接到該網絡的手機,設備的網絡,atc有一個web界面,經過這個界面能夠來切換不一樣的網絡狀況。atc內部使用了iptables和tc,所以只支持linux平臺。python
下面介紹facebook atc在 ubuntu 18.04(使用vmware 安裝的虛擬機)系統下facebook atc 的安裝和使用。jquery
準備環境:linux
一、用vmware裝個ubuntu
二、準備一個無線網卡,建議選擇一個linux免驅的無線網卡,否則在開啓熱點的時候會提示失敗。git
ubuntu須要利用hostapd和dhcp開啓ap熱點,首先安裝hostapd和dhcpgithub
sudo apt-get install hostapd isc-dhcp-server
而後編輯/etc/hostapd/hostapd.conf文件,內容以下圖:web
接着啓動hostapd服務數據庫
sudo hostapd /etc/hostapd/hostapd.conf
若是沒報錯並搜到熱點證實啓動ap熱點成功,若是有報錯能夠用如下命令解決:django
sudo nmcli radio wifi off sudo rfkill unblock wlan
若是提示hostapd進程已存在,則須要先殺掉進程bootstrap
sudo killall hostapd
編輯文件/etc/dhcp/dhcpd.conf, 內容以下圖:
設置無線網卡接口地址
sudo ifconfig wlx00026fb9727b 192.168.179.1 netmask 255.255.255.0
啓動dhcp-server服務
sudo dhcpd wlx00026fb9727b -pf /var/run/dhcp-server/dhcpd.pid
如有提示pid或leases文件錯誤,就按照提示就去建立文件並賦予權限
sudo touch /var/lib/dhcp/dhcpd.leases chmod a+x /var/lib/dhcp/dhcpd.leases
若開啓dhcp服務沒有提示報錯,則表明開啓成功,此時wifi應該能夠連上,可是還不能夠上網。
設置IP轉發
sudo bash -c "echo 1 >/proc/sys/net/ipv4/ip_forward"
設置NAT轉發
sudo iptables -t nat -A POSTROUTING -o ens33 -j MASQUERADE
由於設置步驟較多,能夠寫成2個腳本,ap-start.sh, ap-stop.sh。一切順利的話,此時wifi應該能夠連上了
首先安裝python2.7和pip,和django
sudo apt-get install python sudo apt-get install python-pip sudo apt-get install django
安裝atc的組件
pip install atc_thrift atcd django-atc-api django-atc-demo-ui django-atc-profile-storage
建立atc工程
django-admin startproject atcui cd atcui
配置setting.py 的 INSTALLED_APPS
INSTALLED_APPS = ( ... # 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', )
配置atcui/urls.py
from django.views.generic.base import RedirectView from django.conf.urls import 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)), ]
更新數據庫
python manage.py migrate
啓動atc
sudo atcd --atcd-wan ens33 --atcd-lan wlx00026fb9727b
不過啓動atc的時候我遇到了https://github.com/facebook/augmented-traffic-control/issues/302 這裏所說的問題,加上裏面說的參數就解決了
--atcd-dont-drop-packets
啓動atc web
python manage.py runserver 0.0.0.0:8000
導入facebook默認的幾個配置文件
utils/restore-profiles.sh localhost:8000
這時用手機連上wifi熱點,訪問 http://192.168.179.1:8000
此時能夠看到下圖
使用方法爲
turn on select update shaping
而後就大功告成了,能夠試着切換不一樣的模擬網絡試試效果。
參考文章:
https://www.cnblogs.com/coderzh/p/AugmentedTrafficControl.html
https://blog.csdn.net/itfootball/article/details/46763731