Принцип такой: открываешь один соккет, записываешь реультаты его ответа в переменную, коннектишься к другому сокету и пишешь в него то, что у тебя в переменной. Вот пример на perl'e:
Код:
#/usr/bin/perl
use strict;
use socket;
use IO::Handle;
use constant HOST_FROM => gethostbyname('www.hostfrom.net');
use constant PORT_FROM => getservbyname('www-http', 'tcp');
use constant PROTOCOL => getprotobyname('tcp');
if(@ARGV < 2)
die "Usage $0: <host> <port>"
my ($host_to, $port_to) = (gethostbyname($ARGV[0]), $ARGV[1]);
#подключаемся к первому сокету
socket(SOCK, AF_INET, SOCK_STREAM, PROTOCOL) or
die "can't create socket :(";
connect(SOCK, sockaddr_in(PORT_FROM, HOST_FROM)) or
die "can't connect to remote socket";
SOCK->autoflush(1);
my $result = undef;
while(<SOCK>) { $result .= $_; }
# закрываем первый сокет, данные полученные из него
# хранятся в переменной $result
close SOCK;
#открываем новый сокет, в который мы будем записывать полученные
# ранее данные
socket(NEW_SOCK, AF_INET, SOCK_STREAM, PROTOCOL) or
die "can't create second socket :(";
connect(NEW_SOCK, sockaddr_in($port_to, $host_to)) or
die"can't connect to second remote soccet :(";
# пишем данные в удалённый сокет
print NEW_SOCK $result;
#всё, дело сделано
close NEW_SOCK;