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

  • Автор темы Stan777
  • Дата начала
Статус
Закрыто для дальнейших ответов.
S

Stan777

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

Код:
#!/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);
}
 
G

Gisma

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

Stan777

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

_serg_

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

garrymax

#6
Первое: у тебя в запросе одна новая строка, а нужно две (\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 или в структуре не хватает - могу соврать давно было.
 
S

_serg_

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

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

garrymax

#8
что касается кода, то код у Stan777 рабочий. для того, что бы в этом убедиться, можно вместо 127.0.0.1 подставить айпишник, например, ya.ru или что-нить вроде этого.
Что ошибка открытия сокета, так для этого и код дал, что две новых строки, так из рабочего кода 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. Если не прав - объясни. Заранее спасибо.
 
Статус
Закрыто для дальнейших ответов.