本文记录如何利用facebook ATC使用搭建一个弱网环境,与前一篇Dash net(网速控制,可变)类似,但是这个弱网环境不能动态变化,相比DASH_NET好处在可以连接多个设备,分别控制网速

为了更方便的配置环境,写了一个python脚本,建议阅读完本文后参考脚本进行配置.

工具简介

ATC是FaceBook开源的移动网络测试工具Augmented Traffic Control(ATC),能够方便的让我们模拟各种网络环境进行测试。

ATC有两个最吸引人的特点:

在手机上通过Web界面就可以随时切换不同的网络环境。
多个手机可以连接到同一个WIFI下,相互之间模拟的网络环境各不影响。

只要搜索facebook ATC就可以找到很多关于ATC环境搭建的文章,比如说FaceBook ATC 弱网测试工具环境搭建,我总结了一下,主要分以下几个步骤:
1.安装hostap。hostap的主要作用是将无线网卡作为一个分享的热点。
2.安装isc-dhcp-server。这是一个dhcp服务器,连上热点的手机通过dhcp服务器获取ip,进而才能通过网关上网。
3.设置NAT转发。简单来说就是把一个可以上网的网卡流量转发到分享热点的网络。
4.安装ATC。这是控制网速的主要部件,具体原理我了解的也不是很深。
5.安装python web服务器。这是供用户设置网速的界面,我想ATC用python web原因可能是python操作系统的东西更擅长些,虽然python在web方面没有什么优势。

搭建步骤

本文搭建环境,联想thinkcertre 8300t(只有一个有线网卡的台式机)装有ubuntu16.04LTS,tplink wr886n(路由器可以不一样,只有要支持交换机模式(ap模式)就可以),一个有线的usb网口(用来连接电脑和路由器)

使用路由器代替无线网卡

因为这里想用路由器来代替主机的无线网卡,所以第一步不需要去配置,也可以不用安装hostap。

整个环境配置过程基本都需要root权限,可以通过命令sudo su切换到root用户,但是在这里个人建议不要这样,在命令前加sudo来执行就行了。

(1, 2, 3, 4步骤是为了使路由器像主机的无线网卡那样使用)
1.将路由器设置成交换机模式,不同路由器设置方式不一样

1)wr886n只要在设置里面把dhcp功能关闭就行,现在就已经是交换机模式了
2)更改路由器lan口的ip地址,使其不为网关地址,在lan口设置中,lan口ip设置改为手动,ip我改的是192.168.1.10(一般网关地址会设置成192.168.1.1),子网掩码为255.255.255.0
3)用usb网口连接电脑与路由器,网线连接的是路由器的lan口(注意不能连wan口)
4)连上后执行ifconfig,可以查看电脑是否连上路由器
我的输出有eno1,enx00e04c360211,lo(eno1是主机已有的网络接口,enx00e04c360211是usb接口,lo不用管)

2.安装dhcp
sudo apt-get install isc-dhcp-server(这一步要将与路由器连接的网线断开,保证电脑能正常联网下载安装)
此时执行sudo dhcpd,如果输出了命令详解则说明安装成功
像我的会报can’t open /var/lib/dhcp/dhcpd.leases for append,这种错误
我google了一下,说是16.04中dhcp的bug,说是修复了,但是我的没有

执行ls -l /var/lib/dhcp/dhcpd.leases
如果没有该文件就新建该文件,如果有看看权限,需要是可写的,关机后启动可能有没有权限了,需要从这步开始检查
执行chmod 777 /var/lib/dhcp/dhcpd.leases
更改完权限执行sudo dhcpd,应该没有报错了

3.执行下面命令查看本机DNS,后续配置需要使用

sudo nmcli dev show | grep IP4

在输出中,IP4.DNS后面的是DNS地址

4.配置dhcpd
dhcpd的配置文件是/etc/dhcp/dhcpd.conf
在终端执行

1)sudo vim /etc/dhcp/dhcpd.conf
在文件最后输入以下内容:

subnet 192.168.1.0 netmask 255.255.255.0
{range 192.168.1.2 192.168.1.10;option routers 192.168.1.1;option domain-name-servers 10.210.97.123,10.210.97.21;#这里就是填看看查看的DNS地址,我有多个,所以我都写上了,用逗号隔开
}

注意:在subnet里定义的网段要与网卡IP所处网段一致(这个网卡指的是usb那个连接路由器的接口),而这个网卡ip我们后面会进行设置(将其设置成192.168.1.1,即当作网关使用)
2)sudo vim /etc/default/isc-dhcp-server
将文件的INTERFACES=”“行改为INTERFACES=”enx00e04c360211”
看注释,这行意思就是,写出dhcp server要进行ip分配的网口,这里就是连接usb的那个网口

5.设置enx00e04c360211 (usb接口的ip)

sudo ifconfig enx00e04c360211 192.168.1.1 netmask 255.255.255.0

6.启动dhcp-server
执行下面命令(我电脑没有dhcp-server文件夹,我自己新建了一个,然后执行的下面命令)

sudo touch /var/run/dhcp-server/dhcpd.pid
sudo chmod 777 /var/run/dhcp-server/dhcpd.pid
sudo dhcpd enx00e04c360211 -pf /var/run/dhcp-server/dhcpd.pid

然后执行sudo netstat -uap
当显示在program name列显示dhcp时表示dhcp服务安装配置启动成功

7.IP转发
网上有两种方法
- 执行sudo bash -c “echo 1 >/proc/sys/net/ipv4/ip_forward”
- 在文件/etc/sysctl.conf中,取消这一行的注释:
net.ipv4.ip_forward= 1
然后执行使之立即生效
sudo sysctl -p
我两种方式都执行了

8.设置NAT (eno1为连接internet的网卡,enx00e04c360211为usb网卡用于连接路由器)

sudo iptables -F
sudo iptables -X
sudo iptables -t nat -A POSTROUTING -o eno1 -j MASQUERADE
sudo iptables -A FORWARD -i eno1 -o enx00e04c360211 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -i enx00e04c360211 -o eno1 -j ACCEPT

到这里路由的NAT功能已经被启用,我们将刚才配置的iptables保存下来以便于下次使用:

sudo bash -c "iptables-save > /etc/iptables.ipv4.nat"

编辑
/etc/network/interfaces
然后在最后加上下面这行以使每次启动都自动加载iptables配置:
up iptables-restore < /etc/iptables.ipv4.nat

安装atc

  • atc的git地址https://github.com/facebook/augmented-traffic-control
  • atc的官方文档http://facebook.github.io/augmented-traffic-control/docs/install.html
  • git中的readme与官方安装文档的区别是官方文档是在python的一个沙箱里安装的(虚拟环境)
  • 注意atc支持python2.7和django1.10,务必对应这两个版本

1.首先使用git clone https://github.com/facebook/augmented-traffic-control.git拉取仓库代码
2. sudo apt-get install python-pip(因为ubuntu16.04自带的是python2.7,所以不用另外安装python了)
3. 复制git的安装方法sudo pip install atc_thrift atcd django-atc-api django-atc-demo-ui django-atc-profile-storage
4. 但是这样安装django的版本不一定是1.10的,(python -m django –version,查看安装的版本)
1)要执行sudo pip uninstall django卸载之前安装的django
2)然后执行sudo pip install django==1.10,安装1.10版本的django
5. cd进入拉下来的atc仓库
6. django-admin startproject atcui
7. cd atcui
8. 修改atcui/settings.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',
)

9.修改atcui/urls.py文件,添加如下代码

...
...
from django.views.generic.base import RedirectView
from django.conf.urls import includeurlpatterns = [...# Django ATC APIurl(r'^api/v1/', include('atc_api.urls')),# Django ATC Demo UIurl(r'^atc_demo_ui/', include('atc_demo_ui.urls')),# Django ATC profile storageurl(r'^api/v1/profiles/', include('atc_profile_storage.urls')),url(r'^$', RedirectView.as_view(url='/atc_demo_ui/', permanent=False)),
]

10.sudo atcd –atcd-wan eth0 –atcd-lan eth1 –atcd-dont-drop-packets(其中eth0代表电脑的输入网卡名,eth1代表输出网卡名)
11.python manage.py runserver 0.0.0.0:8000
到这步手机连上wifi,网页打开192.168.1.1:8000就可以控制调节网速了
12.执行utils/restore-profiles.sh localhost:8000在网页中有fb提前设置好的一些例子

运行完atc后,会将之前的配置存储在/var/lib/atcd.db文件里(如果之前将某个终端设为100%loss,这个终端就打不开网页了,可以删除该文件,重新连接)

Facebook ATC弱网环境搭建相关推荐

  1. (转)Facebook ATC弱网环境搭建

    用户的网络环境并不是一直处于能高速传输的状态,网络的好坏受用户所处地理位置,同一基站使用人数等许多因素影响.百度公开的数据显示,百度APP使用者约有1%的人群处于弱网状态.所以研究弱网测试,来提升这部 ...

  2. 弱网环境搭建之 Linux tc iptables 详解

    弱网环境搭建之 Linux tc 详解 0. 背景 1. 工具选择 2. 搭建流程 2.1 Linux tc 简介 2.2 弱网搭建思路 2.3 完整代码展示 0. 背景 笔者有一个需要搭建弱网环境来 ...

  3. 【测试笔记】弱网环境搭建—clumsy0.2

    因工作需求,最近接触了弱网环境搭建,浅浅的总结一下给手机搭建弱网环境的整个过程: 实现效果:手机连接指定WiFi上网,延时和丢包在弱网预期内 预期:ping阿里云时延>300ms:丢包率10%. ...

  4. FaceBook ATC 弱网测试工具环境搭建

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

  5. Android 中流量、电量、弱网环境怎么测?

    在使用安卓机时,可能又是会经常感受到以下问题: 1.应用后台开着,手机很快没有电了---应用耗电大: 2.首次/非首次启动应用,进入应用特别慢---应用启动慢: 3.使用使用过程中,越来越卡---CP ...

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

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

  7. 网易云信即时通讯推送保障及网络优化详解(三):如何在弱网环境下优化大数据传输

    对于移动 APP 来说,IM 功能正变得越来越重要,它能够创建起人与人之间的连接.社交类产品中,用户与用户之间的沟通可以产生出更好的用户粘性. 在复杂的 Android 生态环境下,多种因素都会造成消 ...

  8. IM 推送保障及网络优化详解(三):如何在弱网环境下优化大数据传输?

    对于移动 App 来说,IM 功能正变得越来越重要,它能够创建起人与人之间的连接.社交类产品中,用户与用户之间的沟通可以产生出更好的用户粘性. 在复杂的 Android 生态环境下,多种因素都会造成消 ...

  9. 如何使用弱网环境来验证游戏中的一些延迟问题

    关于弱网 在当今移动互联网盛行的时代,网络的形态除了有线连接,还2G/3G/Edge/4G/Wifi等多种手机网络连接方式.不同的协议.不同的制式.不同的速率,使移动应用运行的场景更加丰富. 从测试角 ...

最新文章

  1. RS-232串行口连接线 com口连接线 并口链接线 双绞线 交叉线 直连线
  2. 熟悉Java String的使用,熟悉String的各种函数,Java中各种变量类型
  3. Junit单元测试遇到的initializationerror:method initializationerror not found
  4. 免费下载 | 全景揭秘阿里文娱智能算法
  5. 无法安装声卡及MODEM驱动
  6. uni-app的列表搜索框_微信怎么搜索小程序?小程序能有什么用?
  7. 百度牵手“造王者”汉得,ToB 战场将迎大变局?| 畅言
  8. 年总结(七):这半年的生活(2017.1—2017.7)
  9. 使用NuGet安装EntityFramework4.2
  10. 生命真的很脆弱,理性看待过劳
  11. 如何为项目中的单个文件禁用ARC?
  12. 精雕道路怎么遍弧形_沥青冷补料多少钱一吨?怎么施工?效果怎么样?
  13. 局域网网络相关的问题
  14. fingerprint模块管理指纹识别
  15. 书到用时方恨少,绝知此事要躬行--谈TCP/UDP编程
  16. Wangle源码分析:Pipeline、Handler、Context
  17. 《C++ Primer 第5版》-11.1使用关联容器-康奈尔笔记
  18. 高防IP有什么优势?
  19. 计算机桌面没有打字,电脑输入法不见了怎么办
  20. Meterpreter后渗透模块命令字典

热门文章

  1. PCB设计:Altium Designer如何单独生成PCB坐标文件
  2. java递归算法[32]
  3. 使用console.time打印代码运行时间
  4. php 和mysql中文乱码问题,常见php与mysql中文乱码问题解决办法
  5. 居留后台php+iapp源码
  6. 渗透测试-web到内网的总结
  7. 阿里云服务器搭建wordpress个人博客——学生优惠,专属网站
  8. IPad GoodReader阅读文档实现即点即译取词在线翻译
  9. (基于Packet Tracer 的校园网络设计方案(计算机网络与课程实验)(三)——Run Time 观察报文传输过程
  10. Linux多线程编程-线程函数返回值(返回简单数据类型)