+++ /dev/null
-#!/usr/bin/perl
-######################################################################
-# l7cookie
-# Calculate cookie value for UltraMonkey-L7 cpassive module.
-#
-# 2009 (C) NTT COMWARE
-#
-# License: GNU General Public License (GPL)
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License as
-# published by the Free Software Foundation; either version 2 of the
-# License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301 USA
-######################################################################
-
-use strict;
-use warnings;
-use Getopt::Long;
-use Sys::Hostname;
-use Socket;
-
-$| = 1;
-
-# default value
-my ($ip_def) = inet_ntoa((gethostbyname(hostname))[4]);
-my $port_def = 80;
-my $cookie_def = 'CookieName';
-
-# option value
-my $ip;
-my $port;
-my $cookie;
-my $help;
-my $encoded;
-
-# get options
-my $opt = GetOptions(
- "cookie=s" => \$cookie,
- "ip=s" => \$ip,
- "port=s" => \$port,
- "help" => \$help,
- "decode=s" => \$encoded,
-);
-
-# help
-usage() if $help || !$opt;
-
-# decode cookie value
-decode($encoded) if (defined $encoded && $encoded =~ /^\d{15}$/);
-
-# get IP address
-if (!defined $ip) {
- print "Input IP address [$ip_def]: ";
- $ip = <>;
- $ip =~ s/\s//g;
- # set default IP address
- $ip = $ip_def if $ip eq q{};
-}
-
-# IP address validation
-if ($ip =~ /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/ &&
- $1 < 256 && $2 < 256 && $3 < 256 && $4 < 256) {
- $ip = $1 + (($2 + (($3 + ($4 << 8)) << 8)) << 8);
-} else {
- usage("Bad IP address.($ip)");
-}
-
-# get port number
-if (!defined $port) {
- print "Input port number [$port_def]: ";
- $port = <>;
- $port =~ s/\s//g;
- # set default port number
- $port = $port_def if $port eq q{};
-}
-
-# Port number validation
-if ($port =~ /^\d+$/ && $port < 65536) {
- # same as htons(3)
- $port = unpack('n*', pack('S*', $port));
-} else {
- usage("Bad port number.($port)");
-}
-
-# get cookie name
-if (!defined $cookie) {
- print "Input cookie name [$cookie_def]: ";
- $cookie = <>;
- $cookie =~ s/\s//g;
- # set default cookie name
- $cookie = $cookie_def if $cookie eq q{};
-}
-
-# show Set-Cookie header field
-print "\n";
-printf "Set-Cookie: %s=%010s%05s\n", $cookie, $ip, $port;
-
-#--------------------------------------------------------------------
-# usage
-sub usage {
- my $msg = shift;
- if ($msg) {
- print $msg, "\n\n";
- }
- print <<"__USAGE__";
-Usage: $0 [-i ip_address] [-p port] [-c cookie_name]
-
--i, --ip Set IP address of real server.
--p, --port Set port number of real server.
--c, --cookie Set cookie name of UltraMonkey-L7.
--h, --help Show this usage.
-__USAGE__
-
- exit;
-}
-
-#--------------------------------------------------------------------
-# decode cookie value
-sub decode {
- my $encoded = shift;
- my $_ip = substr($encoded, 0, 10);
- my $_port = substr($encoded, 10, 5);
- print "IP address : ", inet_ntoa(scalar reverse pack('H*', sprintf('%08X', $_ip))), "\n";
- print "Port number: ", unpack('S*', pack('n*', $_port)), "\n";
- exit;
-}