Не понимаю объясните, если не трудно !

Тема в разделе "Perl программирование", создана пользователем Stan777, 19 дек 2006.

Статус темы:
Закрыта.
  1. Stan777

    Stan777 Гость

    Объясните пожайлуста почему не работает прога ?

    Код (Text):
    #!/usr/bin/perl
    use IO::Socket;

    $port=80;
    $host="127.0.0.1";
    $link="/";


    sub funk {
    $error=0;
    $sock = IO::Socket::INET->new(Proto => "tcp",PeerAddr => $host,PeerPort => $port);

    if (!$sock) {
    $error=1;
    print "[-] ERROR: Could't connect\n";
    exit;
    }
    print $sock "GET $link HTTP/1.0\nHost: $host\r\n";
    close ($sock);
    return ($error);
    }

    while($error == 0){
    $error=funk($port,$host,$link);
    }
     
  2. ????

    ???? Гость

    что и как не работает?
     
  3. Gisma

    Gisma Гость

    Для: Stan777
    сокеты работают? у скрипта есть права доступа ?
     
  4. Stan777

    Stan777 Гость

    Короче не работает так ! не посылает пакеты с запросами на 80 порт моего же компьютера, и пишет ERROR: Could't connect соответственно. С сокетами и правами все ОК, так что дело не вних видимо какая-то тупая ошибка, я не стал искать ошибку написал соовсем по другому и тперь все проще чем представленый код а главное все работет !
     
  5. _serg_

    _serg_ Гость

    после того, как попытался создать сокет, посмотри содержимое $@
    не удивлюсь, если там у тебя окажется что-то вроде "IO::Socket::INET: connect: Connection refused"
     
  6. garrymax

    garrymax Гость

    Первое: у тебя в запросе одна новая строка, а нужно две (\n\n).

    Второе: попробуй так - у меня работало:

    Код (Text):
    use Socket;

    $host="localhost";
    $port="80";

    socket(SOCK, PF_INET, SOCK_STREAM, getprotobyname('tcp'));

    $iaddr = inet_aton($host);
    $paddr = sockaddr_in($port, $iaddr);

    connect(SOCK, $paddr);
    send (SOCK, "GET / HTTP/1.0\n\n", 0);

    @data=<SOCK>;

    close(SOCK);

    print @data;
    Тут, без обработки ошибок - сам доделаешь. Я просто не помню, где в твоей конструкции что-то еще надо проинициаллизировать - тоже сталкивался и не работало. Там вроде каких-то преобразований, вроде getprotobyname или в структуре не хватает - могу соврать давно было.
     
  7. _serg_

    _serg_ Гость

    да там сам сокет не создастся.

    что касается кода, то код у Stan777 рабочий. для того, что бы в этом убедиться, можно вместо 127.0.0.1 подставить айпишник, например, ya.ru или что-нить вроде этого.
     
  8. garrymax

    garrymax Гость

    Что ошибка открытия сокета, так для этого и код дал, что две новых строки, так из рабочего кода 6-8-и летней давности, но _serg_ извени: Не выдержал, скопировал код и поменял на $host="localhost";
    - запустил из командной строки - висит, а потом выдает [-] ERROR: Could't connect.
    - поменял на $host="ya.ru"; - висит, а потом выдает [-] ERROR: Could't connect.
    - Добавил print "Content-type: text/html\n\n"; (на всякий) и запустил из ослика - долго висит, а потом выдает [-] ERROR: Could't connect.
    - вернул к исходному - результат тот же.
    - может я неправильно понял и "айпишник" вовсе не оговорка, а на локалке это не работает: пускаю пинг до ya.ru и получаю его айпишник. Подсавляю $host="213.180.204.8"; - задолбался ждать обрыв сокета по таймату, но результат тот же.

    В каком месте работает? Может у меня Перл неправильный, но проверил свой код - работает даже с 127.0.0.1 вместо localhost. Если не прав - объясни. Заранее спасибо.
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей