OOMon: The OO IRC Monitor Bot

Frequently Asked Questions (FAQ)

1.0 - What is OOMon and Where can I get it?

1.1 - What is OOMon?  (top)

OOMon is an Object-Oriented Monitor bot for Internet Relay Chat (IRC) servers. OOMon monitors various types of IRC activity for possible abuse. When abuse is detected, the OOMon may automatically remove and/or ban the abusive client from the server, or notify server operators for them to deal with the issue appropriately.

The official OOMon website is http://oomon.sourceforge.net/.

1.2 - Why should I use it?  (top)

If you are an IRC server operator or administrator who does not want users to abuse the service you provide and/or support, you should run an OOMon connection monitor.

1.3 - What Operating Systems are supported?  (top)

Practically any Unix-like operating system should compile and run OOMon successfully. However, the following operating systems have been confirmed to run OOMon without problems:

  • FreeBSD/OpenBSD/NetBSD
  • Linux
  • Solaris
  • Cygwin (Windows)

If you are running an operating system other than one listed above, don't despair! If you have GNU C++ and the GNU Standard Template Library (STL) installed, chances are OOMon will build successfully on your system.

1.4 - What IRC Servers are supported?  (top)

OOMon is known to work well with the following IRC Servers:

  • ircd-hybrid (versions 5, 6, and 7)
  • ircd-ratbox

If you run a different ircd version and OOMon works correctly on your server, please let us know by submitting a documentation bug tracker item.

1.5 - Where should I ask for help?  (top)

There are several ways to get your questions answered. In the order of most likely to get answered, they are:

  1. Check the official OOMon web site. In particular, read the FAQ, in case your question has already been answered there.
  2. Post your question to the oomon-discuss mailing list.
  3. Post your question to the OOMon Help forum.
  4. Join the IRC channel #OOMon on EFNet.

When asking questions, please follow these guidelines to ensure prompt and accurate answers:

Ask your question directly, without any unnecessary preamble.

Bad questions:
Can I ask a question?
Has anyone ever used X?
Can someone help me with Y?

Good questions:
When using FOO, why does BAR always make QUUX disconnect?

Saying "it doesn't work" is not a good problem description. Rather than saying, "Spambot detection doesn't work", say something like, "Even though I've enabled WATCH_SPAMBOT_NOTICES and set SPAMBOT_ACTION to KLINE, my OOMon never klines any spambots."

Don't be annoying, obnoxious, or offensive. Please follow standard netiquette.

Ask your question in English only. While many users speak other languages, asking your question in English ensures the greatest possible audience for your question, and allows others to benefit from any answers as well.

On IRC, please DO NOT paste large amounts of text. Instead, use a "paste bin" site like http://www.nomorepasting.com/ and paste the resulting URL to the channel.

On IRC, use your space bar to separate words. Doing the following will likely get you removed from the channel:

<n00b> So
<n00b> I tried
<n00b> ".kline" and
<n00b> ".dline" but uhm...
<n00b> like...
<n00b> it doesn't work

2.0 - Compile-Time Issues

2.1 - How do I build the most recent code?  (top)

2.2 - Why does it take so long to compile OOMon?  (top)

A large portion of the time spent compiling OOMon is due to the optimizations the compiler performs. You can reduce the time it takes to compile OOMon by removing the "-O" flag from CXXFLAGS in the makefile.

There is a trade-off when removing the optimize flag. Decreasing the compile time will probably cause OOMon to run slower and use memory less efficiently.

2.3 - Why can't I build OOMon on <insert commercial Unix OS name>  (top)

You're probably using the broken compiler shipped with the OS. Please use the GNU C++ compiler to build OOMon. If you know you already have GNU C++ installed, enter the following command prior to running the configure script:

CXX=g++; export CXX

Or, if you use the csh or tcsh shell:

setenv CXX g++

3.0 - Run-Time Issues

3.1 - Why is OOMon showing duplicate "STATS p" notices?  (top)

Most likely you are running ircd-hybrid-7, or an ircd derived from it, and have the modules spy_stats_notice.so and spy_stats_p_notice.so both loaded. Unload one of them, and you'll stop seeing duplicates.

3.2 - How do I completely disable Open Proxy DNSBL look-ups?  (top)

As of OOMon-2.3, you can completely disable all DNSBL look-ups by setting DNSBL_PROXY_ENABLE:

.set dnsbl_proxy_enable off

Users of older version of OOMon can disable DNSBL look-ups by clearing the DNSBL_PROXY_ZONE setting:

.set -dnsbl_proxy_zone

3.3 - How do I make OOMon initiate a DCC request?  (top)

Users who IRC from behind a firewall or NAT device may find it useful to have the bot initiate DCC requests so that they do not have to open or forward TCP ports in their network hardware. To make OOMon initiate a DCC request, issue a CTCP CHAT command as follows:

/ctcp <nickname> chat

Note that the same rules apply in this scenario. If OPER_ONLY_DCC is enabled, your userhost must match one of the masks listed an O: line in the config file. If no matching masks are found, OOMon will ignore your CTCP command.

4.0 - Bug Reports and Suggestions

4.1 - How should I report bugs?  (top)

Before submitting a bug report, please check this FAQ for possible solutions.

Submit your bug reports through the SourceForge.net bug tracker interface. You do not have to login to a SourceForge account to submit bug reports, but PLEASE include contact information in the text of your report. In particular, your email address or IRC information (nick@network) will help me in case I need to contact you for additional information.

Try to include as much information about the problem as possible. Include excerpts from your OOMon log file if necessary. Please do not send a core dump file unless it is specifically requested.

It's always a good idea to periodically check on your bug report in case additional information is requested.

4.2 - Will you add <feature> in the next version?  (top)

Submit your feature requests through the SourceForge.net feature request interface. Like bug reports, you do not have to login to a SourceForge account to submit feature requests, but PLEASE include contact information in the text of your request!

Please note that asking in channel #oomon or private messaging me will not get your request automatically added to the list, even if I tell you its a great idea! If the feature request is important to you, you must submit it through the web site.

It's always a good idea to periodically check on your feature request in case additional information is requested.

4.3 - My OOMon crashed or disconnected with the message "Abnormal termination." What happened?  (top)

Your OOMon appears to have crashed due to a bug. You can help me out by filling out a bug report containing the following information:

  1. The version of OOMon you were running if it was an official release. If it was from CVS, the date and time of the checkout. If it was a from a snapshot tarball, the date of the snapshot.
  2. A description of what you were doing when OOMon crashed.
  3. The last 5 to 10 lines of your oomon.log file:

    tail -10 oomon.log

  4. A full backtrace of the crash using the GDB debugger:
  5. Find the location of the resulting core file. It's usually called "oomon.core" or just "core".

    Change to the directory containing the source code to your OOMon. The version of the source code MUST match the version of the executable that crashed Run GDB:


    Make sure you replace "<EXECUTABLE>" with the OOMon executable filename that crashed and "<CORE>" with the resulting core filename. At the "(gdb)" prompt, type the following command:

    bt full

    Please copy the entire output of this command to your bug report.

4.4 - I can't find a core file! Now what?  (top)

There are several reasons for why a core file might not be generated:

  • Your OOMon was built without debug information. Rebuild OOMon with "-g" in the CXXFLAGS environment variable.
  • Your OOMon executable was stripped. Rebuild OOMon and don't strip the executable this time.
  • Your resource limits are preventing core files from being generated. The command to change resource limits is OS dependent, so check your documentation. On FreeBSD, you can use this command to increase the core file limit:

    limits -c infinity

If none of the above help you create core files, try running your OOMon from inside GDB:

  1. Start GDB (you might want to do this inside a screen session):

    gdb ./oomon

  2. At the first "(gdb)" prompt, set your command line arguments to include the "-d" option:

    set args -d

  3. Be sure to specify any other command line arguments you would normally use. At the next "(gdb)" prompt, run your OOMon:


  4. Now let your OOMon run until it crashes. When that happens, enter the following command at the "(gdb)" prompt:

    bt full

  5. Copy the entire output of this command to your bug report.

5.0 - Miscellaneous

5.1 - Why object oriented? Why C++?  (top)

I started writing OOMon while I was taking a C++ course at the University of Arizona. At the time, I had made some minor modifications to the TCM (Texas.NET Connection Monitor) bot source code, and I realized how much more pleasant it would have been to work on TCM had it been written using object orientation.

Don't get me wrong--TCM was an amazing piece of work at the time. In fact, much of OOMon's code is based on TCM, so it deserves much credit. However, I wanted to apply what I learned in my C++ course to make a better connection monitor bot.

5.2 - How can I learn C++ programming?  (top)

First, don't use my OOMon code as a model for good C++ programming. At heart, I'm really an x86 assembly and C programmer. I learned C++ later on and that fact probably shows well in my code. I'm still learning, however, so I'm gradually rewriting various pieces of OOMon to make it better and better.

If you are, like me, a C programmer and you want to pick up some C++ skills, I highly recommend Accelerated C++: Practical Programming by Example, by Andrew Koenig and Barbara E. Moo. This book was recommended to me and I promptly read it cover-to-cover. I still refer to it regularly as I'm coding.

This document is XHTML 1.0 Strict and CSS 3 compliant. Site issues/problems? Contact <avj> [at] <users.sf.net>