# Wordlist

* [Source](https://github.com/sophsec/wordlist#readme)
* [Issues](https://github.com/sophsec/wordlist/issues)
* [Email](mailto:postmodern.mod3 at gmail.com)

## Description

A Ruby library for generating and working with word-lists. Wordlist allows
one to efficiently generate unique word-lists from arbitrary text or
other sources, such as website content. Wordlist can also quickly enumerate
through words within an existing word-list, applying multiple mutation
rules to each word in the list.

## Features

* Uses a bucket system of CRC32 hashes for efficient filtering of duplicate
  words.
* Can build wordlists containing multi-word phrases.
* Can build wordlists containing phrases containing a minimum and maximum
  number of words.
* Supports adding mutation rules to a word-list, which are applied to
  words as the list is enumerated.
* Supports building word-lists from arbitrary text.
* Supports custom word-list builders:
  * Wordlist::Builders::Website: Build word-lists from website content.
* Supports custom word-list formats:
  * Wordlist::FlatFile: Enumerates through the words in a flat-file
    word-list.

## Examples

Build a word-list from arbitrary text:

    Wordlist::Builder.build('list.txt') do |builder|
      builder.parse(some_text)
    end

Build a word-list from another file:

    Wordlist::Builder.build('list.txt') do |builder|
      builder.parse_file('some/file.txt')
    end

Build a word-list of phrases containing at most three words, from the
arbitrary text:

    Wordlist::Builder.build('list.txt', :max_words => 3) do |builder|
      builder.parse(some_text)
    end

Build a word-list from content off a website:

    require 'wordlist/builders/website'

    Wordlist::Builders::Website.build(
      'list.txt',
      :host => 'www.example.com'
    )

Enumerate through each word in a flat-file word-list:

    list = Wordlist::FlatFile.new('list.txt')
    list.each_word do |word|
      puts word
    end

Enumerate through each unique word in a flat-file word-list:

    list.each_unique do |word|
      puts word
    end

Define mutation rules, and enumerate through each unique mutation of each
unique word in the word-list:

    list.mutate 'o', '0'
    list.mutate '@', 0x41
    list.mutate(/[hax]/i) { |match| match.swapcase }

    list.each_mutation do |word|
      puts word
    end

## Requirements

* [spidr](http://spidr.rubyforge.org) >= 0.1.9

## Install

    $ gem install wordlist

## License

See {file:LICENSE.txt} for license information.