Re: [rlug] port listener... interactiv

2009-12-09 Fir de Conversatie zgrim
On 2009-12-08 13:40:24 +0200, MihaiR wrote:
 Salut,
 
 Imi puteti recomanda o scula de genul:
 - deschide un port TCP si asculta, o singura conexiune, nu
   mai multe simultan (doar pentru niste teste);
 - imi ofera posibilitatea de a vedea ce trimite celalalt
   capat (hex, ascii) si de a rapunde de la tastatura.
 
 In speta, e vorba de a testa un echipament care se
 conecteaza pe un port pe care il pot configura. Acest
 echipament trimite citiva octeti (e un protocol ascii
 simplu) si asteapta de la mine (server) un raspuns de genul
 ACK sau ceva. 
 Exista ceva gata facut pentru asa ceva sau trebuie sa ma
 gindesc sa imi fac propria aplicatie. 
 
 Intreb pentru ca, parca, nu as vrea sa reinventez roata.

Nu stiu daca problema e chiar atat de complexa incat sa reinventam roti, 
uite
inline mai jos niste cod pentru treaba asta de care zici, ca nu-i chiar asa de
complicat. Eu eram mai mult curios de AnyEvent - ca n-am mai folosit - si ti-am
adaptat din doace codul de mai jos. Pare sa functioneze, desi nu acopera cateva
stari elementare, da' ti-l mai modifici tu dupa plac. :)

--

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

use AnyEvent;
use AnyEvent::Socket;
use AnyEvent::Handle;

=begin lamuriri
pasul 1. instaleaza AnyEvent, daca nu-i 
ex: sudo cpan AnyEvent
sau apt-get install libanyevent-perl
sau etc
apoi,
schimba portu si adresa mai jos dupa nevoi
dupa pornire, 
legi clientul tcp la el 
te conectezi pe socket cu un: socat readline /tmp/testsocket
pe socketu unix ii poti da 's' (send) sau 'q' (quit)
ex: s: ok -- va trimite ok\015\012 clientului tcp
(v ca daca ai readline la socat ai history  goodies)
pt teste tcp poti face cu un netcat ( ex: nc 0 34832 )

caveats: simplist, incomplet, netestat, etc
(io n-am mai folosit anyevent asta, da' pare misto)
=cut

use constant {
IP  = '127.0.0.1', # 0 for all
PORT= '34832',
UNIX_SOCKET = '/tmp/testsocket',
};

my $cv = AnyEvent-condvar;
my ( $sock, $tcp ); # handles

AnyEvent::Socket::tcp_server IP, PORT, sub {
my ( $handle, $host, $port ) = @_;
print  new tcp connection: $host:$port\n;

$tcp = AnyEvent::Handle-new(
fh   = $handle,
on_eof   = sub { print (tcp $host:$port) client eof\n },
on_error = sub { print (tcp $host:$port) client err $!\n },
on_read  = sub {
chomp( my $data = delete $tcp-{rbuf} );
print tcp in: [$data]\n;
$sock  $sock-push_write(tcp in: [$data]\015\012);
},
);

# $tcp-push_write( server ready\015\012 );
};

AnyEvent::Socket::tcp_server unix/, UNIX_SOCKET, sub {
my ( $fh ) = @_;
print  new socket connection\n;

$sock = AnyEvent::Handle-new(
fh   = $fh,
on_eof   = sub { print (socket) client eof\n },
on_error = sub { print (socket) client err $!\n },
on_read  = sub {
if ( !$tcp ) {
print no tcp client\n;
$sock-push_write( no tcp client\015\012 );
return;
}
local $_ = delete $sock-{rbuf};
chomp;
if ( /^s:?\s+([\w\d]+)/i ) {
$tcp-push_write($1\015\012);
print tcp out: [$1]\n;
}
elsif ( /^q/i ) {
print exit\n;
$tcp-push_shutdown;
$sock-push_shutdown;
exit 0;
}
else {
warn unknown socket cmd: $_\n;
$sock-push_write(unknown cmd: $_\015\012);
}
return;
},
);

$sock-push_write( commands: [s: data-to-send-on-tcp] [q: quit]\015\012 
);
};

printf listening on tcp %s:%s and unix %s\n, IP, PORT, UNIX_SOCKET;
$cv-wait;

--

-- 
perl -MLWP::Simple -e'print$_[rand(split(q.%%\n.,
get(q{http://cpan.org/misc/japh})))]'
___
RLUG mailing list
RLUG@lists.lug.ro
http://lists.lug.ro/mailman/listinfo/rlug


Re: [rlug] port listener... interactiv

2009-12-09 Fir de Conversatie MihaiR
 
 Nu stiu daca problema e chiar atat de complexa incat
 sa reinventam roti, uite inline mai jos niste cod pentru
 treaba asta de care zici, ca nu-i chiar asa de complicat.
 Eu eram mai mult curios de AnyEvent - ca n-am mai folosit
 - si ti-am adaptat din doace codul de mai jos. Pare sa
 functioneze, desi nu acopera cateva stari elementare, da'
 ti-l mai modifici tu dupa plac. :)

OK, multumesc pentru efort. O sa incerc si asta.
Deocamdata, netcat pare sa fie ok pentur scopul meu. Dar nu
se stie niciodata.

Toate cele bune,
MihaiR
___
RLUG mailing list
RLUG@lists.lug.ro
http://lists.lug.ro/mailman/listinfo/rlug


[rlug] port listener... interactiv

2009-12-08 Fir de Conversatie MihaiR
Salut,

Imi puteti recomanda o scula de genul:
- deschide un port TCP si asculta, o singura conexiune, nu
  mai multe simultan (doar pentru niste teste);
- imi ofera posibilitatea de a vedea ce trimite celalalt
  capat (hex, ascii) si de a rapunde de la tastatura.

In speta, e vorba de a testa un echipament care se
conecteaza pe un port pe care il pot configura. Acest
echipament trimite citiva octeti (e un protocol ascii
simplu) si asteapta de la mine (server) un raspuns de genul
ACK sau ceva. 
Exista ceva gata facut pentru asa ceva sau trebuie sa ma
gindesc sa imi fac propria aplicatie. 

Intreb pentru ca, parca, nu as vrea sa reinventez roata.

Multumesc anticipat pentru orice recomandare.

Toate cele bune,
MihaiR
___
RLUG mailing list
RLUG@lists.lug.ro
http://lists.lug.ro/mailman/listinfo/rlug


Re: [rlug] port listener... interactiv

2009-12-08 Fir de Conversatie lonely wolf
MihaiR wrote:
 Salut,

 Imi puteti recomanda o scula de genul:
 - deschide un port TCP si asculta, o singura conexiune, nu
   mai multe simultan (doar pentru niste teste);
 - imi ofera posibilitatea de a vedea ce trimite celalalt
   capat (hex, ascii) si de a rapunde de la tastatura.

 In speta, e vorba de a testa un echipament care se
 conecteaza pe un port pe care il pot configura. Acest
 echipament trimite citiva octeti (e un protocol ascii
 simplu) si asteapta de la mine (server) un raspuns de genul
 ACK sau ceva. 
 Exista ceva gata facut pentru asa ceva sau trebuie sa ma
 gindesc sa imi fac propria aplicatie. 

 Intreb pentru ca, parca, nu as vrea sa reinventez roata.

 Multumesc anticipat pentru orice recomandare.

   
netcat , cuplat cu un pic de scripting. sau poate socat
___
RLUG mailing list
RLUG@lists.lug.ro
http://lists.lug.ro/mailman/listinfo/rlug


Re: [rlug] port listener... interactiv

2009-12-08 Fir de Conversatie Dragos Chiriac
MihaiR wrote:
 Salut,

 Imi puteti recomanda o scula de genul:
 - deschide un port TCP si asculta, o singura conexiune, nu
   mai multe simultan (doar pentru niste teste);
 - imi ofera posibilitatea de a vedea ce trimite celalalt
   capat (hex, ascii) si de a rapunde de la tastatura.
   
netcat+expect ?
 In speta, e vorba de a testa un echipament care se
 conecteaza pe un port pe care il pot configura. Acest
 echipament trimite citiva octeti (e un protocol ascii
 simplu) si asteapta de la mine (server) un raspuns de genul
 ACK sau ceva. 
 Exista ceva gata facut pentru asa ceva sau trebuie sa ma
 gindesc sa imi fac propria aplicatie. 

 Intreb pentru ca, parca, nu as vrea sa reinventez roata.

 Multumesc anticipat pentru orice recomandare.

 Toate cele bune,
 MihaiR
 ___
 RLUG mailing list
 RLUG@lists.lug.ro
 http://lists.lug.ro/mailman/listinfo/rlug

   

___
RLUG mailing list
RLUG@lists.lug.ro
http://lists.lug.ro/mailman/listinfo/rlug