Forum Webscript.Ru
Программирование => Perl => Тема начата: Evgeny от 21 Января 2002, 16:54:24
-
Првет всем!
Подскажите пожалуйста, как можно отправить IP-пакет на Перле, в котором содержится несколько параметром, например UserName, Password и т.д. и получить какой-нибудь ответ.
Заранее большое спасибо.
-
Или я не понял, или одно из двух...
При чем здесь пакет?
Тебе нужно из формы отправить скрипту параметры и получить, в зависимости от них, какой нибудь результат?
-
Или я не понял, или одно из двух...
При чем здесь пакет?
Тебе нужно из формы отправить скрипту параметры и получить, в зависимости от них, какой нибудь результат?
Нет, речь идет совсем не о CGI.
Есть один модуль - NET::RawIP, но он помоему может только потвевожить сервер, но не передать ему информацию и получить ответ (может я и ошибаюсь).
Может быть как-то через сокеты можно реалировать?
-
Нет, речь идет совсем не о CGI.
сформулируем вопрос NeoNox иначе: тебе надо что-то передать удаленному серверу и получить какой-нибудь ответ?
Или тебе нужно имеено работать с IP пакетами?
Если что-то передать/получить, уточни что хочешь получить...
-
сформулируем вопрос NeoNox иначе: тебе надо что-то передать удаленному серверу и получить какой-нибудь ответ?
Или тебе нужно имеено работать с IP пакетами?
Если что-то передать/получить, уточни что хочешь получить...
Сформулирую свой вопрос иначе. Извините, я некомпетентен в этом вопросе, поэтому если начинаю говорить какую-нибудь чушь - остановите меня пожалуйста, а ещё лучше исправьте.
Мне нужно сформировать IP-пакет. Но ведь может содержать информацию? Так вот я бы хотел написать что-нибудь внутри пакета, чтобы сервер проанализировал это и отправил ответ.
Возможно ли такое?
-
Znachit tak:
RAW_IP - tebe nikto ne dast slat\' (toko ROOT mozhet)
Dlya prostih smertnih est\' 2 protokola - TCP i UDP.
Ti mozhesh spokojno poslat\' kak TCP tak i UDP paketi.
Raznica - TCP - eto s podtverzhdewniem. T.e oni tebe garantiruyut , chto poslannoe
toboj ne poteryaetsya po doroge. UDP - ne garantiruet.
TCP - eto skoree soedinenie, chem paket. T.e ti otkrivaesh soedinenie - shlesh chto nado,
poluchaesh chto nado, zakrivaesh soedinenie. Skol\'ko pri etom ujdet paketov i skol\'ko iz nih povtorno pereshletsya pri potere - tebya ne volnuet.
UDP - tebe nikto ne obyazan otvechat\' i dazhe soobschat\' - prishel on ili net poluchatelyu.
(a esli server tebe otvet v UDP poshlet - tozhe ono mozhet poteryat\'sya)
Voobschem - RTFM :) mozhno na CITFORUM - tam est\' po setyam chto-to (po TCP/IP)
-
Мне в свое время пришлось связывать OS/2 и Linux. Для этих вещей я как раз и использовал обмен через TCP/IP.
Пример взял из книги Perl Cookbook (которая с бараном).
Вот привожу его ниже. (надеюсь это то, что тебе нужно)
17.2. Writing a TCP Server
Problem
You want to write a server that waits for clients to connect over the network to a particular port.
Solution
This recipe assumes you\'re using the Internet to communicate. For TCP-like communication within a single Unix machine, see Recipe 17.6.
Use the standard (as of 5.004) IO::Socket::INET class:
use IO::Socket;
$server = IO::Socket::INET->new(LocalPort => $server_port,
Type => SOCK_STREAM,
Reuse => 1,
Listen => 10 ) # or SOMAXCONN
or die "Couldn\'t be a tcp server on port $server_port : $@\\n";
while ($client = $server->accept()) {
# $client is the new connection
}
close($server);
Or, craft it by hand for better control:
use Socket;
# make the socket
socket(SERVER, PF_INET, SOCK_STREAM, getprotobyname(\'tcp\'));
# so we can restart our server quickly
setsockopt(SERVER, SOL_SOCKET, SO_REUSEADDR, 1);
# build up my socket address
$my_addr = sockaddr_in($server_port, INADDR_ANY);
bind(SERVER, $my_addr)
or die "Couldn\'t bind to port $server_port : $!\\n";
# establish a queue for incoming connections
listen(SERVER, SOMAXCONN)
or die "Couldn\'t listen on port $server_port : $!\\n";
# accept and process connections
while (accept(CLIENT, SERVER)) {
# do something with CLIENT
}
close(SERVER);
17.1. Writing a TCP Client
Problem
You want to connect to a socket on a remote machine.
Solution
This solution assumes you\'re using the Internet to communicate. For TCP-like communication within a single machine, see Recipe 17.6.
Either use the standard (as of 5.004) IO::Socket::INET class:
use IO::Socket;
$socket = IO::Socket::INET->new(PeerAddr => $remote_host,
PeerPort => $remote_port,
Proto => "tcp",
Type => SOCK_STREAM)
or die "Couldn\'t connect to $remote_host:$remote_port : $@\\n";
# ... do something with the socket
print $socket "Why don\'t you call me anymore?\\n";
$answer = <$socket>;
# and terminate the connection when we\'re done
close($socket);
or create a socket by hand for better control:
use Socket;
# create a socket
socket(TO_SERVER, PF_INET, SOCK_STREAM, getprotobyname(\'tcp\'));
# build the address of the remote machine
$internet_addr = inet_aton($remote_host)
or die "Couldn\'t convert $remote_host into an Internet address: $!\\n";
$paddr = sockaddr_in($remote_port, $internet_addr);
# connect
connect(TO_SERVER, $paddr)
or die "Couldn\'t connect to $remote_host:$remote_port : $!\\n";
# ... do something with the socket
print TO_SERVER "Why don\'t you call me anymore?\\n";
# and terminate the connection when we\'re done
close(TO_SERVER);