热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

发包工具:tcpreplay

本人的tcpreply常用命令:tcpreplay-ie1000g0-M10-l5000exporthomequincyapa_ltediameter.pcap-i

本人的tcpreply常用命令: tcpreplay -i e1000g0 -M 10 -l 5000 /export/home/quincy/apa_lte/diameter.pcap

 -i Primary interface to send traffic out of 双网卡回放报文必选参数,指定主接口

-M: Set replay speed to given multiple 可选参数,指定一个倍数值,就是比默认发送速率要快多少倍的速率发送报文。 加大发送的速率后,对于 DUT 可能意味着有更多的并发连接和连接数,特别是对 于 BT 报文的重放, 因为连接的超时是固定的, 如果速率增大的话, 留在 session 表中的连接数量增大,还可以通过修改连接的超时时间来达到该目的。

-l Specify number of times to loop 可选参数,指定循环的次数


以下有部分内容转载自360doc: http://www.360doc.com/content/12/0704/08/10339652_222137382.shtml

一.Tcpreplay功能简介

首先推荐一个网站:http://tcpreplay.synfin.net/,上面有Tcpreplay的安装包和很多文档,包括手册、man页和FAQ等。

Tcpreplay是一系列工具的总称,包括tcpreplaytcprewritetcpprep等工具,它可以用来在Unix系统或者linux系统上重放网络包。这些包是由tcpdumpetherealwireshark等软件抓取到的,即pcap格式的数据包。

安装Tcpreplay包时,默认情况下是安装了下面这些工具的, 用于准备发包的cache, 重写报文等:

(1)tcpprep: 这个工具的作用就是划分客户端和服务器,区分pcap数据包的流向,即划分那些包是client的,哪些包是server的,一会发包的时候client包从一个网卡发,另一个server的包可能从另一个网卡发。

(2)tcprewrite:这个工具的作用就是来修改报文,主要修改2层,3层,4层报文头,即MAC地址,IP地址和PORT地址。

(3)tcpreplay: 这是最终真正发包使用的工具,可以选择主网卡、从网卡、发包速度等。

一.Tcpreplay安装条件

Tcpreplay要实现它的功能要用到其它一些库:

1)libpcap库:由于tcpreplay在使用过程中主要依赖于libpcap库,因此在安装tcpreplay之前需要先安装libpcap,否则在安装tcpreplay的时候会提示你libpcap没有安装而安装失败。但如果希望libpcap能在linux上正常工作,则必须使内核支持"packet"协议,也即在编译内核时打开配置选项 CONFIG_PACKET(选项缺省为打开)

Libpcap可以从以下链接下载:http://www.tcpdump.org/  可以用源码安装,比较简单。

2)tcpdump:这个不是必须的,这个工具的主要作用就是来解码数据包,在linux系统下查看pcap文件内的数据包,也可以用它来进行抓包。在安装tcpreplay时可以选择安装它也可以不选择安装。(个人建议也一起安装,以防止在使用tcpreplay时发生其他错误。)

3)libnet库。也不是必须的一个库。Tcpreplay也可用它来发送数据包,但由于libnet自身的bug比较多且已不再有人维护,Tcpreplay未来版本有可能取消对它的支持。(目前的版本还需要这个库的支持,因此建议也安装)

另外,你所使用的linux系统需要安装了GCC编译器,否则无法安装所有工具。

可以通过命令:
tcpreplay –vesion
来查看它的版本信息,
tcpreplay –h
来查看帮助内容。

二.Tcpreplay使用的各种参数

原文有tcpprep、tcprewrite的参数,本篇主要讲tcpreplay的使用,略去。

tcpreplay使用的参数:

Usage: tcpreplay [args]

-c           Split traffic via cache file

 双网卡回放报文必选参数,后面紧跟cache文件名,该文件为tcpprep根据对应的pcap文件构造出来。

-F           Fix IP, TCP, UDP and ICMP checksums

     可选参数,在发送报文时,自动纠正错误的校验和。对测试DUT的校验和检验还是有用的。

-i                 Primary interface to send traffic out of

 双网卡回放报文必选参数,指定主接口。

-I                 Secondary interface to send traffic out of

  双网卡回放报文必选参数,指定从接口。

-L               Specify the maximum number of packets to send

     可选参数,指定最大的发包数量。可以在确认连接的调试时使用。

-x            Set replay speed to given multiple

    可选参数,指定一个倍数值,就是必默认发送速率要快多少倍的速率发送报文。加大发送的速率后,对于DUT可能意味着有更多的并发连接和连接数,特别是对于BT报文的重放,因为连接的超时是固定的,如果速率增大的话,留在session表中的连接数量增大,还可以通过修改连接的超时时间来达到该目的。

-p          Set replay speed to given rate (packets/sec)

    可选参数,指定每秒发送报文的个数,指定该参数,其它速率相关的参数被忽略,最后的打印信息不会有速率和每秒发送报文的统计。

这是是主要的一些参数,从网上查找的一些资料跟具体的tcpreplay中的参数有很大出入,因此建议想要使用其他参数时,使用命令:# tcpreplay –h 查看帮助。

三.Tcpreplay使用举例:

试验过程:从客户端上抓取的访问butterfly的原始包,tcp.pcap,通过TCPreplay回方后,在交换机上抓取的包result.pcap,可以看出,两个文件中的包顺序完全相同。

 
DUT设备的两个接口和
PC的两个接口使用网线连接,使用
tcpreplay重放报文。注意防火墙的配置为网桥(透明)模式。
PC机的一个网卡连接
DUT的端口
1,另一个网卡连接
DUT的端口
2,
DUT内的
MAC地址设为静态映射。

1)  在客户端利用Ethreal抓取客户端访问butterflyTCP包,目的IP地址为:10.1.145.249,本机地址为:10.1.145.96;

2)  将抓取的包文件存为:tcp.pcap,然后拷贝到linux系统中,放到你安装tcpreplay目录中。

3)  使用tcpprep区分clientserver端,生成cache文件。

# tcpprep –a client –i tcp.pcap –o tcp.cache

(这里采用自动客户端模式区分)

4)  使用tcpreplay重放报文

#tcpreplay –p 1000 –c tcp.cache –i eth0 –I eth1 tcp.pcap

 

结论:在慢速重放包时,可以按照原有报文的交互顺序 通过被测设备。即完全模拟了客户端和服务器的交互过程。

该软件默认是线速发包,试验发现会有错误的包和乱序的包。配置为1000个包/s时,不会失序。

推测失序原因:在高速发包时,特别依赖于网卡,只要网卡有抖动,可能会导致client端和服务器端发送的包在通过DUT时,排序有问题。

安装tcpreplay需要的所有安装包文件,我已经上传到//pmd-3/测试部/tools目录下。如果大家在使用中发现什么问题欢迎互相交流。

 

使用经验总结:

如果不对包文件进行改写,则重发包流程为:

1.       先对包进行区分客户端和服务器端:

tcpprep -a client -i http. pcap -o http. cache  

2.       重放包文件,命令为:

tcpreplay –p 1 -c http.cache -i eth0 -I eth1 http.pcap

 

如果对包文件进行改写,则重发包文件流程为:

1.       先对包进行区分客户端和服务器端:

tcpprep -a client -i http. pcap -o http. Cache

2.       对包文件进行改写:

tcprewrite -e 192.85.1.2:192.85.2.2 --enet-dmac=00:15:17:2b:ca:14,00:15:17:2b:ca:15 --enet-smac=00:10:f3:19:79:86,00:10:f3:19:79:87 -c test.cache -i test.tcpdump -o 1.pcap

3.       重放包文件:

tcpreplay -i eth0 -I eth1 -l 1000 -t -c /dev/shm/test.cache /dev/shm/1.pcap


以下有部分转载自网易博客:http://guoyoooping.blog.163.com/blog/static/135705183201032303617695/
[目录]:(Created by TxtBrowser)
    1. 什么是tcpreplay
    2. 安装指南
    3. 使用指南
    .   3.1 tcpprep(pcap pre-processor)
    .       3.1.1 根据报文源IP确定client/server报文
    .       3.1.2 使用自动模式确定client/server报文
    .   3.2 tcprewrite
    .       3.2.1 tcprewrite的一个例子
    .       3.2.2 修改2层头
    .       3.2.3 修改3层头
    .       3.2.4 修改4层头
    .       3.2.5 修改5-7层数据
    .   3.3 tcpreplay


1. 什么是tcpreplay
tcpreplay是一种pcap包的重放工具, 它可以将用ethreal, wireshark工具抓
下来的包原样或经过任意修改后重放回去. 它允许你对报文做任意的修改(主要是指对2层
, 3层, 4层报文头), 指定重放报文的速度等, 这样tcpreplay就可以用来复现抓包的情景
以定位bug, 以极快的速度重放从而实现压力测试.

tcpreplay本身包含了几个辅助工具, 用于准备发包的cache, 重写报文等:

    * tcpprep - 简单的说就是划分哪些包是client的, 哪些是server的, 一会发包的
    时候client的包从一个网卡发, server的包可能从另一个网卡发.
    * tcprewrite - 简单的说就是修改2层, 3层, 4层报文头部.
    * tcpreplay - 真正发包, 可以选择主、从网卡, 发包速度等.
    * tcpbridge - bridge two network segments with the power of tcprewrite

2. 安装指南
原文有,本篇主要讲使用,略去。

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地址分类的方式好用.

tcpprep还有很多其它指定发送方向的方式, 详情请阅Online Manual或man手册.

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地址的网络部分

注: 2)和3)没有验证过

众所周知, 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      \Device\NPF_GenericDialupAdapter
|        Adapter for generic dialup and VPN capture
|%1      \Device\NPF_{6B508B29-B3E3-4D0B-892F-02914AC9A668}
|    Intel(R) 82566DM Gigabit Network Connection (Microsoft's Packet
|    Scheduler)
|%2      \Device\NPF_{CBCE38CA-1FAD-4AEB-89DF-FD2D8EF861FA}
|    D-Link DFE-530TX PCI Fast Ethernet Adapter (rev.C)
|    (Microsoft's Packet Scheduler)
|%3      \Device\NPF_{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] tcpreplay官方网站: http://tcpreplay.synfin.net/trac/
[2] tcpreplay官方网站: http://tcpreplay.synfin.net/wiki/manual
[3] winpcap官方网站: http://www.winpcap.org
[4]巧用Tcpreplay让攻击流量瞒天过海,
http://news.newhua.com/news1/safe_product/2007/1116/0711169442155I34A78I25B09B5752K.html



推荐阅读
  • 原文地址http://balau82.wordpress.com/2010/02/28/hello-world-for-bare-metal-arm-using-qemu/最开始时 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • linux进阶50——无锁CAS
    1.概念比较并交换(compareandswap,CAS),是原⼦操作的⼀种,可⽤于在多线程编程中实现不被打断的数据交换操作࿰ ... [详细]
  • 第四讲ApacheLAMP服务器基本配置Apache的编译安装从Apache的官方网站下载源码包:http:httpd.apache.orgdownload.cgi今 ... [详细]
  • centos6.8 下nginx1.10 安装 ... [详细]
  • 【技术分享】一个 ELF 蠕虫分析
    【技术分享】一个 ELF 蠕虫分析 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • 解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法
    本文介绍了解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法,包括检查location配置是否正确、pass_proxy是否需要加“/”等。同时,还介绍了修改nginx的error.log日志级别为debug,以便查看详细日志信息。 ... [详细]
  • 本文讨论了在VMWARE5.1的虚拟服务器Windows Server 2008R2上安装oracle 10g客户端时出现的问题,并提供了解决方法。错误日志显示了异常访问违例,通过分析日志中的问题帧,找到了解决问题的线索。文章详细介绍了解决方法,帮助读者顺利安装oracle 10g客户端。 ... [详细]
  • MySQL5.6.40在CentOS764下安装过程 ... [详细]
author-avatar
捕风的丶阿兹猫-在北京
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有