Forum Webscript.Ru

Программирование => Perl => Тема начата: Evgeny от 21 Января 2002, 16:54:24

Название: Как послать IP пакет?
Отправлено: Evgeny от 21 Января 2002, 16:54:24
Првет всем!
Подскажите пожалуйста, как можно отправить IP-пакет на Перле, в котором содержится несколько параметром, например UserName, Password и т.д. и получить какой-нибудь ответ.
Заранее большое спасибо.
Название: Как послать IP пакет?
Отправлено: NeoNox от 21 Января 2002, 17:18:31
Или я не понял, или одно из двух...
При чем здесь пакет?
Тебе нужно из формы отправить скрипту параметры и получить, в зависимости от них, какой нибудь результат?
Название: Как послать IP пакет?
Отправлено: Evgeny от 21 Января 2002, 17:26:51
Цитировать
Или я не понял, или одно из двух...
При чем здесь пакет?
Тебе нужно из формы отправить скрипту параметры и получить, в зависимости от них, какой нибудь результат?


Нет, речь идет совсем не о CGI.  
Есть один модуль - NET::RawIP, но он помоему может только потвевожить сервер, но не передать ему информацию и получить ответ (может я и ошибаюсь).
Может быть как-то через сокеты можно реалировать?
Название: э
Отправлено: Green Kakadu от 21 Января 2002, 17:57:31
Цитировать
Нет, речь идет совсем не о CGI.

сформулируем вопрос NeoNox иначе: тебе надо что-то передать удаленному серверу и получить какой-нибудь ответ?
Или тебе нужно имеено работать с IP пакетами?
Если что-то передать/получить, уточни что хочешь получить...
Название: Как послать IP пакет?
Отправлено: Evgeny от 21 Января 2002, 18:17:01
Цитировать
сформулируем вопрос NeoNox иначе: тебе надо что-то передать удаленному серверу и получить какой-нибудь ответ?
Или тебе нужно имеено работать с IP пакетами?
Если что-то передать/получить, уточни что хочешь получить...

Сформулирую свой вопрос иначе. Извините, я некомпетентен в этом вопросе, поэтому если начинаю говорить какую-нибудь чушь - остановите меня пожалуйста, а ещё лучше исправьте.
Мне нужно сформировать IP-пакет. Но ведь может содержать информацию? Так вот я бы хотел написать что-нибудь внутри пакета, чтобы сервер проанализировал это и отправил ответ.
Возможно ли такое?
Название: Как послать IP пакет?
Отправлено: Oak от 21 Января 2002, 20:30:31
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)
Название: Как послать IP пакет?
Отправлено: Боря Елкин от 22 Января 2002, 10:34:06
Мне в свое время пришлось связывать 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);