2017-02-09 17 views
0

私はSoftLayerのPythonライブラリを使用して自動脆弱性スキャンを実行しようとしています。残念ながら、次の例外が発生します。SoftLayer脆弱性スキャンPython

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 
}) 

Pythonライブラリによって送信されたHTTPリクエストは次のようになります。

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> 

誰かが私を助けてと見てもらえ私は問題がどこにあるのか理解できなかったので、コード。 これを動作させるために必要な最小限のアクセス許可リストも提供してください。

:私はすべての可能なアクセス許可をしようとしたが、デバッグが、これはAPIの問題のように見えます

答えて

0

が、それはあなたがハードウェア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

仮想サーバーのリクエストでスペルミスがありました。 "guestId"の代わりに "guiestId"を書きました。 –

0

私はネルソンから上記のコメントをテストし、それが仮想のためguestIdセットで作業していますシステム。したがって、これを行うにはaccountId、guestId、およびipAddressを提供する必要があります。私はハードウェアもテストし、同じ成功を期待しています。そうでない場合は、再度投稿します