注入自动应答文件什么意思
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了注入自动应答文件什么意思相关的知识,希望对你有一定的参考价值。
参考技术A 注入自动应答文件是指在电脑上通过一些特殊设置使其能够在遇到某种特定情况时自动操作,实现无人值守操作。自动应答文件可以用于多种场景,例如软件安装、系统运行等。
应答文件(或无人参与文件)可用于在安装期间修改你的映像中的 Windows 设置,还可以在映像中创建触发脚本的设置,在用户首次创建帐户并选择其默认语言后运行这些脚本。
OVS(Open vSwitch)注包
参考技术A OVS注包的场景:UCloud的 SDN 网络是基于OVS做的。为了进行内网监控,需要 测试 用户的两台云主机通信是否正常。但是,作为服务方我们是无法登陆到用户的云主机的。因此,采用了向源端的OVS中注入一个ping包的方法测试网络是否正常。
基本原理
实验环境示意图:实现不登陆进SRC VM的前提下,发送Ping的请求包给DST VM,并捕获返回的应答包Ping Response。
染色:
用户有可能自己也会发送Ping包,为了区分用户的应答包和注入方式得到的应答包,需要对注入的Ping Request进行染色。首先看下ICMP包的格式,如下所示。
黄色标记起来的Identifier字段含义如下(RFC 792)
The identifier and sequence number may be used by the echo sender to aid in matching the replies with the echo requests
通过设置Identifier的值,可以区分不同的请求对应的应答包。
这里我们设置Identifier=111,捕获数据包时,需要指定ICMP包 icmp[4:2]=111,表明ICMP的第四、第五个字节的值等于111.
注入Ping Request包
需要使用ovs-ofctl packet-out进行注包操作,命令格式如下:
ovs-ofctl packet-out switch in_port actions packet...
说明:
1、packet-out:连接到OVS,并且让OVS对Packet执行某个Action
Connects to switch and instructs it to execute the OpenFlow actions on each packet
2、switch:交换机的名字,比如实验环境中的br0
3、in_port:SRC VM连接到OVS的端口号,就是实验环境示意图中的In Port
4、packet:数据包,实验中就是染了色的Ping Request数据包。
5、Action:关键是Action的选择,我们采用的是resubmit,说明如下。resubmit会找到数据包对应的流表,然后更换掉in_port并执行流表中的Action。我们这里设置port=in_port。所以仅仅会执行流表中的Action。
resubmit([port],[table]):Re-searches this OpenFlow flow table with thein_portfield replaced byportand executes the actions found
捕获Ping的Response包
采用tcpdump进行捕获染了色的Ping数据包。命令如下
tcpdump -c 1 -iVIRTUAL_INTERFACEicmp and src hostSRC_IPand dst hostDST_IPand icmp[4:2]=111
1. VIRTUAL_INTERFACE: 云主机使用虚拟网卡的名字
2. SRC_IP:源云主机的IP地址
3. DST_IP:目的云主机的IP地址
4. 111:染色标记
golang实现的主逻辑
injectICMPCmd=util.GetInjectICMPPacket(srcIp,dstIp,srcMac,dstMac)//构造染了色的Ping Request包,以及注入命令tcpDumpCmd=util.TcpDumpICMPCommand(iface,srcIp,dstIp)//构造tcpdump的抓包命令tcpDumpResponse:=make(chanstring)srcHostIp:="XXX"//宿主机的IP地址gofunc()command:=fmt.Sprintf("ssh %s@%s %s","root",srcHostIp,tcpDumpCmd)util.SshRunWithChannelResponse(command,tcpDumpResponse)()// inject Packet into OVStime.Sleep(100*time.Millisecond)gofunc()command:=fmt.Sprintf("ssh %s@%s %s","root",srcHostIp,injectICMPCmd)util.SshRun(command)()success:=trueselectcasemsg:=<-tcpDumpResponse:ifstrings.Contains(msg,dstIp)fmt.Printf("Checking Success, Response: %s\n",msg)elsesuccess=falsefmt.Printf("Checking Fail, Response: %s\n",msg)returnsuccess
以上是关于注入自动应答文件什么意思的主要内容,如果未能解决你的问题,请参考以下文章
运维自动化之系统安装-应答文件制作并结合ftp和http完成半自动安装