jabber: скрипт файл через сообщения

Discussion in 'PHP' started by C!klodoL, 13 Jan 2008.

  1. C!klodoL

    C!klodoL Elder - Старейшина

    Joined:
    5 Jun 2007
    Messages:
    302
    Likes Received:
    208
    Reputations:
    4
    это боты которые позволяют пересылать файлы как сообщения через жабер, писалось это для одного провайдера у которого есть свой жабер сервер (трафик к которому не оплачивается) но нет анлима, жабер закрыли, а боты остались, выкладываю, может быть кому нибудь пригодится

    отправляющий бот
    Code:
    #!/usr/bin/perl -w
    
    # jabber file transfer, sender bot
    # C!klodoL
    
    use strict;
    use Net::XMPP;
    use MIME::Base64;
    
    my $hostname = 'somehost.net';
    my $username = 'bot1';
    my $password = 'P@$$w@rD';
    my $acceptor = '[email protected]'; #принимающий бот
    my $filesend = shift;
    unless ($filesend) {
       print "Usage $0 fileforsend\n";
       exit 1;
    }
    open (FILE, '<'.$filesend);
    
    my $client = Net::XMPP::Client->new();
    
    $client->SetCallBacks(onauth => \&onAuth,);
    $client->SetMessageCallBacks(#normal =>\&messageNormalCB,
                                 chat    =>\&messageChatCB);
    
    $client->Execute(hostname => $hostname,
                     username => $username,
                     password => $password,
                     resource => 'Psi');
    
    sub onAuth {
        $client->PresenceSend(show => 'online', priority => 10);
        $client->MessageSend(to   => $acceptor,
                             body => 'xNEWxFILEx:'.$filesend.':xNEWxFILEx',
                             type => 'chat');
    }
     
    sub messageChatCB {
        my ($sid, $mes) = @_;
        my $sender = $mes->GetFrom();
        my $body   = $mes->GetBody();
        my $thread = $mes->GetThread();
        my $s_jid  = $sender;
        $s_jid     =~ s|\/.*$||;
        my $reply  = '';
        
        print $body."\n";
    
        if ($body =~ /xNEXTx/)
        {
            sysread(FILE, my $buff, 100);
            if ($buff) {
                $reply = 'xFCONTx:'.encode_base64($buff).':xFCONTx';
            } else {
                $reply = 'xFILEENDx'
            }
        }
        print $reply."\n";
        
        $reply and $client->MessageSend(to      => $sender,
                                                      subject => '',
                                                      body    => $reply,
                                                      type    => 'chat',
                                                     thread  => $thread);
    }
    
    принимающий бот

    Code:
    #!/usr/bin/perl -w
    
    # jabber file transfer, acceptor bot
    # C!klodoL
    
    use MIME::Base64;
    use strict;
    use Net::XMPP;
    
    my $hostname = 'somehost.net';
    my $username = 'bot2';
    my $password = 'P@$$w@rD';
    
    my $directory = '/tmp/'; #директория для принимаемых файлов
    
    my $client = Net::XMPP::Client->new();
    
    $client->SetCallBacks(onauth => \&onAuth,);
    $client->SetMessageCallBacks(#normal =>\&messageNormalCB,
                                 chat    =>\&messageChatCB);
    
    $client->Execute(hostname => $hostname,
                     username => $username,
                     password => $password,
                     resource => 'Psi');
    
    sub onAuth {
        $client->PresenceSend(show => 'online', priority => 10);
    }
    
    sub messageChatCB {
        my ($sid, $mes) = @_;
        my $sender = $mes->GetFrom();
        my $body   = $mes->GetBody();
        my $thread = $mes->GetThread();
        my $s_jid  = $sender;
        $s_jid     =~ s|\/.*$||;
        my $reply  = '';
    
        if ($body =~ /xNEWxFILEx:(.*):xNEWxFILEx/)
        {
            open (FILE, '>'.$directory.$1);
            print "[+] Opening file $1\n";
            $reply = 'xNEXTx';
        }
        
        if ($body =~ /xFCONTx:(.*):xFCONTx/s)
        {
            print FILE decode_base64($1);
            print $1;
            print "[+] Part of file accepted\n";
            $reply = 'xNEXTx';
        }
        
        if ($body =~ /xFILEENDx/)
        {
        	close FILE;
        	print "[+] End of file\n";
        }
        
        
        $reply and $client->MessageSend(to       => $sender,
                                                     subject => '',
                                                     body    => $reply,
                                                     type    => 'chat',
                                                     thread  => $thread);
    }
    
     
    3 people like this.
  2. satana8920

    satana8920 Палач Античата

    Joined:
    22 Sep 2006
    Messages:
    396
    Likes Received:
    138
    Reputations:
    6
    хм... нет я имею ввиду что как можно написать socks 5 что б тоже через джабер бот принимающий и отдающий что б через сообщения тоже отдавал и принимал запросы. я знаю такое возможно еси с файлами можно то это тоже прокатит можно еще и с многопоточьностью замутить
     
    #2 satana8920, 15 Jan 2008
    Last edited: 15 Jan 2008
  3. Digimortal

    Digimortal Banned

    Joined:
    22 Aug 2006
    Messages:
    471
    Likes Received:
    248
    Reputations:
    189
    вопрос действительно глупый.. )