Aimsniff Tips | FreeBSD

Немного устаревший (а может и весьма устаревший) сниффер переписки аськи, но вполне себе рабочий. Как ставить настраивать можно прочитать у Лиссяры. Так вот по дефолту он слушает порт 5190. Однако в документации описано как заставить его слушать не только 5190, а так скажем «несколько портов». Правим конфиг и в переменной filter указываем только tcp:

filter='tcp and port 5190'

меняем на

filter='tcp'

В результате получаем:

# ./aimsniff.sh start
Starting aimSniff...

##########################################################
AIM Sniff v. 0.9dr005
Developed by: Shawn Grimes
Realtex-sux and demiurgie based Cyrillic patches are made by amdk7.
##########################################################

Running with:
        dumpHandles=0
        packetCount=-1
        dev=bge0
        filter=tcp
        promisc=1
        timeout=1000
        SMB=1
        Daemon Mode=1
        nodb=0
        quiet=0
        host=localhost
        user=aimsniff
        password=****
        useSyslog=1
        parentPollTimeout=10
        childCPUMaxPct=80

Другая вещь – у меня aimsniff не хотел запускаться при запуске из-под monit. Обращаем внимание на пид файл:

/var/run/aimsniff_parent.pid а не просто aimsniff.pid

Кстати у многих под FreeBSD сервис не подымался при старте. Вот изсёненный скрипт запуска найденный в сети:

#!/bin/sh

. /etc/rc.subr

name='aimsniff'
rcvar=`set_rcvar`

command="/usr/local/bin/aimSniff.Cyr-005.pl"
pidfile="/var/run/aimsniff_parent.pid"
command_args="-C=/usr/local/etc/aimsniff.conf"

#load_rc_config ${name}
#run_rc_command "$1"

case $1 in
start)
echo Starting aimSniff...
/usr/local/bin/aimSniff.Cyr-005.pl -C=/usr/local/etc/aimsniff.conf
;;
stop)
if [ -r /var/run/aimsniff_parent.pid ]; then
echo Stopping aimSniff...
kill -QUIT `cat /var/run/aimsniff_parent.pid`
fi
;;
restart)
$0 stop
sleep 2
$0 start
;;
*)
echo "Usage: $0 [start|stop|restart]"
;;
esac

Проверено – рабочий.

А вот код для того чтобы aimsniff понимал переписку в поздних версиях ICQ. Добавляем в конец файл аaimSniff.Cyr-005.pl:

#added this function to convert hex to string for me

sub convertHex{
my($value)=@_;
my $tmpval = "";
my $utfstr = "";
my $incr="";
my $bit="";
my $msg="";
my $nextbit="";
my $prevbit="";

# Get rid of unicode
if ($value=~/^0.*/){
for($incr=0;$incr<length($value);$incr+=4){
$bit=substr($value,$incr,4);
$nextbit=substr($value,$incr+4,4);
$prevbit=substr($value,$incr-4,4);

if (($bit=~/^04.*/)&&(($bit=~/^04.*/)||($prevbit=~/^04.*/))) {

if ($bit eq "0410") { $tmpval.=chr(0xC0); } # CYRILLIC CAPITAL LETTER A
elsif ($bit eq "0411") { $tmpval.=chr(0xC1); } # CYRILLIC CAPITAL LETTER BE
elsif ($bit eq "0412") { $tmpval.=chr(0xC2); } # CYRILLIC CAPITAL LETTER VE
elsif ($bit eq "0413") { $tmpval.=chr(0xC3); } # CYRILLIC CAPITAL LETTER GHE
elsif ($bit eq "0414") { $tmpval.=chr(0xC4); } # CYRILLIC CAPITAL LETTER DE
elsif ($bit eq "0415") { $tmpval.=chr(0xC5); } # CYRILLIC CAPITAL LETTER IE
elsif ($bit eq "0401") { $tmpval.=chr(0xA8); } # CYRILLIC CAPITAL LETTER IO
elsif ($bit eq "0416") { $tmpval.=chr(0xC6); } # CYRILLIC CAPITAL LETTER ZHE
elsif ($bit eq "0417") { $tmpval.=chr(0xC7); } # CYRILLIC CAPITAL LETTER ZE
elsif ($bit eq "0418") { $tmpval.=chr(0xC8); } # CYRILLIC CAPITAL LETTER I
elsif ($bit eq "0419") { $tmpval.=chr(0xC9); } # CYRILLIC CAPITAL LETTER SHORT I
elsif ($bit eq "041a") { $tmpval.=chr(0xCA); } # CYRILLIC CAPITAL LETTER K
elsif ($bit eq "041b") { $tmpval.=chr(0xCB); } # CYRILLIC CAPITAL LETTER L
elsif ($bit eq "041c") { $tmpval.=chr(0xCC); } # CYRILLIC CAPITAL LETTER M
elsif ($bit eq "041d") { $tmpval.=chr(0xCD); } # CYRILLIC CAPITAL LETTER N
elsif ($bit eq "041e") { $tmpval.=chr(0xCE); } # CYRILLIC CAPITAL LETTER O
elsif ($bit eq "041f") { $tmpval.=chr(0xCF); } # CYRILLIC CAPITAL LETTER P
elsif ($bit eq "0420") { $tmpval.=chr(0xD0); } # CYRILLIC CAPITAL LETTER R
elsif ($bit eq "0421") { $tmpval.=chr(0xD1); } # CYRILLIC CAPITAL LETTER S
elsif ($bit eq "0422") { $tmpval.=chr(0xD2); } # CYRILLIC CAPITAL LETTER T
elsif ($bit eq "0423") { $tmpval.=chr(0xD3); } # CYRILLIC CAPITAL LETTER U
elsif ($bit eq "0424") { $tmpval.=chr(0xD4); } # CYRILLIC CAPITAL LETTER F
elsif ($bit eq "0425") { $tmpval.=chr(0xD5); } # CYRILLIC CAPITAL LETTER HA
elsif ($bit eq "0426") { $tmpval.=chr(0xD6); } # CYRILLIC CAPITAL LETTER TSE
elsif ($bit eq "0427") { $tmpval.=chr(0xD7); } # CYRILLIC CAPITAL LETTER CHE
elsif ($bit eq "0428") { $tmpval.=chr(0xD8); } # CYRILLIC CAPITAL LETTER SHA
elsif ($bit eq "0429") { $tmpval.=chr(0xD9); } # CYRILLIC CAPITAL LETTER SHCHA
elsif ($bit eq "042a") { $tmpval.=chr(0xDA); } # CYRILLIC CAPITAL LETTER HARD SIG
elsif ($bit eq "042b") { $tmpval.=chr(0xDB); } # CYRILLIC CAPITAL LETTER YERU
elsif ($bit eq "042c") { $tmpval.=chr(0xDC); } # CYRILLIC CAPITAL LETTER SOFT SIG
elsif ($bit eq "042d") { $tmpval.=chr(0xDD); } # CYRILLIC CAPITAL LETTER E
elsif ($bit eq "042e") { $tmpval.=chr(0xDE); } # CYRILLIC CAPITAL LETTER YU
elsif ($bit eq "042f") { $tmpval.=chr(0xDF); } # CYRILLIC CAPITAL LETTER YA
elsif ($bit eq "0430") { $tmpval.=chr(0xE0); } # CYRILLIC SMALL LETTER A
elsif ($bit eq "0431") { $tmpval.=chr(0xE1); } # CYRILLIC SMALL LETTER BE
elsif ($bit eq "0432") { $tmpval.=chr(0xE2); } # CYRILLIC SMALL LETTER VE
elsif ($bit eq "0433") { $tmpval.=chr(0xE3); } # CYRILLIC SMALL LETTER GHE
elsif ($bit eq "0434") { $tmpval.=chr(0xE4); } # CYRILLIC SMALL LETTER DE
elsif ($bit eq "0435") { $tmpval.=chr(0xE5); } # CYRILLIC SMALL LETTER IE
elsif ($bit eq "0451") { $tmpval.=chr(0xB8); } # CYRILLIC SMALL LETTER IO
elsif ($bit eq "0436") { $tmpval.=chr(0xE6); } # CYRILLIC SMALL LETTER ZHE
elsif ($bit eq "0437") { $tmpval.=chr(0xE7); } # CYRILLIC SMALL LETTER ZE
elsif ($bit eq "0438") { $tmpval.=chr(0xE8); } # CYRILLIC SMALL LETTER I
elsif ($bit eq "0439") { $tmpval.=chr(0xE9); } # CYRILLIC SMALL LETTER SHORT I
elsif ($bit eq "043a") { $tmpval.=chr(0xEA); } # CYRILLIC SMALL LETTER K
elsif ($bit eq "043b") { $tmpval.=chr(0xEB); } # CYRILLIC SMALL LETTER L
elsif ($bit eq "043c") { $tmpval.=chr(0xEC); } # CYRILLIC SMALL LETTER M
elsif ($bit eq "043d") { $tmpval.=chr(0xED); } # CYRILLIC SMALL LETTER N
elsif ($bit eq "043e") { $tmpval.=chr(0xEE); } # CYRILLIC SMALL LETTER O
elsif ($bit eq "043f") { $tmpval.=chr(0xEF); } # CYRILLIC SMALL LETTER PE
elsif ($bit eq "0440") { $tmpval.=chr(0xF0); } # CYRILLIC SMALL LETTER ER
elsif ($bit eq "0441") { $tmpval.=chr(0xF1); } # CYRILLIC SMALL LETTER ES
elsif ($bit eq "0442") { $tmpval.=chr(0xF2); } # CYRILLIC SMALL LETTER TE
elsif ($bit eq "0443") { $tmpval.=chr(0xF3); } # CYRILLIC SMALL LETTER U
elsif ($bit eq "0444") { $tmpval.=chr(0xF4); } # CYRILLIC SMALL LETTER EF
elsif ($bit eq "0445") { $tmpval.=chr(0xF5); } # CYRILLIC SMALL LETTER HA
elsif ($bit eq "0446") { $tmpval.=chr(0xF6); } # CYRILLIC SMALL LETTER TSE
elsif ($bit eq "0447") { $tmpval.=chr(0xF7); } # CYRILLIC SMALL LETTER CHE
elsif ($bit eq "0448") { $tmpval.=chr(0xF8); } # CYRILLIC SMALL LETTER SHA
elsif ($bit eq "0449") { $tmpval.=chr(0xF9); } # CYRILLIC SMALL LETTER SHCHA
elsif ($bit eq "044a") { $tmpval.=chr(0xFA); } # CYRILLIC SMALL LETTER HARD SIGN
elsif ($bit eq "044b") { $tmpval.=chr(0xFB); } # CYRILLIC SMALL LETTER YERU
elsif ($bit eq "044c") { $tmpval.=chr(0xFC); } # CYRILLIC SMALL LETTER SOFT SIGN
elsif ($bit eq "044d") { $tmpval.=chr(0xFD); } # CYRILLIC SMALL LETTER E
elsif ($bit eq "044e") { $tmpval.=chr(0xFE); } # CYRILLIC SMALL LETTER YU
elsif ($bit eq "044f") { $tmpval.=chr(0xFF); } # CYRILLIC SMALL LETTER YA
else { $bit=~s/^04//;
$tmpval.=chr(176+hex($bit)); }
}

else { $bit=~s/^..//;
$tmpval.=chr(hex($bit));
}
}
$tmpval=$tmpval." UTF8my";
return $tmpval;
}

my $cp1251 = Unicode::Map8->new("cp1251");

# make an UTF string
for($incr=0;$incr<length($value);$incr+=2){
$bit=substr($value,$incr,2);
$utfstr.=chr(hex($bit));
}

# if ($value=~/^0.*/){
if ($value=~/^0[^0].*/){

# Possibly UTF-16 (UCS-2)
$tmpval = $cp1251->to8($utfstr);
$tmpval=$tmpval." UTF-16";
return $tmpval;
} elsif ((($value=~/^(..)*d1..d1/) or ($value=~/^(..)*d0..d0/)) and ($value!~/^0003.*/)) {
# Possibly UTF-8
$tmpval = $cp1251->to8(utf8($utfstr)->utf16);
$tmpval=$tmpval." UTF-8";
return $tmpval;

}


for($incr=0;$incr<length($value);$incr+=2){
$bit=substr($value,$incr,2);

#Only print printable characters, duh! should have been done a long time ago
if(hex($bit)>=32 && hex($bit)<=255){
$msg.=chr(hex($bit));
}
}
return $msg;
}