栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

Windows安装tcpreplay及其他Linux软件

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Windows安装tcpreplay及其他Linux软件

一. 简介

Cygwin是一个在windows平台上运行的类UNIX模拟环境,是cygnus solutions公司开发的自由软件。它是GNU 和开源工具的集合,提供的功能类似于在Windows操作系统上运行Linux。

简而言之,cygwin是一个在windows平台上运行的unix模拟环境,是一个感觉用起来像是linux环境的工具集。也就是说,在cygwin上你可以执行诸多linux命令,不仅如此,也可以执行windows DOS下的命令程序。

但要注意的是,cygwin并不能直接运行在linux中运行的程序,必须在cygwin中重新编译该程序源码后才能让该程序在windows中运行。

二. 下载

Cygwin官网:Cygwin

下载*.exe安装工具。

三. 安装

双击exe文件安装。

镜像地址的选择,选了国内的快一些,我这里就选了阿里,你也可以选择其他的:

接下来是很重要的一点,决定你后续软件安装的方便与否,先选 View中的 Full 然后一定要搜索下载一个 wget 就行了(wget上本来显示的是Skip,你双击这个Skip就好了):

 一般来说,暂时装这一个就够了,后续有需要的软件,安装后进入到软件里再安装就行了,当然如果你有别的指定需求,你也可以在这个界面搜素并选择。
然后就一直下一步,直到安装结束,至于你要不要桌面快捷方式和开始里创建相关文件夹就随你的意了:

 打开软件后,很多软件应该都没有:

 参考链接

(495条消息) Cygwin的安装使用,及其软件包apt-cyg的配置使用,以及apt-cyg错误“/usr/bin/apt-cyg: line 25: $‘r‘: command not found”解决_宋小江@的博客-CSDN博客_cygwin镜像地址连接失败

把的apt-cyg文件剪贴到Cygwin安装目录的bin文件夹里(记不得安装在哪里的,就桌面右键点击快捷方式,选择打开文件所在的位置)。

然后就可以愉快的安装相关需求软件了,甚至都不用重启。

最后你还可以把Cygwin的bin目录添加进环境变量,请将安装文件夹的以下两个路径添加到用户/系统环境变量PATH中。

这样你就可以在cmd或是powershell中使用linux的命令,如whereis、which等。但是要注意一点哦,环境变量添加多了,可能与你原来的一些环境变量中的同名程序冲突哦,因为先后顺序的问题就可能会出现一些意外的奇怪的情况,所以慎用,除非你很清楚你的环境变量,你也知道你在干嘛!

四. 启动

双击桌面图标 或 从开始菜单启动Cygwin64 Terminal。

 初始界面如下:

五. 卸载 5.1 只卸载packages

如果只是卸载Cygwin安装的packages,则运行前面的*.exe安装工具,到下面界面选择Catagory-All, Uninstall即可。

 5.2 完全卸载Cygwin
完全卸载Cygwin(包括Cygwin本身及其安装的包),参考Cygwin官方卸载指导:https://cygwin.com/faq/faq.html#faq.setup.uninstall-service

1.先停止所有Cygwin有关程序和服务,可在Cygwin64 Terminal中输入cygrunsrv -L检查有哪些服务,如下图,我这里没有安装任何服务,所以提示command not found。
 2.运行以下bat程序,将Cygwin安装文件夹(本机为E:cygwin64,注意修改)的权限从system改为用户,然后直接删除安装文件夹。

SET DIRECTORY_NAME="E:cygwin64"
C:windowssystem32TAKEOWN /f %DIRECTORY_NAME% /r /d y
C:windowssystem32ICACLS %DIRECTORY_NAME% /grant administrators:F /t
PAUSE

3.删除残留文件,包括开始菜单C:ProgramDataMicrosoftWindowsStart MenuPrograms中的cygwin文件夹,桌面快捷方式,PATH环境变量,注册表残留等。

六. 安装tcpreplay

tcpreplay官方提供的下载地址为:

appneta/tcpreplay: Pcap editing and replay tools for *NIX and Windows - Users please download source from (github.com)

tcpreplay官方提供的下载地址为: http://tcpreplay.synfin.net/trac/wiki/Download,由于tcpreplay依赖libpcap库,所以安装tcpreplay之前必须先安装libpcap(在windows下为winpcap), 否则./configure的时候你会得到提示说libpcap库没有安装。
linux下的依赖库libpcap由tcpdump工程组开发, 好像也是个开源工程, 可以到http://www.tcpdump.org/下载到, 可以用源码安装, 貌似比较简单。
windows(包括cygwin) 下的依赖库winpcap则必须到 winpcap的官方网站上去下载:
http://www.winpcap.org/install/default.htm. winpcap是libpcap在windows上的移植,这个貌似不是开源的, 所以你只能得到一个静态库和编程接口"WpdPack_4_1_2.zip",解压缩后可以得到文件夹"WpdPack", 将该文件夹拷贝到cygwin的根目录,即可完成winpcap的安装。

在 "./configure"的时候选上参数--with-libpcap=/wpdpack(我自己试验过,貌似没有这个参数也可以成功, 不过还是建议加上这个参数)

#winpcap的安装过程:

unzip WpdPack_4_1_2.zip
cp -r WpdPack/ / (安装tcpreplay的依赖winpcap, 即把WpdPack拷贝到根目录下.)

 #tcpreplay的安装过程:

Administrator@WIN-BQOBV63OBNM ~
$ pwd
/home/Administrator

Administrator@WIN-BQOBV63OBNM ~
$ cd /home/Administrator/tcpreplay-4.1.2/

Administrator@WIN-BQOBV63OBNM ~/tcpreplay-4.1.2

./autogen.sh (Subversion checkouts only)
./configure --with-libpcap=/wpdpack
make
make test (Note: tcprewrite tests are currently broken on Cygwin/Win32)
make install 

3. 使用指南

到此为止, 你机器上的tcpreplay已经可以使用了, 具体怎么用, 网上的攻略也很多, 但
最权威的使用指南当然是官网的Online Manual:
http://tcpreplay.synfin.net/trac/wiki/manual, 前面简单地介绍了tcpreplay内嵌的
几个工具的用途, 下面给出一个我用过的一个例子, 仅供更好的理解Online Manual:

以前的版本貌似可以用一个命令把pcap包直接经过修改发出去, 但是3.0以后的
tcpreplay不支持这样了, 发包前先得用tcpgrep建立一个cache, 再用tcprewite修改包的
信息, 最后用tcpreplay发出去:

建立cache文件的作用解释,主要是加速报文的发送,cache文件中存放着pcap文件中每个
帧的编号和时间戳等信息,以达到tcpreplay回放时可以更加快速的发送报文的目的。

3.1 tcpprep(pcap pre-processor)

tcpprep工具会生成一个cache文件, 里面保存着哪些包将从主网口发出去, 哪些包将从从
网口发出去. 举个例子, 如果你用wireshark抓了一个pcap文件, 里面可能既有A地址发给
B地址的包, 也有B地址发给A址的包, 用tcpprep工具可以指定从A到B的包从主网卡发出,
从B到A的包从次网卡发出.

3.1.1 根据报文源IP确定client/server报文

#tcpprep的用法举例, 根据源IP:
|$ tcpprep -c 172.22.64.2/24 -i mgcp.pcap -o mgcp.cach

上面的命令指定所有源IP为172.22.64.2/24的包, 都将从主网卡发出, 其它的从次网卡发
出. 输入文件是mgcp.pcap, 输出文件为mgcp.cach.

3.1.2 使用自动模式确定client/server报文

#tcpprep的用法举例, 自动模式:
|$ tcpprep -a client -i mgcp.pcap -o mgcp.cach

上面的命令采用自动/client模式指定分包模式. 自动模式这里按我的理解解释一下:
tcpprep在自动模式下认为有下面行为的IP为client端: 1.发TCP SYN包的一方, 2.发DNS
包的一方, 3. 收入到 ICMP-Port Unreachable的一方. 认为有下面行为的一方为server
端: 1.发TCP Syn/Ack的一方, 2.发DNS应答的一方, 3.发ICMP-Port Unreachable的一方.
而被认定为server的那一方发的那些包, 将从主网卡发出, 被认定为client的包则从次网
卡发出. 而自动/client模式将所有没有认出的包都归为client, 同理自动/server模式将
没有认出的包都归为server.这种模式貌似不如按IP地址分类的方式好用.

3.2 tcprewrite

简单地说, tcprewrite就是改写pcap包里的报文头部, 包括2层, 3层, 4层, 5-7层. 从3.0
版本以后, 所有改写pcap报文头的操作都从tcpreplay中移到了tcprewrite里了.

使用tcprewrite对packet进行修改可以有两个方法, 一种方法是一次修改一项, 生成一个
文件, 再拿这个文件作为输入文件..., 直到完成最后的修改, 如:

tcprewrite --option1=xxx -c input.cach -i input.pcap -o 1.pcap
tcprewrite --option2=xxx -c input.cach -i 1.pcap -o 2.pcap
...
tcprewrite --optionN=xxx -c input.cach -i N-1.pcap -o N.pcap

还有一种方法是一古脑的把所有的选项放到一个命令里完成, 如:

tcprewrite --option1=xxx --option2=xxx ... --optionN=xxx -i input.pcap -c input.cach -o out.pcap
两种方法都是可行的, 也各有利弊. 第一方法明了, 但是复杂, 第二种方法简单但不容易
理解. 我的建议是先用第一种方法做试验, 容易调试, 等修改成功了以后再把所有的选项
合到一起, 在实际使用的时候用第二种方法. 下面我先给出一个例子, 然后再逐个分析一
下用tcprewrite是如何修改二层, 三层, 四层, 5-7层头的, 以便理解tcprewrite的工作原
理.

3.2.1 tcprewrite的一个例子

tcpreplay只保证能把包送出去, 至于包真正能到达的地址, 我认为还是根据原来的包的
IP和mac. 如果是在同一网段, 可能需要把mac地址改成测试设备的mac, 如果需要经过网
关, 就得将IP地址改为测试设备的IP以及端口号.

tcprewrite的基本格式是(请注意命令中是没有换行符的, 只为了阅读的方便添加了换行
符): 详请可以用tcprewrite ?命令查询详情.

#tcprewrite的格式:
|$ tcprewrite --enet-smac=host_src_mac,client_src_mac   
|              --enet-dmac=host_dst_mac, client_dst_mac
|              --endpoints=host_dst_ip:client_dst_ip    
|              --portmap=old_port1:new_port1,old_port2, new_port2
|              -i input.pcap -c input.cach -o out.pcap

解释一下, 该命令的输入参数是input.pcap和input.cach文件, 结果将另存为out.pcap文
件. 该命令将所有input.pcap包里的主机包(由input.cach文件指定哪些包是主机包, 哪些
包是客户端包)的源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的用法举例:
|$ tcprewrite --enet-smac=11:22:22:22:22:22,22:22:22:22:22:22   
|             --enet-dmac=11:11: 11:11:11:11,22:11:11:11:11:11  
|             --endpoints=192.168.0.1:192.168.0.11              
|             --portmap=5070:5061,9060:5060                     
|             -i success.pcap -o out.pcap -c success.cach

该命令将修改后的包, 主机包的二层, 三层, 四层头分别为: 11:22:22:22:22:22,
192.168.0.1, 5061, 客户端包的二层, 三层, 四层头分别为: 22:22:22:22:22:22,
192.168.0.11, 5060.

3.2.2 修改2层头

1) 修改MAC地址

如果不指定cache文件, 将把所有包的源mac地址和目的mac地址都改写成
00:44:66:FC:29:AF和00:55:22:AF:C6:37:

    $ tcprewrite --enet-dmac=00:55:22:AF:C6:37 --enet-smac=00:44:66:FC:29:AF --infile=input.pcap --outfile=output.pcap

指定cache文件后, 将server包的目的/源mac地址改写成
00:44:66:FC:29:AF/00:66:AA:D1:32:C2, 将client的目的/源mac地址改成:
00:55:22:AF:C6:37/00:22:55:AC:DE:AC, 注意是server地址在前.

    $ tcprewrite --enet-dmac=00:44:66:FC:29:AF,00:55:22:AF:C6:37 --enet-smac=00:66:AA:D1:32:C2,00:22:55:AC:DE:AC --cachefile=input.cache --infile=input.pcap --outfile=output.pcap

2) 修改802.1q VLAN

经常客户的抓包带有VLAN头域, 这些包如果不去掉VLAN头是没有办法在自己的交换机上
replay的, tcprewrite提了去掉或添加VLAN的方法:

去掉vlan很简单:

    $ tcprewrite --enet-vlan=del --infile=input.pcap --outfile=output.pcap

添加vlan也很简单, 下面的命令将VLAN tag设成40, CFI设成1, VLAN priority设成4.

    $ tcprewrite --enet-vlan=add --enet-vlan-tag=40 --enet-vlan-cfi=1 --enet-vlan-pri=4 --infile=input.pcap --outfile=output.pcap

3) 修改二层协议名:

好像是将Ethernet协议头转成Cisco HDLC或其它二层协议? 这部分没有真正用过, 需要的
人自行参考[2].

3.2.3 修改3层头

从版本3.4.2开始, tcprewrite开始支持ipv6协议(我写这篇文章的时候版本号还是3.4.1呢
, tcpreplay升级蛮快哦^)^). tcprewrite修改IP地址后会自动帮你计算校验和, 这点还是
蛮周到的^)^, 命令行传入IPv6地址的时候要使用方括号, 例如: [2001::dead:beef]或
[2001::/16]

1) 修改目的IP

根据cache文件里的标识, 将server的IP改为10.10.1.1, client的IP改为10.10.1.2:

$ tcprewrite --endpoints=10.10.1.1:10.10.1.2 --cachefile=input.cache --infile=input.pcap --outfile=output.pcap --skipbroadcast

2) 修改IP地址的网络部分

众所周知, IP地址同网络部分和主机部分组成, 下面的命令可以将子网地址为10.0.0.0/8
或192.168.0.0/16的IP改成子网为172.16.0.0/12:

    $ tcprewrite --pnat=10.0.0.0/8:172.16.0.0/12,192.168.0.0/16:172.16.0.0/12 --infile=input.pcap --outfile=output.pcap --skipbroadcast

下面的命令是基于client包或server包修改子网地址:

    $ tcprewrite --pnat=10.0.0.0/8:192.168.0.0/24 --pnat=10.0.0.0/8:192.168.1.0/24 --cachefile=input.cache --infile=input.pcap --outfile=output.pcap --skipbroadcast

3) 修改IP头的其它部分:

修改IPv4头的TOS为50

    $ tcprewrite --tos=50 --infile=input.pcap --outfile=output.pcap

将IPv6头Traffic Class值改为33

    $ tcprewrite --tclass=33 --infile=input.pcap --outfile=output.pcap


修改Flow Label field:

    $ tcprewrite --flowlabel=67234 --infile=input.pcap --outfile=output.pcap

3.2.4 修改4层头

和修改IP头一样, 修改4层头的时候tcpwrite会自动计算校验和, 这个就不需要担心了.

1) 修改端口号

将80端口号改为8080, 22改为8022:

 $ tcprewrite --portmap=80:8080,22:8022 --infile=input.pcap --outfile=output.pcap

2) 强制计算传输层校验和:

有些应用可能不计算传输层的校验和, 可以让tcpwrite强制计算一下:

    $ tcprewrite --fixcsum --infile=input.pcap --outfile=output.pcap

3.2.5 修改5-7层数据

tcpwrite对5-7层的修改非常有限, 顶多也就是抓包没有抓全, 中间的应用层数据丢了.
tcpwrite将没有抓到的数据补成全0, 或者修改tcp/udp的长度字节, 或者将该包丢弃. 有
需要的直接参考官方资料吧.[2]

3.3 tcpreplay

在linux下, 用ifconfig命令可以获得接口的名字, 但在cygwin下必须用下面的命令获得
接口的名字:

#在cygwin下获得接口的名字:
|$ tcpreplay --listnics

#结果可能如下所示:
|$ tcpreplay --listnics
|Available network interfaces:
|Alias   Name    Description
|%0      DeviceNPF_GenericDialupAdapter
|        Adapter for generic dialup and VPN capture
|%1      DeviceNPF_{6B508B29-B3E3-4D0B-892F-02914AC9A668}
|    Intel(R) 82566DM Gigabit Network Connection (Microsoft's Packet
|    Scheduler)
|%2      DeviceNPF_{CBCE38CA-1FAD-4AEB-89DF-FD2D8EF861FA}
|    D-Link DFE-530TX PCI Fast Ethernet Adapter (rev.C)
|    (Microsoft's Packet Scheduler)
|%3      DeviceNPF_{ABB813FE-3C51-49A3-8146-16CD2C4507C3}
|    D-Link DFE-530TX PCI Fast Ethernet Adapter (rev.C)
|    (Microsoft's Packet Scheduler)

从中可以看出这台机器有两块网卡, 一块叫做%1, 另一块叫做%2. 下面就可以指定网卡
重发包了:

#用tcpreplay发包:
|$ tcpreplay -c mgcp.cach -i %1 -I %2 out.pcap

这条命令是把out.pcap包, 按照mgcp.cach里划分的主机包和客户端包的方式, 将主机包
从网卡%1发出去, 将客户端包从网卡%2发出去.

注:

1.修改目的IP的MAC地址的时候,MAC地址不是目的机网卡物理地址,而是源机器所连接的交换机MAC地址。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/964530.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号