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 "\n" + "Submitting connect request:" + "\n"
values = {'UserName': 'admin', 'Password': 'algosec', 'Domain': ''}
afa_connect = ConnectAFA(values)
SessionID = afa_connect
print "Returned Session ID: "+repr(SessionID)
print "\n" + "Submitting 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 "\n" + "Submitting disconnect request:" + "\n"
DisconnectParams = {'SessionID': SessionID}
DisconnectResult = DisconnectAFA(DisconnectParams)
print DisconnectResult