2017-02-09 1 views
0

Ich versuche Softlayers Python-Bibliothek zu verwenden, um automatisierte Schwachstellen-Scans durchzuführen. Leider bekomme ich folgende Ausnahme:SoftLayer-Schwachstellen-Scan 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.

Der Code, den ich verwende, kann unten gesehen werden.

erhielt
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> 

Die HTTP-Antwort ist:

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

Die HTTP-Anforderung durch die aussehen Python-Bibliothek gesendet werden

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> 

Könnte mir jemand bitte helfen und einen Blick auf der Code, da ich nicht herausfinden konnte, wo das Problem sein könnte. Könnten Sie bitte auch die Liste der erforderlichen Berechtigungen angeben, damit dies funktioniert?

Hinweis: Ich mit allen möglichen Berechtigungen versucht, aktiviert für das Debuggen aber kein Glück

Antwort

0

dies mit der API wie ein Problem aussieht, ist es nicht nur die IP addres Sie die HardwareID angeben müssen Angabe funktioniert (für Bare-Metal-Server) oder guestId (für virtuellen Gast-Server)

versucht so diesen Code:

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

Mit Ihrem Code ergab sich die folgende Ausnahme: SoftLayer.exceptions.SoftLayerAPIError: SoftLayerAPIError (SoftLayer_Exception_Public): Eine IP-Adresse ist erforderlich, um eine Sicherheitsabfrage zu starten. Also, ich habe die IP-Adresse der Anfrage hinzugefügt, aber dann bekomme ich genau die gleiche Ausnahme wie zuvor. – Keymandll

+0

Lassen Sie mich überprüfen ... –

+0

Ich hatte einen Schreibfehler mit der Anfrage für virtuelle Server Ich notierte "guiestId" statt "guestId" Es ist jetzt behoben Bitte versuchen Sie es erneut –

0

ich den oben Kommentar von Nelson getestet und es funktioniert mit guestId für virtuelles set Systeme. Sie müssen also accountId, guestId und ipAddress angeben, damit dies jetzt funktioniert. Ich werde auch Hardware testen und den gleichen Erfolg erwarten. Wenn nicht, werde ich wieder zurück