2017-02-09 72 views
0

我試圖使用SoftLayer的Python庫來運行自動漏洞掃描。不幸的是,我得到以下例外:SoftLayer漏洞掃描蟒

SoftLayerAPIError: SoftLayerAPIError(SoftLayer_Exception): Unable to create a new object of type SoftLayer_Network_Security_Scanner_Request_Nessus. Make sure the authentication method is correct.

我使用的代碼可以在下面看到。

import SoftLayer 

USERNAME="" # I put valid value in here 
APIKEY=""  # I put valid value in here 
TARGET=""  # I put valid value in here 

client = SoftLayer.create_client_from_env(
    username=USERNAME, 
    api_key=APIKEY 
) 
""" ALTERNATE I TRIED ALSO FROM DOCUMENTATION: 
client = SoftLayer.Client(
    username=USERNAME, 
    api_key=APIKEY 
) 
""" 
account = client['Account'].getObject() 
scanner = client.call(
     "SoftLayer_Network_Security_Scanner_Request", 
     "createObject", { 
      "accountId": account.get('id'), 
      "ipAddress": TARGET 
}) 

HTTP請求由Python庫的樣子發送:

POST /xmlrpc/v3.1/SoftLayer_Network_Security_Scanner_Request HTTP/1.1 
Host: api.softlayer.com 
Connection: keep-alive 
Accept: */* 
Content-Type: application/xml 
Content-Length: 798 

<?xml version='1.0'?> 
<methodCall> 
<methodName>createObject</methodName> 
<params> 
<param> 
<value><struct> 
<member> 
<name>headers</name> 
<value><struct> 
<member> 
<name>authenticate</name> 
<value><struct> 
<member> 
<name>username</name> 
<value><string>***USERNAME_HERE***</string></value> 
</member> 
<member> 
<name>apiKey</name> 
<value><string>***API_KEY_HERE***</string></value> 
</member> 
</struct></value> 
</member> 
</struct></value> 
</member> 
</struct></value> 
</param> 
<param> 
<value><struct> 
<member> 
<name>ipAddress</name> 
<value><string>***TARGET_IP_HERE***</string></value> 
</member> 
<member> 
<name>accountId</name> 
<value><int>***ACCOUNT_ID_HERE***</int></value> 
</member> 
</struct></value> 
</param> 
</params> 
</methodCall> 

收到的HTTP響應是:

HTTP/1.1 200 OK 
Date: Thu, 09 Feb 2017 12:47:17 GMT 
Server: Apache 
X-Frame-Options: SAMEORIGIN 
Vary: Accept-Encoding 
Connection: close 
Content-Type: text/xml 
Content-Length: 495 

<?xml version="1.0" encoding="iso-8859-1"?> 
<methodResponse> 
<fault> 
<value> 
    <struct> 
    <member> 
    <name>faultCode</name> 
    <value> 
    <string>SoftLayer_Exception</string> 
    </value> 
    </member> 
    <member> 
    <name>faultString</name> 
    <value> 
    <string>Unable to create a new object of type SoftLayer_Network_Security_Scanner_Request_Nessus. Make sure the authentication method is correct.</string> 
    </value> 
    </member> 
    </struct> 
</value> 
</fault> 
</methodResponse> 

可能有人請幫助我,並看看代碼,因爲我無法弄清楚問題出在哪裏。 您是否還可以提供此工作所需的最低權限列表?

注意:我嘗試了所有可能的權限啓用了調試,但沒有運氣

回答

0

這看起來像是與API的問題,它不只是工作,指定你需要指定的硬件ID的IP ADDRES(用於裸金屬服務器)或guestId(對於虛擬客戶服務器)

所以嘗試這樣的代碼:

import SoftLayer 

USERNAME="set me" # I put valid value in here 
APIKEY="set me"  # I put valid value in here 
TARGET="set me"  # I put valid value in here 

client = SoftLayer.create_client_from_env(
    username=USERNAME, 
    api_key=APIKEY 
) 

account = client['Account'].getObject() 
server = client['Virtual_Guest'].findByIpAddress(TARGET) 
if (server) : 
    request = { 
      "accountId": account["id"], 
      "guestId": server["id"] 
    } 
else: 
    server = client['Hardware_Server'].findByIpAddress(TARGET) 
    if (server): 
     request = { 
      "accountId": account["id"], 
      "hardwareId": server["id"] 
    } 
    else: 
     print ("server does not exist.") 
     exit 
scanner = client['Network_Security_Scanner_Request'].createObject(request) 
+0

使用您的代碼導致以下異常:SoftLayer.exceptions.SoftLayerAPIError:SoftLayerAPIError(SoftLayer_Exception_Public):需要IP地址來啓動安全掃描請求。所以,我將IP地址添加到請求中,但之後我得到了完全相同的異常。 – Keymandll

+0

讓我檢查... –

+0

我有一個與虛擬服務器的請求拼寫錯誤我寫下「guiestId」,而不是「guestId」它現在是固定的,請再試一次 –

0

我測試了從納爾遜上述評論和它正在與guestId設置虛擬系統。所以你必須提供accountId,guestId和ipAddress以便現在可以使用。我也將測試硬件,並期望獲得同樣的成功。如果沒有,我會再回發