nat traverse
am 05.11.2007 15:49:12 von LarryHi,
I've found this script script that I've found very usefull
(http://linide.sourceforge.net/nat-traverse/), yet I'd love to use nat
traverse to set up a udp tunnel to make a browser on host A to connect
to apache listening on HOST B. Both HOST A and HOST B are behind NAT.
** on host A I have this:
perl nat-traverse --cmd="nc -vlp 65000" 40000:host B:40001
Now, "nc" is bound to nat-traverse...
I use my browser to connect to 127.0.0.1:65000 ("nc" gets tha request
and sends it to the UDP tunnel...than waits for the response from he
tunnel)
** on HOST B I have the following:
perl nat-traverse --cmd="perl mediator.pl" 40001:host A:40000
mediator gets data from the UDP tunnel and make a req to apache
(listening locally on port 80) than sends the apache response back to
the tunnel...(whereas NC gets the response and send it to the browser)
here's mediator.pl code:
#!/usr/bin/perl
use strict;
use warnings;
use IO::Socket::INET;
use IO::Handle;
STDOUT->autoflush();
my $key;
my %header;
my $req;
my $line;
while(1)
{
chomp($line =
while( defined($_ =
{
s/[\r\n]+$//;
last unless length $_;
/^ ([\w\-]+) :[\ \t]+ (.+) $/x;
$key = uc($1);
$key =~ tr/-/_/;
$header{$key} = $2
}
$req = "$line\n";
foreach (sort keys %header)
{
$req .= $_ . ':' . " $header{$_}\n";
}
$req .= "\n";
{
my ($buff, $sock);
$sock = IO::Socket::INET->new(PeerAddr => '127.0.0.1', PeerPort =>
'80', Proto => 'tcp') || die "$!";
$sock->autoflush(1);
syswrite $sock, $req;
while ( sysread($sock, $buff, 1024) )
{
print STDOUT $buff;
}
close($sock);
}
}
__END__;
tha thing with the whole above scenario is that "nc" exits when the
browser closes the connection...
Does anyone how to sort this out??
How can I bound STDIN e STDOUT to fifo files??
thanks ever so much