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)