информационная безопасность
без паники и всерьез
 подробно о проекте
Spanning Tree Protocol: недокументированное применениеЗа кого нас держат?Портрет посетителя
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Критическая уязвимость UEFI позволяет... 
 Японский хостинг попросил клиентов... 
 Компрометация eMudhra вынудила... 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
[Perl] Socket cоединение... 12.08.01 23:24  
Автор: Access Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Накиньте пример соединения с сервером.....
И посылка пакета или запроса (TCP)

А то прогу с си переделать не могу...
[Perl] Socket cоединение... 14.08.01 02:53  
Автор: free Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> Накиньте пример соединения с сервером.....
> И посылка пакета или запроса (TCP)
>
> А то прогу с си переделать не могу...

прототипы написаны на C.

perldoc Socket
perldoc IO::Socket
perldoc IO::Socket::INET
perldoc IO::Socket::UNIX
perldoc getpeername
perldoc POSIX
[Perl] При получении виснет... 14.08.01 11:43  
Автор: Access Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Вот текст программы:
#!usr/bin/perl
use Socket;
socket(SERVER,PF_INET,SOCK_STREAM,getprotobyname('tcp'));
$remote_host="dialup.mtu.ru";
$remote_port=80;
$internet_addr = inet_aton($remote_host);
$paddr = sockaddr_in($remote_port,$internet_addr);
connect(SERVER,$paddr)||die "connect";
send (SERVER,"GET /index.htm HTTP/1.0\r\n",0);
recv(SERVER,$d,1,0);
close(SERVER);

Но при получении инфы из сокета (recv())прога подвисает, пока не отрубишься от инета.

Ещё один баг: если не закрывать сокет в конце проги, то не отсылается даже запрос send()???
[Perl] При получении виснет... 16.08.01 06:11  
Автор: free Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> use Socket;

Почему не IO::Socket::INET или IO::Socket ?

> socket(SERVER,PF_INET,SOCK_STREAM,getprotobyname('tcp'));

после этого, желательно сказать setsockopt(..<настройки>..)

> $remote_host="dialup.mtu.ru";
> $remote_port=80;
> $internet_addr = inet_aton($remote_host);
> $paddr = sockaddr_in($remote_port,$internet_addr);
> connect(SERVER,$paddr)||die "connect";
> send (SERVER,"GET /index.htm HTTP/1.0\r\n",0);
> recv(SERVER,$d,1,0);

длина полученного сообщения превышает 1 байт (а может быть из за того, что setsockopt не сказал).

> close(SERVER);
>
> Но при получении инфы из сокета (recv())прога подвисает,
> пока не отрубишься от инета.

Для такой (именно такой) задачи проще использовать HTTP::Request и LWP

> Ещё один баг: если не закрывать сокет в конце проги, то не
> отсылается даже запрос send()???

Это не баг. (возможно создается сокет, который занят процессом, пока его не уьъешь(процесс) , естественно этот же сокет использовать нельзя)
[Perl] А если... 16.08.01 06:18  
Автор: free Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> send (SERVER,"GET /index.htm HTTP/1.0\r\n",0);
> recv(SERVER,$d,1,0);

Get /index.htm HTTP/1.0\r\n - вот такая штука возможно не пройдет.

Для такой (именно такой) задачи проще использовать
HTTP::Request и LWP - с ними можно очень лихо всякие посты и геты делать.
Разобрался на половину 16.08.01 11:12  
Автор: Access Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> Get /index.htm HTTP/1.0\r\n - вот такая штука возможно не
> пройдет.

Это я здурил: надо \n\n вместо \r\n (но от этого легче не стало)
А вот пример я надыбал, он рабочий:

use Socket;
$port=80;
$AF_INET=($] > 5 ? AF_INET : 2);
$SOCK_STREAM=($] > 5 ? SOCK_STREAM: 1);
$protocol=(getprotobyname('tcp'))[2];
$addr=(gethostbyname("dialup.mtu.ru"))[4];
$addrs=pack ('S n a4 x8', $AF_INET, $port, $addr);
socket(LOAD,$AF_INET,SOCK_STREAM,$protocol)|
die "Couldn`t create socket";
connect(LOAD, $addrs);
binmode (LOAD);
select(LOAD); $|=1;
select(STDOUT);
print LOAD "GET /index.htm HTTP/1.0\n\n";
binmode (STDOUT);
while (sysread (LOAD, $what, 2048)){
print $what;

Обьясни почему надобыло ставить binmode на LOAD???
Разобрался на половину 17.08.01 06:28  
Автор: free Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> binmode (LOAD);
> select(LOAD); $|=1;
> select(STDOUT);
> print LOAD "GET /index.htm HTTP/1.0\n\n";

> Обьясни почему надобыло ставить binmode на LOAD???

Птому что не все системы одинаково сохраняют в текстовые файлы esc-последовательности, введенные с клавиатуры ( симолы типа \n \r \t и т.п. )
Т.е. если файл создан в виндах, и мы пытаемся его прочитать как строку (как текстовый файл) из nix, то на месте \n будет совсем не \n (точно так же и с виндами),
для этого мужик и определил, что сокет является бинарным - чтобы искажений и глюков при чтении строк не происходило.

По поводу LWP - с его помощью можно виртуальный браузер создавать - удобнее (но не таком низком уровне, как с сокетами).
1





Рейтинг@Mail.ru


  Copyright © 2001-2026 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach