.SH NAME
hath \- Manipulate network blocks in CIDR notation
-
.SH SYNOPSIS
\fBhath\fR [\fBregexed|reduced|duped|diffed\fR] [\fB\-h\fR] [\fB-i \fIFILE\fR] \fI<input>\fR
-
.SH INPUT
-
.P
The \fIinput\fR (default: stdin) should be a list of CIDR blocks,
separated by whitespace. Empty lines will be ignored, but otherwise,
malformed entries will cause an error to be displayed.
-
.SH DESCRIPTION
-
.P
Hath is a Haskell program for working with network blocks in CIDR
notation. When dealing with blocks of network addresses, there are a
few things that one usually wants to do with them:
-
-.IP \[bu] 2
+.IP \(bu 2
Create a regular expression matching the CIDR block(s). This is
because grep will throw up if you feed it CIDR.
-
-.IP \[bu]
+.IP \(bu
Combine small blocks into larger ones. For example, if you have two
consecutive /24s, they might combine into a larger /23.
-
-.IP \[bu]
+.IP \(bu
View the result of block combination in a useful way.
-
.P
Hath does just that. It takes as its input (via stdin, or a file with
the -i parameter) a list of CIDR blocks.
-
.SH MODES
-
.P
-Hath currently has four modes:
-
-.IP \[bu] 2
+Hath has several modes:
+.IP \(bu 2
\fBRegexed\fR
-
+.P
This computes a (Perl-compatible) regular expression matching
the input CIDR blocks. It's the default mode of operation.
-
+.P
.nf
-.B $ hath <<< \(dq10.0.0.0/24 10.0.1.0/24\(dq
+.I $ hath <<< \(dq10.0.0.0/24 10.0.1.0/24\(dq
([^\.0-9](10)\.(0)\.(0)\.(0)[^\.0-9]|[^\.0-9](10)\.(0)\.(1)
\.(0)[^\.0-9])
-
-.IP \[bu]
+.fi
+.IP \(bu 2
\fBReduced\fR
-
+.P
This combines small blocks into larger ones where possible, and
eliminates redundant blocks. The output should be equivalent to
the input, though.
-
+.P
.nf
-.B $ hath reduced <<< \(dq10.0.0.0/24 10.0.1.0/24\(dq
+.I $ hath reduced <<< \(dq10.0.0.0/24 10.0.1.0/24\(dq
10.0.0.0/23
-
-.IP \[bu]
+.fi
+.IP \(bu 2
\fBDuped\fR
-
+.P
Shows only the blocks that would be removed by reduce; that is, it
shows the ones that would get combined into larger blocks or are
simply redundant.
-
+.P
.nf
-.B $ hath duped <<< \(dq10.0.0.0/24 10.0.1.0/24\(dq
+.I $ hath duped <<< \(dq10.0.0.0/24 10.0.1.0/24\(dq
10.0.0.0/24
10.0.1.0/24
-
-.IP \[bu]
+.fi
+.IP \(bu 2
\fBDiffed\fR
-
+.P
Shows what would change if you used reduce. Uses diff-like
notation.
-
+.P
.nf
-.B $ hath diffed <<< \(dq10.0.0.0/24 10.0.1.0/24\(dq
+.I $ hath diffed <<< \(dq10.0.0.0/24 10.0.1.0/24\(dq
-10.0.0.0/24
-10.0.1.0/24
+10.0.0.0/23
-
+.fi
+.IP \(bu 2
+\fBListed\fR
+.P
+List the IP addresses contained within the given CIDRs.
+.P
+.nf
+.I $ hath listed <<< \(dq192.168.0.240/29\(dq
+192.168.0.240
+192.168.0.241
+192.168.0.242
+192.168.0.243
+192.168.0.244
+192.168.0.245
+192.168.0.246
+192.168.0.247
+.fi
+.IP \(bu 2
+\fBReversed\fR
+.P
+Perform reverse DNS (PTR) lookups on the IP addresses contained within
+the given CIDRs.
+.P
+.nf
+.I $ hath reversed <<< \(dq198.41.0.4\/30\(dq
+198.41.0.4: a.root-servers.net.
+198.41.0.5:
+198.41.0.6: rs.internic.net.
+198.41.0.7:
+.fi
.P
Each of the modes also supports a present-tense flavor; the following
are equivalent to their counterparts: \fBregex\fR, \fBreduce\fR,
-\fBdupe\fR, \fBdiff\fR.
+\fBdupe\fR, \fBdiff\fR, \fBlist\fR, \fBreverse\fR.
.SH OPTIONS
.
* View the result of block combination in a useful way.
.
- Hath has four modes to perform these functions:
+ Hath has several modes to perform these functions:
.
[@Regexed@]
This computes a (Perl-compatible) regular expression matching
[@Diffed@]
Shows what would change if you used reduce. Uses diff-like
notation.
+ .
+ [@Listed@]
+ List the IP addresses contained within the given CIDRs.
+ .
+ [@Reversed@]
+ Perform reverse DNS (PTR) lookups on the IP addresses contained
+ within the given CIDRs.
.
/Examples/:
.
@
$ grep -P `hath regexed -i cidrs.txt` mail.log
@
-
+ .
+ List the addresses in 192.168.0.240\/29:
+ .
+ @
+ $ hath listed <<< \"192.168.0.240\/29\"
+ 192.168.0.240
+ 192.168.0.241
+ 192.168.0.242
+ 192.168.0.243
+ 192.168.0.244
+ 192.168.0.245
+ 192.168.0.246
+ 192.168.0.247
+ @
+ .
+ Perform PTR lookups on all of 198.41.0.4\/30:
+ .
+ @
+ hath reversed <<< \"198.41.0.4\/30\"
+ 198.41.0.4: a.root-servers.net.
+ 198.41.0.5:
+ 198.41.0.6: rs.internic.net.
+ 198.41.0.7:
+ @
executable hath
build-depends: