diff -u ip_login.orig/ip_login.module ip_login/ip_login.module
--- ip_login.orig/ip_login.module       2011-09-08 19:48:33.000000000 +0200
+++ ip_login/ip_login.module    2012-01-02 21:57:49.571972321 +0100
@@ -224,7 +224,7 @@
   //TODO: replace with regexp ideally
   // validate: replace all non-numeric but legal IP range chars with '|'
   $value = $form['ip_login_matches']['ip_login_match']['#value'];
-  $ip_login_addresses = strtr($value, ' ,.-*', '|||||');
+  $ip_login_addresses = strtr($value, ' ,.-*:', '||||||');
 
   foreach (explode('|', $ip_login_addresses) as $quad) {
     if (!empty($quad) && !is_numeric($quad)) {
@@ -288,7 +288,12 @@
   }
 
    // break up IP for ip address
-  $addr = explode(".", check_plain($ip));
+  if (strpos($ip,':') === FALSE) {
+    $sep = '.';
+  } else {
+    $sep = ':';
+  }
+  $addr = explode($sep, check_plain($ip));
   $matches = FALSE;
   $uid_matched = 0;
 
@@ -300,14 +305,14 @@
        FROM {ip_login_user}
        WHERE ip_match LIKE (:addr)
        ORDER by LENGTH(ip_match) ASC",
-      array(':addr' => '%' . $addr[0] . '.%')
+      array(':addr' => '%' . $addr[0] . $sep . '%')
     );
   foreach ($partial_matches as $row) {
     // multiple values are separated with commas so try each in turn
     $user_ip_ranges = explode(",", $row->ip_match);
     foreach ($user_ip_ranges as $ip_range) {
       // clear any whitespace, break into quads, then compare
-      $ip_range = explode('.', trim($ip_range));
+      $ip_range = explode($sep, trim($ip_range));
       foreach ($ip_range as $index => $quad) {
         $matches = ip_login_match_quad($addr[$index], $quad);
         if (!$matches) break; // no match, escape this foreach and move on to next IP range
@@ -607,4 +612,4 @@
     }
   }
   return FALSE;
-}
\ No newline at end of file
+}
