#!/usr/bin/perl -w
# ike-scan --trans=5,2,3,2 -o 212.55.202.146
#  for i in 1 2 3 4 5 65001 65002 65003 65004 65005 65006 65007 65008 65009 65010 64221 ; do ./ike-scan --vendor=f4ed19e0c114eb516faaac0ee37daf2807b4381f --auth=$i -M 61.115.200.174; done 
my $debug = 0;
my $fw = "1.2.3.4";
   $fw = @_;
# define encryption alg. (RFC2409 App. A and RFC3602)
my %enc_n = (
 	1 => "DES-CBC",		# DES-CBC
	2 => "IDEA-CBC",	# IDEA-CBC
	3 => "Blowfish-CBC",	# Blowfish-CBC
	4 => "RC5-R16-B64-CBC",	# RC5-R16-B64-CBC
	5 => "3DES-CBC",	# 3DES-CBC
	6 => "CAST-CBC",	# CAST-CBC
	"7/256" => "AES/256",   # AES-256
);
# define hashing alg. (RFC2409 App. A)
my %hash_n = (
	1 => "MD5",		# MD5
	2 => "SHA1",		# SHA1
	3 => "Tiger",		# Tiger
	#4 => "SHA2_256",
	#5 => "SHA2_384",
	#6 => "SHA2_512",
);
# define authentication methods (RFC2409 App. A)
my %auth_n = (
	1 => "PSK",		# pre-shared key
	2 => "DSS",		# DSS signatures
	3 => "RSA_SIG",		# RSA signatures
	4 => "RSA_ENC",		# Encryption with RSA
	5 => "RSA_RevEnc",	# Revised encryption with RSA
    65001 => "GSS",		# GSS (Windows Kerberos).  XAUTH
    65002 => "XAUTH",		# XAUTH
    65003 => "XAUTH",		# XAUTH
    65004 => "XAUTH",		# XAUTH
    65005 => "XAUTH",		# XAUTH
    65006 => "XAUTH",		# XAUTH
    65007 => "XAUTH",		# XAUTH
    65008 => "XAUTH",		# XAUTH
    65009 => "XAUTH",		# XAUTH
    65010 => "XAUTH",		# XAUTH
    64221 => "FW1_AUTH",	# Checkpoint hybrid authentication mode
);
# define diffie hellman groups (RFC209 App. A and RFC3526)
my %group_n = (	
	1 => "DH1[modp768]",	# Group 1 (768 bit)	   
	2 => "DH2[modp1024]",	# Group 2 (1024 bit) 
	3 => "DH3[ec2n155]",
	4 => "DH4[ec2n185]",
	5 => "DH5[modp1536]",	# Group 5 (1536 bit)  
       14 => "DH14[modp2048]",	#
       15 => "DH15[modp3072]",	#
       16 => "DH16[modp4096]",	#
       17 => "DH17[modp6144]",	#
       18 => "DH18[modp8192]",	#
);
	
###############################################################################
# M A I N
foreach my $fw (@ARGV) {
	
	print "Searching for suitable authentication method on $fw...\n";
	foreach $enc (sort keys %enc_n){
	  foreach $hash (sort keys %hash_n){
	    foreach $auth (sort keys %auth_n){
	      foreach $group (sort { $a <=> $b } keys %group_n){
	      	my $s1 = "$enc,$hash,$auth,$group";
	      	# print "--trans=$enc,$hash,$auth,$group $enc_n{$enc},$hash_n{$hash,},$auth_n{$auth},$group_n{$group}";
	        printf "[%5s,%1s,%5s,%2s] %15s %8s %10s %14s",$enc,$hash,$auth,$group,$enc_n{$enc},$hash_n{$hash,},$auth_n{$auth},$group_n{$group};
	        @data=`ike-scan --vendor=f4ed19e0c114eb516faaac0ee37daf2807b4381f -M --trans=$enc,$hash,$auth,$group $fw`;
	        #@data=`ike-scan --vendor=4048b7d56ebce88525e7de7f00d6c2d3c0000000 -t 30 -M --trans=$enc,$hash,$auth,$group $fw`;
	        foreach $d (@data) {
	          if ($debug) {	print "\n$d\n"; }
	          else { print " - $1  \n" if ($d=~m/VID=\w+ (\(.+\))\n/); }
	        }
	        print "\b" x 80;
	        print " " x 80;
	        print "\b" x 80;
	      }
	      
	    }
	  }
	}
}




