网络安全(三)-- 网络嗅探及协议分析技术

news2025/1/16 7:55:40
  • 目标
    • 了解网络嗅探的基本含义
    • 了解tcpdump工具的基本用法
    • 掌握tcpdump工具抓包保存到文件的方法
    • 熟悉wireshark工具的基本用法
    • 掌握借助wireshark抓包工具分析简单网络协议的方法

6.1. 概述

网络嗅探是一种常用的数据收集、分析的方法:

黑客常通过网络嗅探获取主机或网络的控制权,安全人员亦使用网络嗅探进行信息泄露和攻击行为分析。

嗅探所得数据,可以是用户的账号和密码,也可以是一些商用机密数据。

常用的工具包括tcpdump(命令行)、wireshark(图形界面)

6.2. Tcpdump嗅探器

tcpdump是一个用于捕获网络报文,并输出报文内容的工具。

tcpdump 是一款功能强大的命令行嗅探(抓包)工具。

Tcpdump项目官网, 该项目除提供tcpdump工具外,还提供了一个用于网络流量捕获的c/c++库(可移植), 可用于网络协议分析领域的二次开发。

tcpdump在windows的版本叫WinDUMP,

6.2.1. 牛刀小试

  • 基本用法
itcast@itcast $ sudo tcpdump  -i wlp2s0

-i wlp2s0 , -i选项用来指定网络接口设备,wlp2s0 为我网络设备名称,你的电脑可能为eth0

-v-vv, 选项用来显示更详细(繁琐)的输出

tcpdump的总的输出格式:系统时间 协议 源主机.端口 > 目标主机.端口 数据包参数

  • 典型用法

    tcpdump作为命令行抓包神器, 一般抓包保存,借助wireshark图形化协议分析工具进行分析网络包。

    -w filename , 用于指定保存的文件

itcast@itcast $ sudo tcpdump  -i wlp2s0   -w wlp2s0_2018.pcap
tcpdump: listening on wlp2s0, link-type EN10MB (Ethernet), capture size 262144 bytes

添加 -v, 会显示抓取到的包数量,如下

itcast@itcast $ sudo tcpdump  -i wlp2s0  -v -w wlp2s0_2018.pcap
tcpdump: listening on wlp2s0, link-type EN10MB (Ethernet), capture size 262144 bytes
Got 15
  • 帮助信息

    man信息

itcast@itcast $ man tcpdump

-h 选项,显示帮助信息

itcast@itcast $ sudo tcpdump -h
tcpdump version 4.9.2
libpcap version 1.8.1
OpenSSL 1.0.2l  25 May 2017
Usage: tcpdump [-aAbdDefhHIJKlLnNOpqStuUvxX#] [ -B size ] [ -c count ]
        [ -C file_size ] [ -E algo:secret ] [ -F file ] [ -G seconds ]
        [ -i interface ] [ -j tstamptype ] [ -M secret ] [ --number ]
        [ -Q in|out|inout ]
        [ -r file ] [ -s snaplen ] [ --time-stamp-precision precision ]
        [ --immediate-mode ] [ -T type ] [ --version ] [ -V file ]
        [ -w file ] [ -W filecount ] [ -y datalinktype ] [ -z postrotate-command ]
        [ -Z user ] [ expression ]

6.2.2. 高级过滤技巧

tcpdump作为一个命令行工具,可以包含过滤表达式( filter expression),满足表达式的报文将会被捕获。 如没有给过滤表达式,则网络上所有的信息包将会被捕获。

  • 捕获特定主机的网络包(src, dst)host
itcast@itcast $ sudo tcpdump -i wlp2s0 host 61.135.169.121

host 61.135.169.121 获取源ip或者目标ip为61.135.169.121的网络数据包

  • 捕获特定源IP的网络包 src
itcast@itcast $ sudo tcpdump -i wlp2s0 src 61.135.169.121
11:32:09.605183 IP 61.135.169.121.https > localhost.46000: Flags [.], ack 518, win 808, length 0
。。。
  • 捕获特定目标IP的网络包 dst
itcast@itcast $ sudo tcpdump -i wlp2s0 dst  61.135.169.121 

11:33:31.977839 IP localhost.46010 > 61.135.169.121.https: Flags [.], ack 3076821759, win 237, length 0
11:33:31.977858 IP localhost.46004 > 61.135.169.121.https: Flags [.], ack 4115011400, win 237, length 0
。。。
  • 捕获特定端口的网络包 port
itcast@itcast $ sudo tcpdump -i wlp2s0 port 80
  • 捕获特定协议的网络包 tcp/arp/udp/...
itcast@itcast $ sudo tcpdump -i wlp2s0  host 172.16.28.100 and tcp
itcast@itcast $ sudo tcpdump -i wlp2s0  arp
  • 帮助信息
itcast@itcast $ man pcap-filter

补充: 三种逻辑运算: 取非运算( ‘not ' or '! ‘)、 与运算(’and’ or,’&&')、 或运算(’or’ or ‘||’)

6.2.3. 附录

Panda.Guo@2018-04-27 16:15:09 $ man tcpdump
-A 以ASCII格式打印出所有分组,并将链路层的头最小化。
-c 在收到指定的数量的分组后,tcpdump就会停止。
-C 在将一个原始分组写入文件之前,检查文件当前的大小是否超过了参数file_size 中指定的大小。
    如果超过了指定大小,则关闭当前文件,然后在打开一个新的文件。
    参数 file_size 的单位是兆字节(是1,000,000字节,而不是1,048,576字节)。

-d 将匹配信息包的代码以人们能够理解的汇编格式给出。
-dd 将匹配信息包的代码以c语言程序段的格式给出。
-ddd 将匹配信息包的代码以十进制的形式给出。
-D 打印出系统中所有可以用tcpdump截包的网络接口。
-e 在输出行打印出数据链路层的头部信息。
-E 用spi@ipaddr algo:secret解密那些以addr作为地址,并且包含了安全参数索引值spi的IPsec ESP分组。
-f 将外部的Internet地址以数字的形式打印出来。
-F 从指定的文件中读取表达式,忽略命令行中给出的表达式。
-i 指定监听的网络接口。
-l 使标准输出变为缓冲行形式,可以把数据导出到文件。
-L 列出网络接口的已知数据链路。
-m 从文件module中导入SMI MIB模块定义。该参数可以被使用多次,以导入多个MIB模块。
-M 如果tcp报文中存在TCP-MD5选项,则需要用secret作为共享的验证码用于验证TCP-MD5选选项摘要(详情可参考RFC 2385)。
-b 在数据-链路层上选择协议,包括ip、arp、rarp、ipx都是这一层的。
-n 不把网络地址转换成名字。
-nn 不进行端口名称的转换。
-N 不输出主机名中的域名部分。例如,‘nic.ddn.mil‘只输出’nic‘。
-t 在输出的每一行不打印时间戳。
-O 不运行分组分组匹配(packet-matching)代码优化程序。
-P 不将网络接口设置成混杂模式。
-q 快速输出。只输出较少的协议信息。
-r 从指定的文件中读取包(这些包一般通过-w选项产生)。
-S 将tcp的序列号以绝对值形式输出,而不是相对值。
-s 从每个分组中读取最开始的snaplen个字节,而不是默认的68个字节。
-T 将监听到的包直接解释为指定的类型的报文,常见的类型有rpc远程过程调用)和snmp(简单网络管理协议;)。
-t 不在每一行中输出时间戳。
-tt 在每一行中输出非格式化的时间戳。
-ttt 输出本行和前面一行之间的时间差。
-tttt 在每一行中输出由date处理的默认格式的时间戳。
-u 输出未解码的NFS句柄。
-v 输出一个稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息。
-vv 输出详细的报文信息。
-w 直接将分组写入文件中,而不是不分析并打印出来。

6.3. Wireshark 网络协议分析工具

Wireshark(前身Ethereal)是一个网络报文分析工具。 网络封包分析软件的功能是撷取网络封包,并尽可能显示出最为详细的网络封包资料。 2006年6月,因为商标的问题,Ethereal更名为Wireshark。

wireshark 官网

6.3.1. 基本用法

按照国际惯例,从最基本的程序启动说起。

开启抓包

启动wireshark程序后, 在在接口列表中选择接口名称(见下图中标识1),然后点击“开始捕获分组”(见下图标识2)在此接口上抓包。 本例选取enp8s0, 具体因电脑网卡不同而异, 关于enp8s0的含义,后续我写一篇网文做一正式说明。

报文捕获窗口

选取接口名称并点击开始捕获之后,就可以看到实时接收的报文。Wireshark会捕捉系统发送和接收的每一个报文。如果抓取的接口是无线并且选项选取的是混合模式,那么也会看到网络上其他报文。

接下来再界面我们可以看到wireshark抓到的实时数据包。我们对数据包的各个字段进行解释。

  • No:代表数据包标号。
  • Time:在软件启动的多长时间内抓到。
  • Source:来源ip。
  • Destination: 目的ip。
  • Protocol:协议。
  • Length:数据包长度。
  • info:数据包信息。

在上面wireshark抓包窗口中,可以简单分割成三个小窗口,上部窗口每一行对应一个网络报文,点击某一行可以在下面两个窗口看到更多信息。中间窗口描述的是报文里面每一层的详细信息。底 部窗口以十六进制和ASCII码的方式列出报文内容。

停止抓包

在抓包过程中,我们随时可以点击图标停止或启动。来停止或者启动抓取数据包。 

在上图中,标识2的地方, 为停止抓取数据包, 标识3的地方,为再次启动抓取数据包。

6.3.2. 报文过滤及分析

报文过滤,是wireshark出彩的地方,也是网络协议的分析的重要工作步骤

在下图方框中,输入相应的源ip、目的ip、协议等等表达式,点击箭头部分,在窗口中即可显示过滤后的数据包。

  • 典型IP地址过滤表达式

    • ip.src==172.16.28.102 : 指定源IP
    • ip.dst==192.168.0.111 : 指定目标IP
    • ip.addr == 192.0.2.1 : 指定IP,(不区分源和目标IP)
    • ip.src==192.168.43.167 and ip.dst==223.166.152.109 : 指定源ip 并且目标IP
    • ip.src==192.168.43.167 or ip.dst==223.166.152.109 : 指定源ip 或者目标IP
  • 典型端口过滤表达式

    • tcp.port ==52304
    • tcp.dstport==30
    • tcp.srcport==52304
    • udp.....
  • 典型网络协议过滤表达式

    • telnet
    • tcp
    • udp
    • 。。。。

6.3.3. 网络嗅探实战

  • 目标: 通过抓取telnet网络报文, 分析并获取用户登录口令

    telnet 登录典型命令telnet 目标主机ip -l 用户名 , 在Password后输入口令,

itcast@itcast $ telnet 127.0.0.1 -l itcast
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
Password: 
---> 输入口令

Last login: Thu Sep  6 18:19:01 CST 2018 from localhost on pts/1
。。。。。。
  • 补充

    安装telnet和telnetd服务

itcast@itcast $ sudo apt-get install telnet telnetd

6.3.4. 补充: 普通用户抓包配置

  • 添加wireshark用户组。
Panda.Guo@2018-04-27 10:08:46 $  groupadd wireshark
Panda.Guo@2018-04-27 10:07:30 $ sudo cat /etc/group | grep "wireshark"
wireshark:x:128
  • 添加当前用户(我的为panda,具体根据情况决定)到wireshark组
Panda.Guo@2018-04-27 10:12:23 $ sudo usermod -aG wireshark panda
Panda.Guo@2018-04-27 10:13:05 $ sudo cat /etc/group | grep "wireshark"
wireshark:x:128:panda
  • 将dumpcap更改为wireshark用户组
Panda.Guo@2018-04-27 10:16:08 $ ls -l /usr/bin/dumpcap 
-rwxr-xr-- 1 root root  96464 Jan 23 01:03 /usr/bin/dumpcap
Panda.Guo@2018-04-27 10:15:00 $ sudo chmod  root:wireshark /usr/bin/dumpcap
Panda.Guo@2018-04-27 10:16:23 $ ls -l /usr/bin/dumpcap 
-rwxr-xr-- 1 root wireshark 96464 Jan 23 01:03 /usr/bin/dumpcap
  • 设置 setuid (root), 使普通用户执行具备root用户权限,或者添加能力

方法一:setuid root

Panda.Guo@2018-04-27 10:19:16 $ sudo chmod 4754 /usr/bin/dumpcap
Panda.Guo@2018-04-27 10:19:34ls -l /usr/bin/dumpcap 
-rwsr-xr-- 1 root wireshark 96464 Jan 23 01:03 /usr/bin/dumpcap

方法二:添加能力

Panda.Guo@2018-04-27 10:20:39 $ sudo setcap  "cap_net_admin,cap_net_raw+eip" /usr/bin/dumpcap
Panda.Guo@2018-04-27 10:21:28sudo getcap /usr/bin/dumpcap 
/usr/bin/dumpcap = cap_net_admin,cap_net_raw+eip

6.4. 知识拓展

  • 网络嗅探的工作原理

    所有网络接口都有一个硬件地址(MAC),用于区别其他网络设备。

    在正常情况下,一个合法的网络接口应该只能响应属于自己的网络数据。

    然而,当将本地网卡设置成混杂状态时,它将对所有网络数据进行响应。

    由于嗅探器工作于网络环境的底层(链路层),它能够拦截所有在网络上传送的数据,再通过相应的软件工具,就可以实时分析这些数据的内容。

  • 交换网络

    在共享网络中,把网卡设为混杂模式就可以监听所有的网络数据包,但是在交换网络中,情况就发生了变化。

    以太网分为共享式以太网和交换式以太网:

    共享式以太网通常以集线器作为网络设备,交换式以太网通常使用交换机作为网络连接设备。

    共享式以太网中数据帧以广播方式传送到每个以太网端口,网内每台主机的网卡能接收到网内的所有数据帧。因此只要把网卡设置成为混杂模式就可以获取到这本地网卡的所有数据帧。

    最典型的交换网络使用交换机连接,在交换机中可以设为一个端口一个MAC地址,形成一个端口对应一个MAC地址对。这样当网络数据包到达端口时,而不是转发给所有的端口,只是转发MAC对应的端口。这样,其他端口的通讯不受干扰,所以其他端口上的主机就无法接收到网络上的数据包了。

Tips:从网络嗅探角度看,交换机连接网络,比hub连接网络要安全。

  • 数据包在局域网内的传输方式

    众所周知,数据包在互联网上的传播是根据IP地址进行寻址的,但是完整的过程并非如此。数据包通过IP地址可以达到的最远的地点就是目标主机所在的子网,而在该子网内的寻址却是使用物理地址的,即MAC地址。

    数据包被传送到目标主机所在的子网时,如果该子网为共享式网络(由集线器连接),数据包将被广播方式传播出去,这意味着该子网内的所有主机都可以接收到该数据包。当主机接收到数据包后通常会先检查其目的MAC地址,如果目的MAC地址不是自己,那么就是丢弃,只有目的MAC地址为自己的数据包才会将其交付给上一层处理。

    Sniffer将网卡设置为混杂模式,这样就可以接收到所有的数据包了,达到了嗅探了目的。

    (如果为交换网络,则根据MAC地址转发到相应主机,当MAC地址为FFFFFFFFFF...全1时广播)。

    上述内容待确认。

  • 设置网卡混杂模式

    网卡当前是否是混杂模式, 关键通过ifconfig命令,查看flags项中,是否有PROMISC.

#设置混杂模式(其中enp8s0为你的网络接口名称,视具体而定)
itcast@itcast $ sudo ifconfig enp8s0 promisc
itcast@itcast $ sudo ifconfig enp8s0 
enp8s0: flags=4355<UP,BROADCAST,PROMISC,MULTICAST>  mtu 1500
        ether e0:db:55:f0:07:d0  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device interrupt 16  

#取消混杂模式
itcast@itcast $ sudo ifconfig enp8s0 -promisc
itcast@itcast $ sudo ifconfig enp8s0 
enp8s0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        ether e0:db:55:f0:07:d0  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device interrupt 16  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1287592.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

资料分析(花生)

基期A&#xff08;给出BR或BX&#xff09; 前期&#xff1a;代入、直除、假设分配隔年前期&#xff1a;求出间隔增长率&#xff0c;再变成第一类考法前期差值&#xff1a;假设分配法求得两个前期作差。 现期B 有增量求现期&#xff1a;求出 X&#xff0c;列不等式即可有增速求现…

uniapp 使用 $emit和$on——$on中无法为data中的变量赋值

问题在于this的指向&#xff0c; 解决办法是使用变量保存$on&#xff0c;其次再为data中的值赋值 以下是具体代码&#xff1a; 1、html代码&#xff1a; <view class"form_picker" click"selePositionFun()"><view class""><inp…

Leetcode 77 组合

题意理解&#xff1a; 给定两个整数 n 和 k&#xff0c;返回范围 [1, n] 中所有可能的 k 个数的组合。 如&#xff1a;n3,k2,则有&#xff1a;12 13 23 一般&#xff0c;我们使用回溯法来解决组合问题。 组合问题没有顺序要求&#xff0c;所以 12 21 是同一个组合&#xff08;如…

centos7安装Elasticsearch7系列

背景 今天公司项目需要使用Elasticsearch7.17.7。所有网上搜索了一番&#xff0c;查到一个很不错安装方式分享给大家。 Elasticsearch官网发布 从 Elasticsearch 7.x 版本开始&#xff0c;Elasticsearch 发行版包括了自己的 JDK。因此&#xff0c;您不需要单独安装 Java。以…

Android View.inflate 和 LayoutInflater.from(this).inflate的区别

前言 两个都是布局加载器&#xff0c;而View.inflate是对 LayoutInflater.from(context).inflate的封装&#xff0c;功能相同&#xff0c;案例使用了dataBinding。 View.inflate(context, layoutResId, root) LayoutInflater.from(context).inflate(layoutResId, root, fals…

CLIP在Github上的使用教程

CLIP的github链接&#xff1a;https://github.com/openai/CLIP CLIP Blog&#xff0c;Paper&#xff0c;Model Card&#xff0c;Colab CLIP&#xff08;对比语言-图像预训练&#xff09;是一个在各种&#xff08;图像、文本&#xff09;对上进行训练的神经网络。可以用自然语…

JS箭头函数

箭头函数 1. 基本语法 // // 一般函数const fn function() {console.log(123);}// 箭头函数const fn () > {console.log(123);}fn()const fn (x) > {console.log(x);}fn(1)// 只有一个形参的时候可以省略小括号const fn x > {console.log(x);}fn(1)// 只有一行代…

基于c++版本链队列改-Python版本链队列基础理解

##基于链表的队列实现 可以将链表的“头节点”和“尾节点”分别视为“队首”和“队尾”&#xff0c;规定队尾仅可添加节点&#xff0c;队首仅可删除节点。 ##图解 ##基于链表的队列实现代码 class ListNode:"""定义链表"""def __init__(self)…

nodejs微信小程序+python+PHP本科生优秀作业交流网站的设计与实现-计算机毕业设计推荐

通过软件的需求分析已经获得了系统的基本功能需求&#xff0c;根据需求&#xff0c;将本科生优秀作业交流网站功能模块主要分为管理员模块。管理员添加系统首页、个人中心、用户管理、作业分类管理、作业分享管理、论坛交流、投诉举报、系统管理等操作。 随着信息化社会的形成…

Mybatis XML 配置文件

我们刚开始就有说Mybatis 的开发有两种方式: 1.注释 2.XML 注解和 XML 的方式是可以共存的 我们前面说的都是注释的方式,接下来是XML方式 XML的方式分为三步 : 1.配置数据库(配在 application.yml 里面) 这个跟注释的配置是一样的,username应该都是一样的,password记得写…

git常用命令指南

目录 一、基本命令 1、创建分支 2、切换分支 3、合并分支 4、初始化空git仓库 二、文件操作 1、创建文件 2、添加多个文件 3、查看项目的当前状态 4、修改文件 5、删除文件 6、提交项目 三、实际操作 1、创建目录 2、进入新目录 3、初始化空git仓库 4、创建文…

【OpenGauss源码学习 —— (RowToVec)算子】

VecToRow 算子 概述ExecInitRowToVec 函数ExecRowToVec 函数VectorizeOneTuple 函数 ExecEndRowToVec 函数总结 声明&#xff1a;本文的部分内容参考了他人的文章。在编写过程中&#xff0c;我们尊重他人的知识产权和学术成果&#xff0c;力求遵循合理使用原则&#xff0c;并在…

使用AWS Glue与AWS Kinesis构建的流式ETL作业(二)——数据处理

大纲 2 数据处理2.1 架构2.2 AWS Glue连接和创建2.2.1 创建AWS RedShift连接2.2.2 创建AWS RDS连接&#xff08;以PG为例&#xff09; 2.3 创建AWS Glue Job2.4 编写脚本2.4.1 以AWS RedShift为例2.4.2 以PG为例 2.5 运行脚本 2 数据处理 2.1 架构 2.2 AWS Glue连接和创建 下…

DSSS技术和OFDM技术

本内容为学习笔记&#xff0c;内容不一定正确&#xff0c;请多处参考进行理解 https://zhuanlan.zhihu.com/p/636853588 https://baike.baidu.com/item/OFDM/5790826?frge_ala https://zhuanlan.zhihu.com/p/515701960?utm_id0 一、 DSSS技术 信号替代&#xff1a;DSSS技术为…

谈一谈内存池

文章目录 一&#xff0c;什么是内存池二&#xff0c;进程地址空间中是如何解决内存碎片问题的三&#xff0c;malloc的实现原理四&#xff0c;STL中空间配置器的实现原理五&#xff0c;高并发内存池该内存池的优势在哪里内存池的设计框架内存申请流程ThreadCache层CentreCache层…

论文阅读:一种通过降低噪声和增强判别信息实现细粒度分类的视觉转换器

论文标题&#xff1a; A vision transformer for fine-grained classification by reducing noise and enhancing discriminative information 翻译&#xff1a; 一种通过降低噪声和增强判别信息实现细粒度分类的视觉转换器 摘要 最近&#xff0c;已经提出了几种基于Vision T…

Linux 中用户与权限

1.添加用户 useradd 1&#xff09;创建用户 useradd 用户名 2&#xff09;设置用户密码 passwd 用户名 设置密码是便于连接用户时使用到&#xff0c;如我使用物理机链接该用户 ssh 用户名 ip 用户需要更改密码的话&#xff0c;使用 passwd 指令即可 3)查看用户信息 id 用…

【数据结构(六)】希尔排序、快速排序、归并排序、基数排序的代码实现(3)

文章目录 1. 希尔排序1.1. 简单插入排序存在的问题1.2. 相关概念1.3. 应用实例1.3.1. 交换法1.3.1.1. 逐步推导实现方式1.3.1.2. 通用实现方式1.3.1.3. 计算时间复杂度 1.3.2. 移动法 2. 快速排序2.1. 相关概念2.2. 实例应用2.2.1. 思路分析2.2.2. 代码实现 2.3. 计算快速排序的…

Spatial Data Analysis(三):点模式分析

Spatial Data Analysis&#xff08;三&#xff09;&#xff1a;点模式分析 ---- 1853年伦敦霍乱爆发 在此示例中&#xff0c;我将演示如何使用 John Snow 博士的经典霍乱地图在 Python 中执行 KDE 分析和距离函数。 感谢 Robin Wilson 将所有数据数字化并将其转换为友好的 G…

(04730)电路分析基础之电阻、电容及电感元件

04730电子技术基础 语雀&#xff08;完全笔记&#xff09; 电阻元件、电感元件和电容元件的概念、伏安关系&#xff0c;以及功率分析是我们以后分析电 路的基础知识。 电阻元件 电阻及其与温度的关系 电阻 电阻元件是对电流呈现阻碍作用的耗能元件&#xff0c;例如灯泡、…