在一家公司做项目,同事把nmap结果导出为xml,因为要对同一端口,如21进行弱口令探测,需要整理成excel表格,ip:port形式
xml格式如下,感觉很乱
- <host starttime="1492997851" endtime="1492998179"><status state="up" reason="echo-reply" reason_ttl="61"/>
- <address addr="192.168.0.133" addrtype="ipv4"/>
- <hostnames>
- </hostnames>
- <ports><extraports state="filtered" count="65522">
- <extrareasons reason="no-responses" count="65522"/>
- </extraports>
- <port protocol="tcp" portid="22"><state state="closed" reason="reset" reason_ttl="61"/><service name="ssh" method="table" conf="3"/></port>
- <port protocol="tcp" portid="80"><state state="open" reason="syn-ack" reason_ttl="61"/><service name="http" product="VMware ESXi Server httpd" hostname="E1-VM001.ufh.com" method="probed" conf="10"><cpe>cpe:/o:vmware:esxi</cpe></service></port>
- <port protocol="tcp" portid="427"><state state="open" reason="syn-ack" reason_ttl="61"/><service name="svrloc" method="table" conf="3"/></port>
- <port protocol="tcp" portid="443"><state state="open" reason="syn-ack" reason_ttl="61"/><service name="http" product="VMware ESXi Server httpd" tunnel="ssl" method="probed" conf="10"><cpe>cpe:/o:vmware:esxi</cpe></service></port>
- <port protocol="tcp" portid="902"><state state="open" reason="syn-ack" reason_ttl="61"/><service name="vmware-auth" product="VMware Authentication Daemon" version="1.10" extrainfo="Uses VNC, SOAP" tunnel="ssl" method="probed" conf="10"/></port>
- <port protocol="tcp" portid="2233"><state state="closed" reason="reset" reason_ttl="61"/><service name="infocrypt" method="table" conf="3"/></port>
- <port protocol="tcp" portid="5988"><state state="closed" reason="reset" reason_ttl="61"/><service name="wbem-http" method="table" conf="3"/></port>
- <port protocol="tcp" portid="5989"><state state="open" reason="syn-ack" reason_ttl="61"/><service name="wbem" product="SBLIM Small Footprint CIM Broker" tunnel="ssl" method="probed" conf="10"><cpe>cpe:/a:standards_based_linux_instrumentation_project:sfcb</cpe></service></port>
- <port protocol="tcp" portid="8000"><state state="open" reason="syn-ack" reason_ttl="61"/><service name="http-alt" method="table" conf="3"/></port>
- <port protocol="tcp" portid="8080"><state state="closed" reason="reset" reason_ttl="61"/><service name="http-proxy" method="table" conf="3"/></port>
- <port protocol="tcp" portid="8100"><state state="open" reason="syn-ack" reason_ttl="61"/><service name="tcpwrapped" method="probed" conf="8"/></port>
- <port protocol="tcp" portid="8182"><state state="open" reason="syn-ack" reason_ttl="61"/><service name="vmware-fdm" tunnel="ssl" method="table" conf="3"/></port>
- <port protocol="tcp" portid="8300"><state state="closed" reason="reset" reason_ttl="61"/><service name="tmi" method="table" conf="3"/></port>
- </ports>
- <times srtt="1866" rttvar="800" to="100000"/>
复制代码 使用php语言,按行读取文件
- <?php
- $file_path = "scan/ip2-result.xml";
- $file = fopen($file_path, "r");
- //输出文本中所有的行,直到文件结束为止。
- global $ip;
- while(! feof($file))
- {
- $line= fgets($file);//fgets()函数从文件指针中读取一行'
- //echo $line;
- preg_match("/address addr="(.+)" addrtype="ipv4"/", $line,$ips);//匹配IP
- preg_match("/<port protocol="tcp" portid="(.+)"><state state="open".+<service name="(\S+)" /", $line,$port);//匹配端口
- if ($ips) {
- $ip = $ips;
- }
- if ($port) {
- echo $ip[1].":".$port[1].":".$port[2];
- echo '<br>';
- }
- }
- fclose($file);
- ?>
复制代码 输出结果如图:
|