设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 手机 数据 公司
当前位置: 首页 > 服务器 > 安全 > 正文

网络分析技术之葵花宝典(2)

发布时间:2021-01-04 17:43 所属栏目:53 来源:网络整理
导读:5)一招制敌:使用过滤器找出可能有问题的网络行为 tcp.analysis.retransmission or tcp.analysis.fast_retransmission or tcp.flags.reset == 1 or icmp 2. tcpdump参数使用技巧 初次使用tcpdump时,使用tcpdump -h

5)一招制敌:使用过滤器找出可能有问题的网络行为

tcp.analysis.retransmission or 
tcp.analysis.fast_retransmission or 
tcp.flags.reset == 1 or 
icmp

2. tcpdump参数使用技巧

初次使用tcpdump时,使用tcpdump -h命令可以看到它有数十个参数.
根据我们在运维工作中的经验,掌握tcpdump以下5个参数即可满足大部分的工作需要了.

  1. -i参数.使用-i参数指定需要抓包的网卡.如果未指定的话,tcpdump会根据搜索到的系统中状态为UP的最小数字的网卡确定,一般情况下是eth0.使用-i参数通过指定需要抓包的网卡,可以有效的减少抓取到的数据包的数量,增加抓包的针对性,便于后续的分析工作.
  2. -nnn参数.使用-nnn参数禁用tcpdump展示时把IP、端口等转换为域名、端口对应的知名服务名称.这样看起来更加清晰.
  3. -s参数.使用-s参数,指定抓包的包大小.使用-s 0指定数据包大小为262144字节,可以使得抓到的数据包不被截断,完整反映数据包的内容.
  4. -c参数.使用-c参数,指定抓包的数量.
  5. -w参数.使用-w参数指定抓包文件保存到文件,以便后续使用Wireshark等工具进行分析.

3. tcpdump过滤器使用技巧

tcpdump提供了丰富的过滤器,以支持抓包时的精细化控制,达到减少无效信息干扰的效果.我们常用的过滤器规则有下面几个:

  1. host a.b.c.d:指定仅抓取本机和某主机a.b.c.d的数据通信.
  2. tcp port x:指定仅抓取TCP协议目的端口或者源端口为x的数据通信.
  3. icmp:指定仅抓取ICMP协议的数据通信.
  4. !:反向匹配,例如port ! 22,抓取非22端口的数据通信.

以上几种过滤器规则,可以使用and或者or进行组合,例如:

host a.b.c.d and tcp port x

则只抓取本机和某主机a.b.c.d之间基于TCP的目的端口或者源端口为x的数据通信.

tcp port x or icmp

则抓取TCP协议目的端口或者源端口为x的数据通信或者ICMP协议的数据通信.

4. tcpdump在安卓的使用方法

随着移动应用的增加,移动设备访问系统应用的情况越来越多,我们经常会遇到有用户抱怨说使用移动设备访问网站等业务慢的问题.在这种情况下,如果能够同时在移动设备和服务器上同时抓包,那么对于分析问题将会有很大的帮助.

注意:在Android系统抓包时,需要root权限,不同型号手机的root过程不同,在此不再进行赘述.

Android版本的tcpdump下载地址是:

http://www.androidtcpdump.com/android-tcpdump/downloads

另外,在Android系统抓包时,需要使用adb这个工具,下载地址是

http://developer.android.com

我们把下载后的tcpdump和adb工具及其依赖的dll放在c:\adb目录下

四、相关原理及解读

1. tcpdump程序调用模型

我们先回顾下一般网络程序的调用图.

再看一下tcpdump程序调用模型.

 

可见,tcpdump这一类的应用程序完全不同,它依赖的是libpcap.

libpcap使用的是一种称为设备层的包接口(packet interface on device level)技术.

使用这种技术,应用程序可以直接读写内核驱动层面的数据,而不经过完整的Linux网络协议栈.

在C语言中,调用设备层的包接口使用如下的方法:

#include <sys/socket.h>
#include <netpacket/packet.h>
#include <net/ethernet.h> /* the L2 protocols */
packet_socket = socket(PF_PACKET,int socket_type,int protocol);

PF_PACKET套接口:被用于接收和发送在设备驱动层(OSI Layer 2)的数据包.

在以上的函数调用中,socket_type可以是:

  • SOCK_RAW,此时收发的数据包包括链路层头部,例如源MAC和目的MAC地址等.
  • SOCK_DGRAM,此时收发的数据包不包括链路层头部,直接操作IP层头部和数据.

protocol:是指IEEE 802.3协议号.

特别的,如果是htons(ETH_P_ALL)则所有协议的数据包都被接收.

2. tcpdump与iptables的关系

可能会有疑问,如果一种输入的网络通信(INPUT)被iptables给禁止了,那么tcpdump还可以抓取到吗?

答案是肯定的.

  • tcpdump直接从网络驱动层面抓取输入的数据,不经过任何Linux网络协议栈.
  • iptables依赖的netfilter模块,工作在Linux网络协议栈中

因此:

  • iptables对入栈的策略不会影响到tcpdump抓取.
  • 但iptables的出栈策略会影响数据包发送到网络驱动层面,因此,它的出栈策略会影响到tcpdump的抓取.

(编辑:ASP站长网)

网友评论
推荐文章
    热点阅读