nat traverse

L

Larry

Hi,

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 = <STDIN>);

while( defined($_ = <STDIN>) )
{
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
 
P

Peter Wyzl

Larry said:
Hi,

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)

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??

Looks like you need to have a way to have the 'server' end fork another
socket for the next request. Check the technique for a preforking proxy
written by Randal Schwartz in one of his columns here:

http://www.stonehenge.com/merlyn/WebTechniques/col34.html

You should be able to adapt that technique, i.e you don't need the
compression stuff, and this assumes your OS supports forking.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,744
Messages
2,569,483
Members
44,901
Latest member
Noble71S45

Latest Threads

Top