2010-10-18 2 views

ответ

4

Как «Office Communicator» использует модифицированную версию SIP, вы можете попробовать использовать SIP-клиенты, такие как Net::SIP (или Net::SIP::Simple из того же пакета).

2

Я думаю, вы уже нашли решение после того, как более года, но, тем не менее, если вы просто хотите, чтобы отправить сообщение SIP, написание программы на языке Perl, вы можете взглянуть на этот подход: http://archive.cert.uni-stuttgart.de/bugtraq/2005/07/msg00276.html

Возможная настройка:

#!/usr/bin/perl 
use strict; 
use warnings; 
use Socket; 

sub SendSIPTo { 
    my ($from, $to, $text, $ProxyIP) = @_; 

    my $contentLength = length($text); 

    my $AT = '@'; 
    my $domain = 'example.com'; 
    my $ToURI = 'sip:' . $to . $AT . $domain; 
    my $FromURI = 'sip:' . $from . $AT . $domain; 

    my $MESG = "MESSAGE $ToURI SIP\/2.0\r 
Via: SIP/2.0/UDP 10.10.10.10;branch=z9hG4bK8fe6.db5fade4.0\r 
To: $ToURI\r 
From: <$FromURI>;tag=578c0e59d7504cca4dc4a96522981b0a-0c8b\r 
CSeq: 1 MESSAGE\r 
Call-ID: 609ded3a79a9cbd5\r 
Content-Length: $contentLength\r 
User-Agent: perl\r 
\r 
" . $text; 

    my $proto = getprotobyname('udp'); 
    socket(SOCKET, PF_INET, SOCK_DGRAM, $proto) ; 
    my $iaddr = inet_aton("0.0.0.0"); 
    my $paddr = sockaddr_in(5060, $iaddr); 
    bind(SOCKET, $paddr) ; 

    my $port = 5060; 
    my $hisiaddr = inet_aton($ProxyIP) ; 
    my $hispaddr = sockaddr_in($port, $hisiaddr); 
    send(SOCKET, $MESG, 0, $hispaddr) || warn "send $!\n"; 

    return 'OK'; 
} 

1; 
Смежные вопросы