Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как узнать IP компа. При выполнении кода. 
:(
    Опции темы
IRomanov
Дата 11.12.2007, 20:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 6.12.2007

Репутация: нет
Всего: нет



Пишу FTP-клиент. Там есть команда PORT, которую нужно отправить на сервер. Команда порт отправляет ip клиента и порт.
Хотел узнать как узнать ip компа на котором выполняется программа, чтобы каждый раз вручную не вводить в конфиге.
PM MAIL   Вверх
nitr
Дата 11.12.2007, 20:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

Репутация: 37
Всего: 84



IRomanov, ой как мало информации ;)

с помощью сокетов делаете? Если да, то читайте про них, там всё просто...

Добавлено через 48 секунд
к примеру с помощью
IO::Socket::INET->sockhost


--------------------
PM   Вверх
IRomanov
Дата 11.12.2007, 20:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 6.12.2007

Репутация: нет
Всего: нет



Цитата(nitr @ 11.12.2007,  20:17)
IRomanov, ой как мало информации ;)

с помощью сокетов делаете? Если да, то читайте про них, там всё просто...

Добавлено @ 20:18
к примеру с помощью
IO::Socket::INET->sockhost

Спасибо. Да на самом деле легко. Думал все сложнее.
PM MAIL   Вверх
IRomanov
Дата 11.12.2007, 20:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 6.12.2007

Репутация: нет
Всего: нет



Только вот оказывается sockhost возвращает ip сервера к которому подключаешься, просто у меня сервер на моем компе был и адрес сервера и клиента одинаковые были.
PM MAIL   Вверх
nitr
Дата 11.12.2007, 21:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

Репутация: 37
Всего: 84



я же говорю, мало информации дали, показали бы хоть кусок... т.к. обычно так, есть конечно
IO::Socket::INET->peerhost, но интересно будет smile

Добавлено через 1 минуту и 41 секунду
похоже ошибка в логике...


--------------------
PM   Вверх
nitr
Дата 11.12.2007, 21:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

Репутация: 37
Всего: 84



вы пишите клиент...
так что продумайте логику...

сервер (сокет):
Код

#!/usr/bin/perl
use strict;
use warnings;

use IO::Socket::INET;

my $srv = IO::Socket::INET->new( Listen => 5, Proto => 'tcp', Timeout => 20, LocalAddr    => '127.0.0.1' );
print "Listen on ".$srv->sockport."\n";

while (my $client = $srv->accept) {
    print $client->peerhost."\n";
}

close $srv;



--------------------
PM   Вверх
IRomanov
Дата 11.12.2007, 21:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 6.12.2007

Репутация: нет
Всего: нет



Цитата(nitr @ 11.12.2007,  21:03)
я же говорю, мало информации дали, показали бы хоть кусок... т.к. обычно так, есть конечно
IO::Socket::INET->peerhost, но интересно будет smile

Добавлено @ 21:05
похоже ошибка в логике...

Немножко не понял, о чём вы сейчас сказали.
Но вот поподробнее:

Код
]
use IO::Socket;

$server_address = "..."; #У меня аддресс и порт из ARGV берется - но это не важно, допустим мы их вручную ввели.
$server_address = "...";
$socket = new IO::Socket::INET(PeerAddr => $server_address, PeerPort => $server_port, Proto => "tcp") or die "Can't create socket: $!\n";
....
if(активный режим)
{
   my $myipaddr = "10.1.2.3";
   PORT A,B,C,D,E,F;  #A.B.C.D - ip клиента, порт клиента. В данном случае A=10 B=1 C=2 D=3
   #$socket->sockhost() - выдаст ip сервера а не клиента. 
}


А мне надо чтобы $myipaddr получить как-нибудь а не тупо в коде или конфиге его писать.

Добавлено через 1 минуту и 43 секунды
Цитата(nitr @ 11.12.2007,  21:22)
вы пишите клиент...
так что продумайте логику...

сервер (сокет):
Код

#!/usr/bin/perl
use strict;
use warnings;

use IO::Socket::INET;

my $srv = IO::Socket::INET->new( Listen => 5, Proto => 'tcp', Timeout => 20, LocalAddr    => '127.0.0.1' );
print "Listen on ".$srv->sockport."\n";

while (my $client = $srv->accept) {
    print $client->peerhost."\n";
}

close $srv;

Сейчас подумаю, еще раз спасибо.
PM MAIL   Вверх
nitr
Дата 11.12.2007, 21:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

Репутация: 37
Всего: 84



теперь понятно smile
откройте модуль Net::FTP , посмотрите и попытайтесь разобрать smile (отличный фтп-клиент) , там есть реализация...

а так - если только сервер вам передаст ваш же адрес, если ошибаюсь, меня поправят или дополнят...
Код

#!/usr/bin/perl
use strict;
use warnings;

use Net::hostent;
use Socket;

my $ip = Net::hostent::gethost('');
print inet_ntoa($ip->addr);

это тоже неверно...


--------------------
PM   Вверх
nitr
Дата 11.12.2007, 22:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

Репутация: 37
Всего: 84



ёпрст, вы меня попытались запутать, не знаю что у вас за проблема, но! указанные мною примеры, показывают, первый мой ответ - верен.

клиент:
Код

#!/usr/bin/perl
use strict;
use warnings;

use IO::Socket::INET;

my $host = '......'; # сюда впишите ип адрес сервера
my $client = IO::Socket::INET->new( PeerAddr => $host, PeerPort => '31001', Proto => 'tcp' ) or die $@;

print $client->peerhost."\n";
print $client->sockhost."\n";

close $client;


сервер:
Код

#!/usr/bin/perl
use strict;
use warnings;

use IO::Socket::INET;

my $ip = '127.0.0.1'; # сюда ip
my $srv = IO::Socket::INET->new( Listen => 5, Proto => 'tcp', Timeout => 20, LocalAddr    => $ip );
print "Listen on ".$srv->sockport."\n";

while (my $client = $srv->accept) {
    print $client->sockhost."\t".$client->peerhost."\n";
}

close $srv;


Добавлено @ 22:12
и ещё smile вы не получите свой ип, каким его видит сервер. К примеру, вы используете шлюз, т.е. перл скажет, что у вас 192.168.0.2, а реальный "белый"/внешний/инет адрес не сможет, в свою очередь фтп-сервер видит адрес 80.80.80.80, в этом и будет проблема.

Совет: всё же изучайте тот модуль, или вообще просто его используйте smile Там интересная реализация кстати ;)

Это сообщение отредактировал(а) nitr - 11.12.2007, 22:13


--------------------
PM   Вверх
IRomanov
Дата 11.12.2007, 22:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 6.12.2007

Репутация: нет
Всего: нет



Все я разобрался спасибо.

PM MAIL   Вверх
nitr
Дата 12.12.2007, 00:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

Репутация: 37
Всего: 84



IRomanov, молодец, а в чём была ошибка/недоработка или что-то иное? smile


--------------------
PM   Вверх
IRomanov
Дата 13.12.2007, 09:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 6.12.2007

Репутация: нет
Всего: нет



Цитата(nitr @ 12.12.2007,  00:06)
IRomanov, молодец, а в чём была ошибка/недоработка или что-то иное? smile

Это вам спасибо.
Даже не знаю, просто запутался с IP.  И понял что для тестирования не следует использовать FTP сервак на своем компе, потому что сервак и клиент имеют один и тот же ip.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0959 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.