用户的网络环境并不是一直处于能高速传输的状态,网络的好坏受用户所处地理位置,同一基站使用人数等许多因素影响。百度公开的数据显示,百度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的无线网络。

  1. apt-get install hostapd

新建hostapd文件:vi /etc/hostapd/hostapd.conf

  1. interface=wlx488ad2a0e0fe //wifi设备名称
  2. driver=nl80211
  3. ssid=autotest
  4. hw_mode=g
  5. channel=
  6. macaddr_acl=
  7. auth_algs=
  8. wpa=
  9. wpa_passphrase=12345678 //密码
  10. wpa_key_mgmt=WPA-PSK
  11. wpa_pairwise=TKIP CCMP
  12. rsn_pairwise=TKIP CCMP

启动AP

  1. hostapd -B /etc/hostapd/hostapd.conf

此时应该有一个autotest的wifi可以连接,连接后处于“正在获取IP”状态。

2.配置dhcpd

dhcp简单来说是管理ip的

  1. apt-get install isc-dhcp-server

开启DHCP服务器是为了让终端能够获取到IP地址,分配的地址是私有的,因此只要不与公有的地址相冲突就可以,RFC 1918 为私有网络预留出了三个IP 地址块,上述三个范围内的地址不会在因特网上被分配,我们可以放心使用。

  1. A 类:10.0.0.010.255.255.255
  2. B 类:172.16.0.0172.31.255.255
  3. C 类:192.168.0.0192.168.255.255

我们需要配置/etc/dhcp/dhcpd.conf文件,添加要分配的网段,指明分配的地址范围,默认网关和DNS服务器地址。在文件最后我们添加以下内容。注意要分配的网段不能和主机ens33所处的网段相同。

  1. subnet 192.168.0.0 netmask 255.255.255.0
  2.   {
  3.     range 192.168.0.2 192.168.0.10;
  4.     option routers 192.168.0.1;
  5.     option domain-name-servers 8.8.8.8;
  6.   }

配置无线网口wlx488ad2a0e0fe所处的网段,和上面的网段要一致。

  1. ifconfig wlx488ad2a0e0fe 192.168.0.1 netmask 255.255.255.0

接下来开启dhcp,热点会给接入的设备分配ip,从 192.168.0.2~192.168.0.10 中随机取一个。

  1. service isc-dhcp-server start

现在应该能连接上热点,但还不能上网。

3.配置NAT

我们需要打开转发功能,让192.168.0.1/8网段的地址都通过网卡ens33转发出去。

  1. sysctl net.ipv4.ip_forward=
  2. iptables -t nat -A POSTROUTING -s 192.168.0.1/ -o ens33 -j MASQUERADE

手机连接wifi热点,若可以正常上网,表示热点配置成功了。

二、配置ATC

1.安装和使用virtualenv创建python虚拟环境

  1. apt install virtualenv
  2. virtualenv project_ATC
  3. cd project_ATC/bin
  4. source activate

2.安装python-pip工具

用python3+尝试安装了一次,没有成功。然后发现有些依赖第三方库是python2+写的,所以先确保你的python版本是python2.7,然后安装对应的pip工具。

  1. apt-get install python-pip

通过pip下载安装ATC需要的Django组件。

  1. pip install atc_thrift
  2. pip install atcd
  3. pip install django-atc-api
  4. pip install django-atc-demo-ui
  5. pip install django-atc-profile-storage

3.修改ATC配置

用命令创建一个Django工程

  1. django-admin startproject ATC_UI

编辑配置文件 setting.py

  1. cd ATC_UI/ATC_UI
  2. vi settings.py

在INSTALLED_APPS添加如下内容:

  1. 'rest_framework',
  2. 'atc_api',
  3. 'bootstrap_themes',
  4. 'django_static_jquery',
  5. 'atc_demo_ui',
  6. 'atc_profile_storage',

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

  1. ALLOWED_HOSTS = ['*']

编辑文件urls.py

  1. vi urls.py

修改增加如下配置:

  1. from django.views.generic.base import RedirectView
  2. from django.conf.urls import include
  3.  
  4. urlpatterns = [
  5. url(r'^admin/',admin.site.urls),
  6. url(r'^api/v1/',include('atc_api.urls')),
  7. url(r'^atc_demo_ui/',include('atc_demo_ui.urls')),
  8. url(r'^api/v1/profiles/',include('atc_profile_storage.urls')),
  9. url(r'^$',RedirectView.as_view(url='/atc_demo_ui/', permanent=False)),
  10. ]

最后切换到manage.py目录,执行更新Django数据库:

  1. python manage.py migrate

4.设置网卡

--atcd-wan 参数  指定网卡作为公网连接, --atcd-lan 参数  指定此网卡作为内网连接。

  1. atcd --atcd-wan ens33 --atcd-lan wlx488ad2a0e0fe

然后我遇到上网速度很慢的情况,按照GitHub上的解决方法,给atcd命令加个参数:https://github.com/facebookarchive/augmented-traffic-control/issues/314

  1. --atcd-dont-drop-packets

5.运行ATC_UI

然后就可以运行Django啦,runserver 参数 指定端口。

  1. python manage.py runserver 0.0.0.0:

6.使用官方已经配好的网络配置文件

具体使用方法:

  1. git clone https://github.com/facebookarchive/augmented-traffic-control.git
  2. cd augmented-traffic-control
  3. 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弱网环境搭建的更多相关文章

  1. facebook atc弱网环境搭建和踩坑总结

    facebook atc介绍 Augmented Traffic Control(又名atc)是一种模拟网络状况的工具.由facebook开源,是一个允许开发人员控制设备与互联网连接的项目.atc可以 ...

  2. [转]FaceBook ATC 弱网测试工具环境搭建

    工具简介 ATC是FaceBook开源的移动网络测试工具Augmented Traffic Control(ATC),能够方便的让我们模拟各种网络环境进行测试. ATC有两个最吸引人的特点: 在手机上 ...

  3. Fiddler如何模拟弱网环境进行测试

    1.模拟弱网环境 打开Fiddler,Rules->Performance->勾选 Simulate Modem Speeds,勾选之后访问网站会发现网络慢了很多 2.Fiddler弱网的 ...

  4. App-IOS与Android弱网环境测试

    弱网环境下App的功能是否正常使用,是否会发生Crash的等情况? 1.IOS ios系统一般自带弱网环境测试,可以通过设置各种网络环境,模拟弱网环境,如3G,wifi,very bad Networ ...

  5. Fiddler实战之使用Fiddler模拟弱网环境(限速)

    1.模拟弱网环境 打开Fiddler,Rules->Performance->勾选 Simulate Modem Speeds,勾选之后访问网站会发现网络慢了很多 2.Fiddler弱网的 ...

  6. Charles-模拟弱网环境

    在做弱网测试时,经常需要模拟各种网络环境,Charles恰好也提供了网络限制的功能,我们可以在"Proxy->Throttle Settings"路径下找到它,如下图所示. ...

  7. 内网环境搭建NTP服务器

    说在前面:ntp和ntpdate区别 ①两个服务都是centos自带的(centos7中不自带ntp).ntp的安装包名是ntp:ntpdate的安装包是ntpdate.他们并非由一个安装包提供. ② ...

  8. CentOS下安装和配置MySQL-JDK-Tomcat-Nginx(个人官网环境搭建手冊)

    今天,又一次弄我的个人云主机的环境.准备运营自己用Java写的个人官网等站点. 服务器环境:阿里云CentOS 6.4位 包含以下脚本在内的绝大部分命令和脚本,都是我亲自运行过,靠谱的. 完整的&qu ...

  9. CentOS下安装和配置MySQL-JDK-Tomcat-Nginx(个人官网环境搭建手册)

    今天,重新弄我的个人云主机的环境,准备运营自己用Java写的个人官网等网站. 服务器环境:阿里云CentOS 6.4位 包括以下脚本在内的绝大部分命令和脚本,都是我亲自执行过,靠谱的. 完整的&quo ...

随机推荐

  1. Linux学习---指针运算、修饰符(const、volatile、typedef)及、运算符(++、--、+、-)

    const:常量.只读[不能变] char *p; const char *p; [T] 字符串内容可以为“hello world”或“aaa”,但只读(不可修改) char const *p; ch ...

  2. Cortext-A7_i.MX 6ULL——多模式DDR控制器(MMDC)

    1.概述 i.MX 6ULL系列芯片的MMDC是一个多模式DDR控制器,支持DDR3/DDR3Lx16和LPDDR2x16的存储类型,MMDC是可配置,高性能,优化的内存控制器. 注:DDR3/DDR ...

  3. JavaScript基础视频教程总结(111-120章)

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  4. Go学习之旅

    备忘这个 官方文档 https://go-zh.org/doc/ Go指南 https://tour.go-zh.org/welcome/1 Go语言圣经 https://yar999.gitbook ...

  5. php实现最简单的MVC框架实例教程

    本文以一个实例的形式讲述了PHP实现MVC框架的过程,比较浅显易懂.现分享给大家供大家参考之用.具体分析如下: 首先,在学习一个框架之前,基本上我们都需要知道什么是mvc,即model-view-co ...

  6. CentOS 7 用firewall-cmd来开放端口

    2.CentOS 7 用firewall-cmd来开放端口 如: firewall-cmd --permanent --add-port=3306/tcp 重新加载 firewall-cmd --re ...

  7. JAVA:调用cmd指令(支持多次手工输入)

    JDK开发环境:1.8 package com.le.tool; import java.io.BufferedReader; import java.io.File; import java.io. ...

  8. 默认空间和webapps下项目部署

    用eclipse默认的工作区和webapps的细节 用{WORKSPACE}表示你的eclipse的工作空间根目录,然后你打开 {WORKSPACE}\.metadata\.plugins\org.e ...

  9. java(一) 基础部分

    1.11.简单讲一下java的跨平台原理 Java通过不同的系统.不同版本.不同位数的java虚拟机(jvm),来屏蔽不同的系统指令集差异而对外体统统一的接口(java API),对于我们普通的jav ...

  10. submit插件安装的问题与集成了插件的submit

    写在最前面,方法有二种.一种是在线安装,这种办法我尝试过,受网速和软件卡顿的问题,进行不顺利.第二种就是我下面介绍的这种,手动安装. 最精华的在后面,可以直接跳转到最后.我找了很久的,最新版的汉化,而 ...