1. Набираем команду codeby webinar. Набираем команду для организации и проведения вебинаров. Подробнее ...

    Скрыть объявление
  2. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление
  3. Получи 30.000 рублей. Для получения денег необходимо принять участие в конкурсе авторов codeby. С условиями и призами можно ознакомиться на этой странице ...

    Внимание! Регистрация авторов на конкурс закрыта.

    Скрыть объявление

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

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

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

    Stan777 Гость

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

    Код:
    #!/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. ????

    ???? Гость

    Репутация:
    0
    что и как не работает?
     
  3. Gisma

    Gisma Гость

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

    Stan777 Гость

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

    _serg_ Гость

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

    garrymax Гость

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

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

    Код:
    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_ Гость

    Репутация:
    0
    да там сам сокет не создастся.

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

    garrymax Гость

    Репутация:
    0
    Что ошибка открытия сокета, так для этого и код дал, что две новых строки, так из рабочего кода 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. Если не прав - объясни. Заранее спасибо.
     
Загрузка...
Статус темы:
Закрыта.

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