SOAP API examples

This section contains examples for using the SOAP API in the following languages: PERL, PHP, and Python.

PERL example

#!/usr/bin/perl -w

use Data::Dumper;

#use SOAP::Lite ( +trace => all, maptype => {} );

use SOAP::Lite;

#$ENV{PERL_LWP_SSL_VERIFY_HOSTNAME} = 0;

my $soap = SOAP::Lite->proxy('https://localhost/AFA/php/ws.php?wsdl');

# Do not verify the SSL key

$soap->transport->ssl_opts(

verify_hostname => 0,

SSL_verify_mode => 0x00

);

#

# Login to AFA Web Service

#

sub ConnectAFA

{

my $sUserName = shift; # User name

my $sPassword = shift; # Password

my $sDomain = shift; # Domain name or empty for non domain envirnment

$sDomain = (!defined $sDomain) ? '' : $sDomain;

my $method = SOAP::Data->name('ConnectRequest')->attr({xmlns => 'https://www.algosec.com/afa-ws'});

my @params = (

SOAP::Data->name(UserName => $sUserName),

SOAP::Data->name(Password => $sPassword),

SOAP::Data->name(Domain => $sDomain)

);

my $sSessionID = $soap->call($method => @params)->result;

}

#

# Executing query request

#

sub ExecQuery

{

my $sSessionID = shift;

my $sQueryTarget = shift;

$sQueryTarget = (!defined $sQueryTarget) ? '' : $sQueryTarget;

my $method = SOAP::Data->name('QueryRequest')->attr({xmlns => 'https://www.algosec.com/afa-ws'});

my $QueryInput = SOAP::Data->name('QueryRequest')->attr({xmlns => 'https://www.algosec.com/afa-ws'});

my @params = (

SOAP::Data->name(SessionID => $sSessionID),

SOAP::Data->name(QueryInput => \SOAP::Data->value(

SOAP::Data->name(Source => '*'),

SOAP::Data->name(Destination => '*'),

SOAP::Data->name(Service => '80'),

SOAP::Data->name(Service => '443')

)

),

SOAP::Data->name(QueryTarget => $sQueryTarget)

);

return $soap->call($method => @params);

}

#

# Disconnect from AFA Web Service (terminate session)

#

sub DisconnectAFA

{

my $sSessionID = shift;

my $method = SOAP::Data->name('DisconnectRequest')->attr({xmlns => 'https://www.algosec.com/afa-ws'});

my @params = (

SOAP::Data->name(SessionID => $sSessionID),

);

return $soap->call($method => @params)->valueof('//DisconnectResponse');

}

my $sSessionID = ConnectAFA('admin', 'algosec', '');

print "\n";

print "Session ID: '" . $sSessionID ."'";

print "\n";

my $QueryResult = ExecQuery($sSessionID, 'afa-276');

foreach my $Result ($QueryResult->valueof('//QueryResult/')) {

print Dumper($Result);

}

print "\n";

my $Disconnect = DisconnectAFA($sSessionID);

print "Disconnect: ";

print $Disconnect;

print "\n";

PHP example

<?php

ini_set("soap.wsdl_cache_enabled", "0"); // disabling WSDL cache for development

$sHost = '10.135.1.45'; // AFA host

$sWSDLlocavion = 'https://'.$sHost.'/AFA/php/ws.php?wsdl';

$client = new SoapClient($sWSDLlocavion);

$src = '192.168.1.100';

$dst = '10.228.16.10';

$srv = 'tcp/22';

try {

$client->__setLocation($sWSDLlocavion);

$return = $client->connect(array('UserName'=>'admin','Password'=>'algosec','Domain'=>''));

echo "Response of the 'connect' method: \n";

print_r($return);

echo "\n";

flush();

if (isset($return->SessionID)) {

$sSessionID = $return->SessionID;

echo 'Submitting query request...' . "\n";

flush();

$query = array('Source'=>$src, 'Destination'=>$dst, 'Service'=>$srv);

$QueryResult = $client->query(array('SessionID'=>$sSessionID,'QueryInput'=>$query));

echo "Response of the 'query' method: \n";

flush();

print_r($QueryResult);

echo "\n";

$QueryHTMLlink = $QueryResult->QueryUIResult;

echo 'Query HTML link: ' . $QueryHTMLlink."\n";

flush();

$return = $client->disconnect(array('SessionID'=>$sSessionID));

echo "Response of the 'disconnect' method (terminating session): \n";

print_r($return);

echo "\n";

}

}

catch (Exception $objException) {

echo 'Error: '.$objException->getMessage ();

echo 'Error: '.$objException->faultstring;

echo '<xmp>';

print_r($objException);

echo '</xmp>';

}

?>

Python example

#!/usr/bin/python

from SOAPpy import SOAPProxy

def ConnectAFA(params):

    # username/password
    username = params['UserName']
    password = params['Password']
    domain = params['Domain']
    proxy = 'https://'+sHost+'/AFA/php/ws.php?wsdl'
    namespace = 'https://www.algosec.com/afa-ws'
    server = SOAPProxy(proxy, namespace)

    if (DebugMode):
        # uncomment these for debugging output
        server.config.dumpHeadersIn = 1
        server.config.dumpHeadersOut = 1
        server.config.dumpSOAPOut = 1
        server.config.dumpSOAPIn = 1

    response = server.ConnectRequest(UserName=username, Password=password, Domain=domain)
    return response

def SendQueryRequest(params):

    # username/password
    SessionID = params['SessionID']
    QueryInput = params['QueryInput']
    proxy = 'https://'+sHost+'/AFA/php/ws.php?wsdl'
    namespace = 'https://www.algosec.com/afa-ws'
    server = SOAPProxy(proxy, namespace)

    if (DebugMode):
        # uncomment these for debugging output
        server.config.dumpHeadersIn = 1
        server.config.dumpHeadersOut = 1
        server.config.dumpSOAPOut = 1
        server.config.dumpSOAPIn = 1

    response = server.QueryRequest(SessionID=SessionID, QueryInput=QueryInput)
    return response

def DisconnectAFA(params):

    # username/password
    SessionID = params['SessionID']
    proxy = 'https://'+sHost+'/AFA/php/ws.php?wsdl'
    namespace = 'https://www.algosec.com/afa-ws'
    server = SOAPProxy(proxy, namespace)

    if (DebugMode):
        # uncomment these for debugging output
        server.config.dumpHeadersIn = 1
        server.config.dumpHeadersOut = 1
        server.config.dumpSOAPOut = 1
        server.config.dumpSOAPIn = 1

    response = server.DisconnectRequest(SessionID=SessionID)
    return response

sHost = '192.168.3.82'

#DebugMode = True
DebugMode = False

print("\nSubmitting connect request:\n")
values = {'UserName': 'admin', 'Password': 'algosec', 'Domain': ''}
afa_connect = ConnectAFA(values)
SessionID = afa_connect
print("Returned Session ID: " + repr(SessionID))

print("\nSubmitting query request:\n")
QueryParams = {'SessionID': SessionID,'QueryInput': {'Source': '192.168.1.100', 'Destination': '10.228.16.10', 'Service': 'tcp/22'}}
QueryResult = SendQueryRequest(QueryParams)
print(QueryResult)

print("\nSubmitting disconnect request:\n")
DisconnectParams = {'SessionID': SessionID}
DisconnectResult = DisconnectAFA(DisconnectParams)
print(DisconnectResult)