【发布时间】:2016-02-05 00:13:18
【问题描述】:
伙计们。
我在尝试解决这个问题时遇到了严重的麻烦。
场景:
在工作中,我们使用漏洞管理工具 QualysGuard。 跳过所有技术细节,该工具基本上检测所有服务器中的漏洞,并为每台服务器中的每个漏洞创建一个票号。 从 UI 中,我可以访问所有这些票证并下载所有票证的 CSV 文件。 另一种方法是使用 API。 API 使用一些 cURL 调用来访问数据库并检索我在参数中指定的信息。
方法:
我正在使用这样的脚本来获取数据:
<?php
$username="myUserName";
$password="myPassword";
$proxy= "myProxy";
$proxyauth = 'myProxyUser:myProxyPassword';
$url="https://qualysapi.qualys.com/msp/ticket_list.php?"; //This is the official script, provided by Qualys, for doing this task.
$postdata = "show_vuln_details=0&SINCE_TICKET_NUMBER=1&CURRENT_STATE=Open&ASSET_GROUPS=All";
$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_PROXY, $proxy);
curl_setopt($ch, CURLOPT_PROXYUSERPWD, $proxyauth);
curl_setopt ($ch, CURLOPT_TIMEOUT, 60);
curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 0);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_REFERER, $url);
curl_setopt($ch, CURLOPT_USERPWD, $username . ":" . $password);
curl_setopt ($ch, CURLOPT_POSTFIELDS, $postdata);
curl_setopt ($ch, CURLOPT_POST, 1);
$result = curl_exec ($ch);
$xml = simplexml_load_string($result);
?>
上面的脚本运行良好。它连接到 API,将一些参数传递给它,ticket_list.php 文件会生成一个包含我需要的所有内容的 XML 文件。
问题:
1-) 此脚本只允许在它返回的 XML 文件中限制 1000 个结果。 如果我的请求产生了超过 1000 个结果,脚本会在 XML 的末尾创建一个这样的 TAG:
<TRUNCATION last="5066">Truncated after 1000 records</TRUNCATION>
在这种情况下,我需要执行另一个 cURL 调用,参数如下:
$postdata = "show_vuln_details=0&SINCE_TICKET_NUMBER=5066&CURRENT_STATE=Open&ASSET_GROUPS=All";
2-) Qualys 的数据库(云)中大约有 300,000 张工单,我需要将它们全部下载并插入到我的数据库中,该数据库由我正在使用的应用程序使用创造。这个应用程序有一些表单,由用户填写,并针对数据库运行一堆查询。
疑问: 我完成上述任务的最佳方式是什么? 我有一些想法,但我完全不知所措。 我想:
**1-)**创建一个执行上述调用的函数,解析 xml 和标签
TRUNCATION 存在,它获取它的值并再次调用它自己,递归地执行它直到没有标签 TRUNCATION 的结果。
这个问题是我无法合并每个调用的 XML 结果,而且我不确定它是否会导致内存问题,因为它需要近 300 个 cURL 调用。该脚本会在非营业时间使用服务器的 cronTab 自动执行。
2-) 我没有检索所有数据,而是制作我提到的表单,将数据发布到脚本,并使用用户 POSTed 的参数进行 cURL 调用.但同样我不确定这是否会好,因为我仍然需要进行多次调用,具体取决于用户发送的参数。
3-) 这太疯狂了: 在我登录 UI 时使用某种宏软件记录我,进入门票所在的页面,点击下载按钮,检查 CSV 选项并单击以再次下载。然后,将此脚本导出为某种语言,如 python 或 java,在 cronTab 中创建一个任务,并创建一个解析下载的 CSV 并将数据插入数据库的脚本。 (疯狂与否?=P)
非常欢迎任何帮助,也许答案就在我眼前,而我还没有得到。 提前致谢!
【问题讨论】: