NAME
Fierce::Parser - Parse fierce scan data with Perl
VERSION
This document describes the latest version of Fierce::Parser
SYNOPSIS
use Fierce::Parser;
my $fp = new Fierce::Parser;
# a Fierce::Parser Object
my $parser = $fp->parse_file('test1.xml');
# a Fierce::Parser::Host Object
my $host = $parser->get_node('google.com');
For a full listing of methods see the documentation corresponding to each object.
DESCRIPTION
OVERVIEW
Fierce::Parser -- Core parser
|
+--Fierce::Parser::Session -- Fierce scan session information
|
+--Fierce::Parser::Domain -- General domain information
| |
| |--Fierce::Parser::Domain::NameServers -- Nameserver Information about the Domain
| |
| |--Fierce::Parser::Domain::ZoneTransfer -- Zone Transfer information
| |
| |--Fierce::Parser::Domain::Bruteforce -- Nodes found using Bruteforce
| |
| |--Fierce::Parser::Domain::ExtBruteforce -- Nodes found using Extension Bruteforce
| |
| |--Fierce::Parser::Domain::ReverseLookups -- Nodes found using Reverse Lookups
| |
| |--Fierce::Parser::Domain::WildCard -- Information about MX records found
| |
| |--Fierce::Parser::Domain::WhoisLookup -- Information about Whois lookups
| |
| |--Fierce::Parser::Domain::FindMX -- Information about MX records found
| |
| |--Fierce::Parser::Domain::Vhost -- Information about Virtual Hosts found
METHODS
Fierce::Parser
The main idea behind the core modules is, you will first parse the scan data then extract the information. Therefore, you should run parse_file then you can use any of the subroutines.
- parse_file($xml_file)
-
Parse a fierce XML file. The XML files are generated from using the following command:
fierce.pl -dns $DOMAIN -format xml -output domain.xml
- parse_file($args,@domains)
-
Perform a fierce scan and parse the XML result.
use Fierce::Parser; my $fp = new Fierce::Parser; my @domains; push(@domains,"google.com"); my $parser = $fp->parse_scan("",@domains);
- get_session()
-
Obtain the fierce::Parser::Session object which contains the session scan information.
- get_node($domain)
-
Obtain the Fierce::Parser::Host object which the host information.
- get_all_nodes()
-
Obtain an Array of Fierce::Parser::Node objects which contain domain information.
Fierce::Parser::Session
This object contains the scan session information of the Fierce scan.
- options()
-
Returns the options used to execute fierce.
- startscan()
-
Returns the start time of the scan in unixtime format.
- startscanstr()
-
Returns the start time of the scan in a readable string.
- endscan()
-
Returns the end time of the scan in unixtime format.
- endscanstr()
-
Returns the end time of the scan in a readable string.
- elapsedtime()
-
Returns the elapsed time of the scan.
- fversion()
-
Returns the version of Fierce.
- xmlversion()
-
Returns the xml version.
Fierce::Parser::Domain
This object contains the information for a domain.
Fierce::Parser::Node
This object contains the information for a node. A Node is a simplistic object containing information about a device found during a Fierce scan. Many of the Fierce modules use a Node to represent the a device.
- ip()
-
Returns the ip address of the node.
- hostname()
-
Returns the hostname of the node.
- type()
-
Return the type of the node.
Fierce::Parser::ZoneTransferResult
This Object contains the information for a zone transfer request.
- domain
-
Returns the domain being tested.
- name_server
-
Returns the name_server being tested.
- bool
-
Returns 1 or 0 if a zone transfer exists. 1=true and 0=false.
- raw_output
-
Returns the raw output of a axfr request.
- nodes
-
Returns an ArrayRef containing Node Objects.
Fierce::Parser::Domain::NameServers
This object contains the Nameserver Information about the Domain.
- startscan()
-
Returns the start time of the scan in unixtime format.
- startscanstr()
-
Returns the start time of the scan in a readable string.
- endscan()
-
Returns the end time of the scan in unixtime format.
- endscanstr()
-
Returns the end time of the scan in a readable string.
- elapsedtime()
-
Returns the elapsed time of the scan.
- nodes()
-
Returns an Arrayref containing Node Objects.
EXAMPLE
my $name_servers = $domain->name_servers;
foreach my $i ( @{ $name_servers->nodes } ) {
print "\thostname:" . "\t" . $i->hostname . "\n";
print "\tip:" . "\t\t" . $i->ip . "\n";
}
Fierce::Parser::Domain::ZoneTransfer
This object contains the Zone Transfer information.
- startscan()
-
Returns the start time of the scan in unixtime format.
- startscanstr()
-
Returns the start time of the scan in a readable string.
- endscan()
-
Returns the end time of the scan in unixtime format.
- endscanstr()
-
Returns the end time of the scan in a readable string.
- elapsedtime()
-
Returns the elapsed time of the scan.
- result()
-
Returns an ArrayRef containing ZoneTransferResult objects.
EXAMPLE
my $name_servers = $domain->name_servers;
my $zone_transfers = $domain->zone_transfers;
foreach my $i ( @{ $name_servers->nodes } ) {
print "\tIP:" . "\t\t" . $i->ip . "\n";
print "\tZone Transfer:" . "\t";
foreach ( @{ $zone_transfers->result } ) {
if ($i->hostname eq $_->name_server ) {
if ($_->bool == 1) {
print "Enabled\n";
print "\n\tZone Trasfer Result:" . "\t";
print "\t\t" . $_->raw_output . "\n";
}
else {
print "Disabled\n";
}
}
}
}
Fierce::Parser::Domain::Bruteforce
This object contains the Nodes found using Prefix Bruteforce.
- startscan()
-
Returns the start time of the scan in unixtime format.
- startscanstr()
-
Returns the start time of the scan in a readable string.
- endscan()
-
Returns the end time of the scan in unixtime format.
- endscanstr()
-
Returns the end time of the scan in a readable string.
- elapsedtime()
-
Returns the elapsed time of the scan.
- nodes()
-
Returns an ArrayRef containing Node objects.
EXAMPLE
my $bruteforce = $domain->bruteforce;
foreach ( @{ $bruteforce->nodes } ) {
print "\tHostname:" . "\t" . $_->hostname . "\n";
print "\tIP: " . "\t\t" . $_->ip . "\n";
}
Fierce::Parser::Domain::ExtBruteForce
This object contains the Nodes found using Extension Bruteforce.
- startscan()
-
Returns the start time of the scan in unixtime format.
- startscanstr()
-
Returns the start time of the scan in a readable string.
- endscan()
-
Returns the end time of the scan in unixtime format.
- endscanstr()
-
Returns the end time of the scan in a readable string.
- elapsedtime()
-
Returns the elapsed time of the scan.
- nodes()
-
Returns an ArrayRef containing Node objects.
EXAMPLE
my $ext_bruteforce = $domain->ext_bruteforce;
foreach ( @{ $ext_bruteforce->nodes } ) {
print "\thostname:" . "\t" . $_->hostname . "\n";
print "\tip: " . "\t\t" . $_->ip . "\n";
}
Fierce::Parser::Domain::ReverseLookups
This object contains the Nodes found using Reverse Lookups.
- startscan()
-
Returns the start time of the scan in unixtime format.
- startscanstr()
-
Returns the start time of the scan in a readable string.
- endscan()
-
Returns the end time of the scan in unixtime format.
- endscanstr()
-
Returns the end time of the scan in a readable string.
- elapsedtime()
-
Returns the elapsed time of the scan.
- nodes()
-
Returns an ArrayRef containing Node Objects.
EXAMPLE
my $reverse_lookups = $domain->reverse_lookups;
foreach ( @{ $reverse_lookups->nodes } ) {
print "\thostname:" . "\t" . $_->hostname . "\n";
print "\tip: " . "\t\t" . $_->ip . "\n";
}
Fierce::Parser::Domain::WildCard
This object contains the Information about MX records found.
- startscan()
-
Returns the start time of the scan in unixtime format.
- startscanstr()
-
Returns the start time of the scan in a readable string.
- endscan()
-
Returns the end time of the scan in unixtime format.
- endscanstr()
-
Returns the end time of the scan in a readable string.
- elapsedtime()
-
Returns the elapsed time of the scan.
Fierce::Parser::Domain::WhoisLookup
This object contains the Information about Whois lookups.
- startscan()
-
Returns the start time of the scan in unixtime format.
- startscanstr()
-
Returns the start time of the scan in a readable string.
- endscan()
-
Returns the end time of the scan in unixtime format.
- endscanstr()
-
Returns the end time of the scan in a readable string.
- elapsedtime()
-
Returns the elapsed time of the scan.
EXAMPLE
my $whois_lookup = $domain->whois_lookup;
print "Whois:\n";
foreach ( @{ $whois_lookup->result } ) {
print "\tNetHandle:" . "\t" . $_->net_handle . "\n";
print "\tNetRange: " . "\t" . $_->net_range . "\n";
}
print "\n";
Fierce::Parser::Domain::FindMX
This object contains Information about MX records found.
- startscan()
-
Returns the start time of the scan in unixtime format.
- startscanstr()
-
Returns the start time of the scan in a readable string.
- endscan()
-
Returns the end time of the scan in unixtime format.
- endscanstr()
-
Returns the end time of the scan in a readable string.
- elapsedtime()
-
Returns the elapsed time of the scan.
EXAMPLE
my $reverse_lookups = $domain->reverse_lookups;
foreach ( @{ $findmx->result } ) {
print "\tpreference:" . "\t" . $_->preference . "\n";
print "\texchange: " . "\t" . $_->exchange . "\n";
}
Fierce::Parser::Domain::Vhost
This object contains Information about Virtual Hosts found.
- startscan()
-
Returns the start time of the scan in unixtime format.
- startscanstr()
-
Returns the start time of the scan in a readable string.
- endscan()
-
Returns the end time of the scan in unixtime format.
- endscanstr()
-
Returns the end time of the scan in a readable string.
- elapsedtime()
-
Returns the elapsed time of the scan.
- nodes()
-
Returns an ArrayRef containing Node Objects.
EXAMPLE
my $reverse_lookups = $domain->reverse_lookups;
foreach ( @{ $vhost->nodes } ) {
print "\thostname:" . "\t" . $_->hostname . "\n";
print "\tip: " . "\t\t" . $_->ip . "\n";
}
EXAMPLES
Here is an example of parsing an XML file using Fierce::Parser:
use Fierce::Parser;
my $fp = new Fierce::Parser;
if (defined($ARGV[0])){
my $file = $ARGV[0];
my $parser = $fp->parse_file($file);
my @nodes = $parser->get_all_nodes();
foreach my $n (@nodes){
my $domain = $n;
my $name_servers = $domain->name_servers;
my $zone_transfers = $domain->zone_transfers;
my $bruteforce = $domain->bruteforce;
my $vhost = $domain->vhost;
my $subdomain_bruteforce = $domain->subdomain_bruteforce;
my $ext_bruteforce = $domain->ext_bruteforce;
my $reverse_lookups = $domain->reverse_lookups;
my $wildcard = $domain->wildcard;
my $findmx = $domain->findmx;
my $find_nearby = $domain->find_nearby;
print "==== " . $n->domain . " ====\n";
if ( $name_servers ) {
print "Nameservers:\n";
foreach my $i ( @{ $name_servers->nodes } ) {
print "\tHostname:" . "\t" . $i->hostname . "\n";
print "\tIP:" . "\t\t" . $i->ip . "\n";
print "\tZone Transfer:" . "\t";
foreach ( @{ $zone_transfers->result } ) {
if ($i->hostname eq $_->name_server ) {
if ($_->bool == 1) {
print "Enabled\n";
print "\n\tZone Trasfer Result:" . "\t";
print "\t\t" . $_->raw_output . "\n";
}
else {
print "Disabled\n";
}
}
}
print "\n";
}
if ( $findmx ) {
print "MX:\n";
foreach ( @{ $findmx->result } ) {
print "\tpreference:" . "\t" . $_->preference . "\n";
print "\texchange: " . "\t" . $_->exchange . "\n";
}
print "\n";
}
if ($bruteforce) {
print "Prefix Bruteforce:\n";
foreach ( @{ $bruteforce->nodes } ) {
print "\tHostname:" . "\t" . $_->hostname . "\n";
print "\tIP: " . "\t\t" . $_->ip . "\n";
}
print "\n";
}
if ($vhost) {
print "Virtual Hosts:\n";
foreach ( @{ $vhost->nodes } ) {
print "\thostname:" . "\t" . $_->hostname . "\n";
print "\tip: " . "\t\t" . $_->ip . "\n";
}
print "\n";
}
if ($ext_bruteforce){
print "Extension Bruteforce:\n";
foreach ( @{ $ext_bruteforce->nodes } ) {
print "\thostname:" . "\t" . $_->hostname . "\n";
print "\tip: " . "\t\t" . $_->ip . "\n";
}
print "\n";
}
if ($reverse_lookups){
print "reverse lookup:\n";
foreach ( @{ $reverse_lookups->nodes } ) {
print "\thostname:" . "\t" . $_->hostname . "\n";
print "\tip: " . "\t\t" . $_->ip . "\n";
}
print "\n";
}
if ($find_nearby){
print "Find Nearby:\n";
foreach ( @{ $find_nearby->ptrs } ) {
print "\tPtrdname:" . "\t" . $_->ptrdname . "\n";
print "\tIP: " . "\t\t" . $_->ip . "\n";
}
}
}
}
else {
print "Usage: $0 [fierce-xml]\n";
}
SEE ALSO
fierce, XML::LibXML and Object::InsideOut
AUTHOR
Joshua D. Abraham, <jabra AT spl0it DOT org>
COPYRIGHT AND LICENSE
Copyright 2009 Joshua D. Abraham. All rights reserved.
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.