Facebook ATC弱网环境搭建
用户的网络环境并不是一直处于能高速传输的状态,网络的好坏受用户所处地理位置,同一基站使用人数等许多因素影响。百度公开的数据显示,百度APP使用者约有1%的人群处于弱网状态。所以研究弱网测试,来提升这部分流量用户的体验,非常有必要。低带宽、低信号强度、高延时、丢包率高等都属于弱网。弱网情况下通常还伴随的隐藏的bug,用户体验差等因素。开展这项测试前,我们得把环境搭起来,所以今天先来介绍下如何搭建ATC。
弱网工具简介:
Augmented Traffic Control(ATC)是Facebook的一款开源的移动网络模拟工具,能很方便的模拟2g,3g,4g,wifi,delay,loss等各种网络场景。
硬件准备:
我是搭建在本机的,所以需要用VM虚拟出一个Linux系统。
1.Ubuntu 16.04 LTS
2.USB无线网卡(芯片型号是RTL8188EUS)要确保无线网卡能支持AP(用iwlist查看)
一、配置Ubuntu无线wifi热点
在操作之前先确认USB无线网卡和驱动都支持AP。
1.配置hostapd
通过Hostapd可以将无线网卡切换为AP/Master模式,通过修改配置文件,可以建立一个开放式的(不加密)的,WEP,WPA或WPA2的无线网络。
apt-get install hostapd
新建hostapd文件:vi /etc/hostapd/hostapd.conf
interface=wlx488ad2a0e0fe //wifi设备名称
driver=nl80211
ssid=autotest
hw_mode=g
channel=
macaddr_acl=
auth_algs=
wpa=
wpa_passphrase=12345678 //密码
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP CCMP
rsn_pairwise=TKIP CCMP
启动AP
hostapd -B /etc/hostapd/hostapd.conf
此时应该有一个autotest的wifi可以连接,连接后处于“正在获取IP”状态。
2.配置dhcpd
dhcp简单来说是管理ip的
apt-get install isc-dhcp-server
开启DHCP服务器是为了让终端能够获取到IP地址,分配的地址是私有的,因此只要不与公有的地址相冲突就可以,RFC 1918 为私有网络预留出了三个IP 地址块,上述三个范围内的地址不会在因特网上被分配,我们可以放心使用。
A 类:10.0.0.0~10.255.255.255
B 类:172.16.0.0~172.31.255.255
C 类:192.168.0.0~192.168.255.255
我们需要配置/etc/dhcp/dhcpd.conf文件,添加要分配的网段,指明分配的地址范围,默认网关和DNS服务器地址。在文件最后我们添加以下内容。注意要分配的网段不能和主机ens33所处的网段相同。
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;
}
配置无线网口wlx488ad2a0e0fe所处的网段,和上面的网段要一致。
ifconfig wlx488ad2a0e0fe 192.168.0.1 netmask 255.255.255.0
接下来开启dhcp,热点会给接入的设备分配ip,从 192.168.0.2~192.168.0.10 中随机取一个。
service isc-dhcp-server start
现在应该能连接上热点,但还不能上网。
3.配置NAT
我们需要打开转发功能,让192.168.0.1/8网段的地址都通过网卡ens33转发出去。
sysctl net.ipv4.ip_forward=
iptables -t nat -A POSTROUTING -s 192.168.0.1/ -o ens33 -j MASQUERADE
手机连接wifi热点,若可以正常上网,表示热点配置成功了。
二、配置ATC
1.安装和使用virtualenv创建python虚拟环境
apt install virtualenv
virtualenv project_ATC
cd project_ATC/bin
source activate
2.安装python-pip工具
用python3+尝试安装了一次,没有成功。然后发现有些依赖第三方库是python2+写的,所以先确保你的python版本是python2.7,然后安装对应的pip工具。
apt-get install python-pip
通过pip下载安装ATC需要的Django组件。
pip install atc_thrift
pip install atcd
pip install django-atc-api
pip install django-atc-demo-ui
pip install django-atc-profile-storage
3.修改ATC配置
用命令创建一个Django工程
django-admin startproject ATC_UI
编辑配置文件 setting.py
cd ATC_UI/ATC_UI
vi settings.py
在INSTALLED_APPS添加如下内容:
'rest_framework',
'atc_api',
'bootstrap_themes',
'django_static_jquery',
'atc_demo_ui',
'atc_profile_storage',

ALLOWED_HOSTS 修改如下,‘*’允许所有ip访问。
ALLOWED_HOSTS = ['*']

编辑文件urls.py
vi urls.py
修改增加如下配置:
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数据库:
python manage.py migrate
4.设置网卡
--atcd-wan 参数 指定网卡作为公网连接, --atcd-lan 参数 指定此网卡作为内网连接。
atcd --atcd-wan ens33 --atcd-lan wlx488ad2a0e0fe
然后我遇到上网速度很慢的情况,按照GitHub上的解决方法,给atcd命令加个参数:https://github.com/facebookarchive/augmented-traffic-control/issues/314
--atcd-dont-drop-packets
5.运行ATC_UI
然后就可以运行Django啦,runserver 参数 指定端口。
python manage.py runserver 0.0.0.0:
6.使用官方已经配好的网络配置文件
具体使用方法:
git clone https://github.com/facebookarchive/augmented-traffic-control.git
cd augmented-traffic-control
utils/restore-profiles.sh 192.168.0.1:
三、ATC使用方法
1.手机浏览器输入192.168.0.1:8000,可以看到下面的UI

2.选择需要的网络环境,点击“select”,然后点击最上面的“update shaping”,也可以自定义网络。然后你可以愉快的测试了,而且每部手机连接的网络互不影响,也就是说你设置了限速只对你自己有效,不会影响其他人。

部分参考github:https://github.com/facebookarchive/augmented-traffic-control
Facebook ATC弱网环境搭建的更多相关文章
- facebook atc弱网环境搭建和踩坑总结
facebook atc介绍 Augmented Traffic Control(又名atc)是一种模拟网络状况的工具.由facebook开源,是一个允许开发人员控制设备与互联网连接的项目.atc可以 ...
- [转]FaceBook ATC 弱网测试工具环境搭建
工具简介 ATC是FaceBook开源的移动网络测试工具Augmented Traffic Control(ATC),能够方便的让我们模拟各种网络环境进行测试. ATC有两个最吸引人的特点: 在手机上 ...
- Fiddler如何模拟弱网环境进行测试
1.模拟弱网环境 打开Fiddler,Rules->Performance->勾选 Simulate Modem Speeds,勾选之后访问网站会发现网络慢了很多 2.Fiddler弱网的 ...
- App-IOS与Android弱网环境测试
弱网环境下App的功能是否正常使用,是否会发生Crash的等情况? 1.IOS ios系统一般自带弱网环境测试,可以通过设置各种网络环境,模拟弱网环境,如3G,wifi,very bad Networ ...
- Fiddler实战之使用Fiddler模拟弱网环境(限速)
1.模拟弱网环境 打开Fiddler,Rules->Performance->勾选 Simulate Modem Speeds,勾选之后访问网站会发现网络慢了很多 2.Fiddler弱网的 ...
- Charles-模拟弱网环境
在做弱网测试时,经常需要模拟各种网络环境,Charles恰好也提供了网络限制的功能,我们可以在"Proxy->Throttle Settings"路径下找到它,如下图所示. ...
- 内网环境搭建NTP服务器
说在前面:ntp和ntpdate区别 ①两个服务都是centos自带的(centos7中不自带ntp).ntp的安装包名是ntp:ntpdate的安装包是ntpdate.他们并非由一个安装包提供. ② ...
- CentOS下安装和配置MySQL-JDK-Tomcat-Nginx(个人官网环境搭建手冊)
今天,又一次弄我的个人云主机的环境.准备运营自己用Java写的个人官网等站点. 服务器环境:阿里云CentOS 6.4位 包含以下脚本在内的绝大部分命令和脚本,都是我亲自运行过,靠谱的. 完整的&qu ...
- CentOS下安装和配置MySQL-JDK-Tomcat-Nginx(个人官网环境搭建手册)
今天,重新弄我的个人云主机的环境,准备运营自己用Java写的个人官网等网站. 服务器环境:阿里云CentOS 6.4位 包括以下脚本在内的绝大部分命令和脚本,都是我亲自执行过,靠谱的. 完整的&quo ...
随机推荐
- Maven 项目 启动时 解决3 字节的 UTF-8 序列的字节 3 无效
"org.activiti.bpmn.exceptions.XMLException: 3 字节的 UTF-8 序列的字节 3 无效." Maven 项目启动时,由于读XML配置文 ...
- JavaScript基础整理
在HTML页面中嵌入JavaScript代码的三种方式 1.内嵌 写在<head>标签或<body>标签中 <script> function displayTim ...
- IOS 模拟器多开集成测试和那些坑
#### 前言公司一直没有IOS自动化,搞得很尴尬,个人感觉搞自动测试的,不搞IOS自动化,就像金X,少了重要一点啊.也向领导申请过不止一次,总只都各种原因没有分配机器,不了了之.某天线上IOS出bu ...
- Sql- Group By ,Where,having用法
Group by,where,having 是数据库查询中最常用的几个关键字.在工作中,时常用到,前面遇到一个问题,一个查询中使用了where ,group by ,having及聚集函数时 ,执行顺 ...
- 解析分享链接在微信内转发防封API接口的实现原理
域名被微信封了怎么办?相信这是很多做微信的朋友的疑惑,本人也是做防封的,特此写一篇文章,写给域名被微信封的.被秒封的朋友来看.简单个大家讲一下防封原理和实现方式. 域名拦截因素 我们先来了解一下域名为 ...
- Maven3-依赖
依赖配置 我们先来看一份简单的依赖声明: <project> ... <dependencies> <dependency> <groupId>...& ...
- Centos6.5---samba文件共享服务配置(一)
Linux---------samba文件共享服务配置(一) samba是一个实现不同操作系统之间文件共享和打印机共享的一种SMB协议的免费软件. https://www.cnblogs.com/zo ...
- Spark机器学习(上)
1.机器学习概念 1.1 机器学习的定义 在维基百科上对机器学习提出以下几种定义: l“机器学习是一门人工智能的科学,该领域的主要研究对象是人工智能,特别是如何在经验学习中改善具体算法的性能”. l“ ...
- python 77种常用的基础函数
Python: 1. print()函数:打印字符串 2. raw_input()函数:从用户键盘捕获字符 3. len()函数:计算字符长度 4. format(12.3654,’ ...
- PDF 报表 Java 组件 iText5 中的单位注意事项
这里面涉及到这几个单位: 点(磅)(pt).像素(px).英寸(inch).毫米(mm) 分辨率单位有: dpi(点每英寸):出现于打印或印刷领域. lpi (线每英寸):描述光学分辨率的尺度. pp ...