【设备识别】数据包中的IP、MAC地址匿名化

2022.6.27
流量分类需要进行ip和mac地址匿名化,因为这两项不可作为特征。
需要工具:kali系统的tcpreplay、wireshark的tshark(kali下的tshark也可以)
7.7更新,用Python更方便

参考:从实践中学习wireshark分析——微信读书
tcpreplay介绍及安装——Linux系统
Windows安装tcpreplay及其他Linux软件——这里介绍了如何修改各层信息
看前三个应该就够了,补充一个tcprewrite批量修改pcap数据报文——解释tcprewrite参数


准备阶段

kali安装好了之后是这样的,我这里装的tcpreplay是4.4.0,装4.4.1会报错,猜想原因可能是库不匹配。
在这里插入图片描述
在root权限下输入tcpreplay -h,显示帮助就可以用了

在这里插入图片描述

1、利用tshark去掉原始pcap文件里的icmp协议数据包

平台:这里用的是Win10,kali下面也可以

  1. 把要处理的pcap文件复制到wireshark安装目录下(如果用kali就不用进行这一步,直接进入第3步就行)

  2. 以管理员权限运行cmd,进入wireshark安装目录

  3. 如果只有一个pcap,直接在cmd里输入
    tshark -r whatsapp.pcap -2 -R "not icmp" -w 9whatsapp.pcap

    解释一下参数:
    -r,读文件,whatsapp.pcap是要读取的文件名
    -2 -R ,后面接过滤器,和wireshark界面一样,"not icmp"是去掉icmp协议的数据包,这里要注意前面有个-2
    -w 输出文件,9whatsapp.pcap是要输出的文件名
    在这里插入图片描述

  4. 如果有多个pcap要处理,可以写个shell脚本:
    1. 在wireshark目录下新建一个txt文件,然后输入

    #这里是win10的代码
    tshark -r Microsof.pcap -2 -R "not icmp" -w 9Microsof.pcap
    tshark -r MicrosoftRPCEndpointMapper.pcap -2 -R "not icmp" -w 9MicrosoftRPCEndpointMapper.pcap
    tshark -r MS-SQLserver.pcap -2 -R "not icmp" -w MSSQLserver.pcap
    ……
    

    这里发现tshark好像不能识别路径分隔符\,如果输入或者输出有分隔符的话会报错,所以win10系统要把需要处理的pcap都复制到wireshark目录下
    在这里插入图片描述
    2. 写完之后保存,然后重命名为run.bat,在cmd里面输入run就可以运行了

    在这里插入图片描述
    7.7 更新:SplitCap工具可以直接划分流/会话,这个脚本用的是tshark,速度较慢

    #这里是kali的保存单向流shell脚本
    #!/bin/bash
    path1="/home/kali/Downloads/tcpreplay-4.4.0/session/software-11/Train" #原始会话pcap文件夹,这里的文件结构是Train/Amazon/Amazon1.pcap
    
    for file in $(ls -A  $path1) #读取文件夹名字
    do
       #echo $file
       #create folder
       mkdir /home/kali/Desktop/netflow/wireshark-out/Train/$file #根据原始pcap文件夹创建新的文件夹
       path2="$path1/$file"
       #echo $path2
       dir=$(ls -A  $path2)  #寻找文件夹下的pcap
       for i in $dir
       do
          echo $i
          tshark -r  $path2/$i -2 -R "not ip.src==192.168.123.19" -w /home/kali/Desktop/netflow/wireshark-out/Train/$file/$i #输出文件
       done
    done
    

2、利用tcpreplay重置IP和MAC地址

  1. 将上面处理后的pcap复制到kali虚拟机中的tcpreplay目录下(应该也可以复制到其他目录,没有tshark那么严格)
  2. 如果是处理一个pcap,以root权限输入
    tcpprep -a client -i test.pcap -o test1.cache
    tcprewrite --srcipmap=0.0.0.0:0.0.0.0 --dstipmap=0.0.0.0:0.0.0.0 --enet-dmac=00:00:00:00:00:00 --enet-smac=00:00:00:00:00:00  --endpoints=0.0.0.0:0.0.0.0 --cachefile=test1.cache --infile=test.pcap  --outfile=output.pcap -C
    
  3. 如果是处理多个pcap,新建一个run.sh,写入下面代码,然后保存,在root终端中运行sh run.sh
    # 2022.7.1更新代码
    #!/bin/bash
    path1="/home/kali/Desktop/netflow/wireshark-out/Train" #单向流pcap所在文件夹
    
    for file in $(ls -A  $path1)
    do
       echo $file
       mkdir /home/kali/Downloads/tcpreplay-4.4.0/0004/software-11/Train/$file # 创建文件夹
       path2="$path1/$file"
       #echo $path2
       dir=$(ls -A  $path2)  # 列出pcap文件
       #echo $dir
       for i in $dir
       do
          echo $i
          tcpprep -a client -i $path1/$file/$i -o /home/kali/Downloads/tcpreplay-4.4.0/session/Train.cache && tcprewrite --srcipmap=0.0.0.0:0.0.0.0 --dstipmap=0.0.0.0:0.0.0.0 --enet-dmac=00:00:00:00:00:00 --enet-smac=00:00:00:00:00:00  --endpoints=0.0.0.0:0.0.0.0 --cachefile=/home/kali/Downloads/tcpreplay-4.4.0/session/Train.cache --infile=$path1/$file/$i  --outfile=/home/kali/Downloads/tcpreplay-4.4.0/0004/software-11/Train/$file/$i -C 
       done
    done
    

    需要先用tcpprep将pcap处理为cache文件,再用tcpwrite处理cache文件

解释一下tcpprep用到的参数:更多参数解释参考这里 还有这里 tcprewrite详细说明
tcpprep -a client -i test.pcap -o test1.cache 将数据包分成客户端和服务器端

-a 参数的介绍(搬运自上面的参考链接)
在这里插入图片描述

  • -a Split traffic in Auto Mode 一般情况下都需要该参数,表示按模式自动/client分离的流量生成cache文件
  • -i <capfile>: Input capture file to process,要输入的pcap
  • -o <outputfile> :Output cache file name,要输出的pcap

tcprewrite就是改写pcap包里的报文头部,包括2层, 3层, 4层, 5-7层。

tcprewrite的参数:

|$ tcprewrite  --enet-smac=host_src_mac:client_src_mac #修改源端和目的端的源mac地址
|              --enet-dmac=host_dst_mac:client_dst_mac #修改源端和目的端的目的mac地址
|              --endpoints=host_dst_ip:client_dst_ip #修改源端和目的端的目的ip地址
|              --portmap=old_port1:new_port1, old_port2:new_port2 #修改源端和目的端的端口号(这个我没用)
|              -i input.pcap #输入pcap文件
|   	 	   -c input.cache #tcpprep划分的cache文件
| 			   -o out.pcap #输出pcap文件

该命令的输入参数是input.pcapinput.cache文件, 结果将另存为out.pcap文件。
该命令将所有input.pcap包里的主机包(由input.cache文件指定哪些包是主机包, 哪些包是客户端包)的源mac地址, 目的mac地址, 目的IP地址分别改为:
host_src_mac,
host_dst_mac
host_dst_ip。
客户端包源mac地址, 目的mac地址, 目的IP地址分别改为:
client_src_mac,
client_dst_mac,
client_dst_ip。
将主机包端口号由old_port1改为new_port1,
将服务器端端口号由old_port2改为new_port2。


解释一下
tcprewrite --srcipmap=0.0.0.0:0.0.0.0 --dstipmap=0.0.0.0:0.0.0.0 --enet-dmac=00:00:00:00:00:00 --enet-smac=00:00:00:00:00:00 --endpoints=0.0.0.0:0.0.0.0 --cachefile=test1.cache --infile=test.pcap --outfile=output.pcap -C
--srcipmap=0.0.0.0:0.0.0.0:两端的源ip都改为0.0.0.0
--dstipmap=0.0.0.0:0.0.0.0:两端的目的ip都改为0.0.0.0
--enet-dmac=00:00:00:00:00:00:两端的目的mac都改为00:00:00:00:00:00
--enet-smac:两端的源mac都改为00:00:00:00:00:00
--endpoints:将pcap文件中的所有客户端、服务器都改成这一对IP地址
--cachefile:之前处理好的cache
--infile:输入pcap
--outfile:输出pcap

这里是tcprewrite-h
在这里插入图片描述

7.7更新 用python单向和匿名化更快,tcpreplay较慢

import os
import os.path
from scapy.all import PcapReader,PcapWriter

pattern0 = '.pcap.TCP_192-168-123-19' # 正则模式
pattern1 = '.pcap.UDP_192-168-123-19' # 正则模式
pattern2 = '.pcap._192-168-123-19' # 正则模式
# 文件夹遍历
rootdir = "2_Session/00_software"
for root,dirs,files in os.walk(rootdir): 
# root 所指的是当前正在遍历的这个文件夹的本身的地址
# dirs 是一个 list ,内容是该文件夹中所有的目录的名字(不包括子目录)
# files 同样是 list , 内容是该文件夹中所有的文件(不包括子目录)
    for dire in dirs:# 对第一级子目录进行循环
        print(dire)
        os.mkdir('3_anoy/00_software/'+ dire) # 新建文件夹
        for f in os.listdir(root+"/"+ dire): # 对第一级子目录下文件遍历,这里只有pcap文件
            # 寻找单向流
            if ((f.find(pattern0) == -1)&(f.find(pattern1) == -1)&(f.find(pattern2) == -1)):#通过判断排除单向流
                fstr = "".join(f)
                # 保存的文件
                # pcap地址
                writers = PcapWriter('3_anoy/00_software/'+dire+'/'+fstr)
                p = root + "/" + dire + "/" + fstr
                print(p)
                with PcapReader(p) as pcap_reader:#返回一个迭代器
                    for pkt in pcap_reader:#for循环进行遍历
                        #对pkt进行相应的处理
                        pkt["IP"].dst = "0.0.0.0"
                        pkt["IP"].src = "0.0.0.0"
                        pkt["Ether"].dst = "00:00:00:00:00:00"
                        pkt["Ether"].src = "00:00:00:00:00:00"
                        writers.write(pkt)

2022.6.29更新

1. Win10用powershell对文件批量改名

我的原始文件名是Amazon.pcap.TCP_3-0-87-74_80_192-168-123-19_57940.pcap因为文件名中有.pcap导致tcpprep无法处理。要修改为Amazon_TCP_3-0-87-74_80_192-168-123-19_57940.pcap (发现不处理也可以运行)

  1. 在开始菜单中打开Windows powershell ISE,以管理员权限运行
    在这里插入图片描述
  2. 输入下面的内容
    # 定义要改文件名称的文件夹路径
    $FolderPath = 'D:\work\Amazon-ALL'
    # 定义要重命名后的字符名称
    $Newname = 'Amazon_'
    # 定义现阶段有规律字符名称,类似.txt或者.mp4,或者需要替换的字符串内容
    $Oldname = 'Amazon.pcap.'
    # 进行批量替换操作
    dir $FolderPath -Include "*.*" -Recurse | ForEach-Object{Rename-Item $_.FullName $_.FullName.Replace($Oldname,$Newname)}
    
  3. 保存成.ps1文件后,以管理员权限运行powershell,输入set-executionpolicy remotesigned 修改执行策略,再点击绿色三角运行。在这里插入图片描述

2. kali下用tcpprep批量匿名pcap文件

  1. 新建.sh 脚本
  2. 输入内容
    # 这段代码是最开始写的,没有上面那段方便,这里的文件夹结构是一级的,需要自己修改`whatsapp`的名字
    #!/bin/bash
    path="/home/kali/Downloads/tcpreplay-4.4.0/session/whatsapp/"
    cd $path
    find ./ -name '*.pcap' | while read i
    do
       echo $i
       tcpprep -a client -i $i -o /home/kali/Downloads/tcpreplay-4.4.0/session/whatsapp/test.cache 
       sleep 1s
       tcprewrite --srcipmap=0.0.0.0:0.0.0.0 --dstipmap=0.0.0.0:0.0.0.0 --enet-dmac=00:00:00:00:00:00 --enet-smac=00:00:00:00:00:00  --endpoints=0.0.0.0:0.0.0.0 --cachefile=/home/kali/Downloads/tcpreplay-4.4.0/session/whatsapp/test.cache --infile=$i  --outfile=/home/kali/Downloads/tcpreplay-4.4.0/0001/whatsapp/$i -C
    done
    

3. crgwin安装tcpreplay整理(弃用,不方便)

参考:Windows安装tcpreplay及其他Linux软件

  1. flex-2.6.4 make报错
    configure.ac:59: error: required file 'build-aux/compile' not found
    configure.ac:59:   'automake --add-missing' can install 'compile'
    configure.ac:59: error: required file 'build-aux/config.guess' not found
    configure.ac:59:   'automake --add-missing' can install 'config.guess'
    configure.ac:59: error: required file 'build-aux/config.sub' not found
    configure.ac:59:   'automake --add-missing' can install 'config.sub'
    
    解决方案:
    ## 可能需要多执行几次此命令
    automake --add-missing
    
  2. configure : error : no acceptable C compiler found in $PATH
    打开cygwin安装包exe,安装gcc组件,参考Cygwin及Wget安装

ubuntu18.04配置USTC-TK2016工具

ubuntu版下载

1 安装powershell

参考微软官方文档:https://docs.microsoft.com/en-us/powershell/scripting/install/install-ubuntu?view=powershell-7.2
在这里插入图片描述
第三句的$(lsb_release -rs)改成ubuntu系统版本18.04

如何修改TCP/IP并发连接数,网络上提供不少修改办法,但其中有不少是行通的,本文将做详细分析. 一、注册表修改法的误区 为了突破SP2对TCP并发连接数的限制,网上曾经流传过一种修改注册表的方法,操作步骤如下: 单击“开始”/运行,输入Regedit打开注册表,定位到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters下,修改的“TcpNumConnections”的键值,将之由10改为150,即设置TCP最大并发连接数为150。 经过实际测试,我们发现该方法看起来有效,但实质上并不能突破并发连接数限制,提高SP2的多线程访问速度。因为SP2对线程数目的控制,是通过“Tcpip.sys”这个系统文件来实现的,并不是通过注册表实现的,因此,该方法不能增加SP2的TCP并发连接数。 二、使用工具来替换Tcpip.sys 为了突破SP2的TCP并发连接数限制,正确地方法是修改Windows XP SP2的系统文件Tcpip.sys。Tcpip.sys是Windows XP SP2重要的系统文件,位于“C:\Windows\system32\drivers目录下。该文件由于平时受到系统保护,所以正常情况下你是无法替换它的,必须在安全模式或纯DOS模式下才能替换,建议你使用以下专门工具、来替换“Tcpip.sys”文件,操作步骤如下: 从网上http://www.lvllord.de/download.php?url=en/EvID4226Patch223d-en.zip下载替换工具(仅为30KB),用它来修改系统文件Tcpip.sys最大安全并发连接限制;然后备份一下C:\Windows\system32\drivers\Tcpip.sys文件。 接下来,双击打开下载文件ZIP压缩包,运行其中的替换工具EvID4226Patch.exe,随之将弹出一个命令行提示符窗口,首先显示Windows当前的Tcpip.sys文件版本,以及并发连接的限制数值(默认为10);接着询问你是否将连接数限制在50,你可以选择“Yes/No/Change”,如果你输入“Y”,则会将并发连接数改为“50”,如果想改为其他数(例如150),可以在提示符后输入“c”,然后输入最大的并发连接数(例如150)回车,最后在提示符下输入“Y”并回车,这样就替换了Tcpip.sys文件;Tcpip.sys文件被替换后,随之会弹出系统文件保护对话框,你可以点击“取消”按钮,然后点击“是”按钮,重新启动后,Tcpip.sys文件的替换就大功告成了! 现在你的最大并发连接数已超过10个,达到了150个,因此Windows XP SP2的多线程访问速度得到了提升,当你用FlashGet、BT等多线程下载时,就不会感到网络带宽的限制了。 三、DOS下修改Tcpip.sys文件 以上替换程序EvID4226Patch.exe也可以在DOS下使用,方法是:首先把EvID4226Patch.exe拷贝到C盘根目录下;然后再进入DOS模式,进入C盘根目录,输入命令EvID4226Patch/L=$n$/w=C:\WINDOWS\system32\drivers/L=tcpip.sys即可修改Tcpip.sys文件。 注意:以上$n$为你要设置的最大安全连接数,假如要把最大并发连接数设置为150个线程,那么输入命令EvID4226Patch/L=150/w=C:\WINDOWS\system32\drivers/L=tcpip.sys即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

岁月漫长_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值