Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2005.01.02;
Скачать: [xml.tar.bz2];

Вниз

Узнать IP у удаленного компа(TCP/IP)   Найти похожие ветки 

 
pirate   (2004-10-08 19:27) [0]

Программа-сервер запущена на компе A.
Программа-клиент - на компе B.
И сервер и клиент знают IP своего компа, но не знают противоположного. Т.е. сервер не знает IP клиента, и наоборот.
Но им просто неоходимо связаться.
Что же делать? Отправлять пакеты всем компам ip кот. лежит
в диапазоне от 127.0.0.2 до 255.255.255.0 ?
Глупо.
Вот и решил, друзья мои, обратиться к вам за помощью.


 
P@$l-l0l-(   (2004-10-08 20:29) [1]

ну скорее всего сервер тебе придётся установить на каком-то компе, который всё время в сети. А иначе пидётся сканировать всевозможные диапазоны адресов. Если клиент ищет сервера, зная, что тот висит у кокого-нибудь прова, то можно узнать диапазан адресов прова и их просканировать. Я тоже задавался этим вопросом, но так в своих размышлениях ни к чемы и не пишёл.


 
Reindeer Moss Eater ©   (2004-10-08 20:31) [2]

Есть детские сады в городе N и есть детсадовские малыши которые ходят в эти сады.
Каждый из них знает свой адрес. И детсадовский малыш и садик.
Но им просто необходимо попасть каждому в свой садик.
Что делать?
Обходить все садики в надежде случайно попасть в свой?
И вот решил обратится к вам, друзья мои, за помощью.


 
XProger ©   (2004-10-09 00:45) [3]

Если это для локалки, то клиент может послать в сеть BROADCAST пакет.
Сервер ловит его, берёт из пакета IP отправителя, и посылает ему свой IP. А дальше тебе решать... :)


 
pirate   (2004-10-09 13:04) [4]

Reindeer Moss Eater: Я тоже люблю попоясничать, но сейчас не до этого.

XProger: Как отослать BROADCAST пакет?


 
Defunct ©   (2004-10-09 14:07) [5]

> Как отослать BROADCAST пакет?

FChannelName := "255.255.255.255"
UDPServer.Socket.SendBuffer(FChanelName, FPort, SFrame, Size )


 
XProger ©   (2004-10-09 17:23) [6]

А так без компонентов:

procedure SendBroadCast;
var Init:TWSAData;    
   SockOpt:BOOL;    
   Sock:TSocket;    
   Target:TSockAddrIn;    
begin    
WSAStartup($101,Init);    
Sock:=Socket(PF_INET,SOCK_DGRAM,IPPROTO_UDP);    
SockOpt:=TRUE;    
SetSockOpt(Sock,SOL_SOCKET,SO_BROADCAST,PChar(@SockOpt),SizeOf(SockOpt)) ;    
Target.sin_port:=htons(8167);//номер порта    
Target.sin_addr.S_addr:=INADDR_BROADCAST;    
Target.sa_family:=AF_INET;    
SendTo(Sock,Data,DataBytes,0,Target,SizeOf(Target));    
WSACleanup;    
end;


 
Verg ©   (2004-10-09 17:31) [7]

И как же это поможет выяснить адрес сервера?


> в диапазоне от 127.0.0.2 до 255.255.255.0 ?
> Глупо.


 
XProger ©   (2004-10-11 02:14) [8]

Сервер получит этот пакет. Вытащит из него дарес отправителя (клиента) и пошлёт ему пакет авторизации, который получит клиент и вытащит из него IP адрес сервера 8)


 
Reindeer Moss Eater ©   (2004-10-11 08:43) [9]

Что же делать? Отправлять пакеты всем компам ip кот. лежит
в диапазоне от 127.0.0.2 до 255.255.255.0 ?


Отсюда делаем вывод, что интересуют сервера не только в собственной сети, а и за ее пределами.
Вспоминаем, что бродкасты между сетями никто по умолчанию не транслирует.

Так что действительно. Глупо.


 
Imageman   (2004-10-11 12:15) [10]

можно попробовать сделать некий третий компьютер. На этом третьем компе сделать, например, html страницу, на которой будут указаны IP адреса клиента и сервера. Или ftp сервер, на котором лежат файлы IP_server.txt и IP_client.txt.

Этот третий компьютер будет постоянно включен и доступен либо через DNS, либо по известному IP. Сделать такую схему можно у большинства бесплатных хостинг провайдеров.


 
pirate   (2004-10-11 13:18) [11]

В процедуре:
procedure SendBroadCast;
var Init:TWSAData;    
  SockOpt:BOOL;    
  Sock:TSocket;    
  Target:TSockAddrIn;    
begin    
WSAStartup($101,Init);
<<Выдает ошибку типа Access vilation error $#%76375493    
Sock:=Socket(PF_INET,SOCK_DGRAM,IPPROTO_UDP);    
SockOpt:=TRUE;    
SetSockOpt(Sock,SOL_SOCKET,SO_BROADCAST,PChar(@SockOpt),SizeOf(SockOpt)) ;    
Target.sin_port:=htons(8167);//номер порта    
Target.sin_addr.S_addr:=INADDR_BROADCAST;    
Target.sa_family:=AF_INET;
SendTo(Sock,Data,DataBytes,0,Target,SizeOf(Target));
<<Не нашел Data и DataBytes
WSACleanup;    
end;


 
Reindeer Moss Eater ©   (2004-10-11 13:18) [12]

Ага.
И останется решить задачу - узнать  адрес "третьего" сервера.


 
pirate   (2004-10-11 13:26) [13]

Я использую TTcpServer и TTcpClient.
Один на сервере другой на клиенте соответственно.
В ip диапазонах я не шарю, не знаю какие для локалок, какие для инета и т.д.
Программа-срвр висит на одном из компов локалки, а клиент на другом.
Им надо законнектиться друг с другом, передать пару строк друг другу и вырубиться.
Я только начинаю разбираться с сетевыми примочками, так что прошу не обижаться за глупые вопросы.
И так: КАК Корректно отправить этот BroadCast-пакет?


 
pirate   (2004-10-16 10:59) [14]

Обидно.
Полная *?:%;№"!) !
Я долго мучился, но ничего сделать путного не смог.
Итак, у кого-нибудь есть идеи?
Предложения?


 
Verg ©   (2004-10-16 14:56) [15]


> WSAStartup($101,Init);
> <<Выдает ошибку типа Access vilation error $#%76375493  
>  


Кто? Прямо WSAStartup выдает Access vilation ?



Страницы: 1 вся ветка

Форум: "Сети";
Текущий архив: 2005.01.02;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.034 c
3-1101972252
guestt
2004-12-02 10:24
2005.01.02
выпадающий список


14-1102057966
Lancelot
2004-12-03 10:12
2005.01.02
Вопрос специалистам по Java


9-1094672713
Yanis
2004-09-08 23:45
2005.01.02
Convert to *.x


1-1103464023
Pabse
2004-12-19 16:47
2005.01.02
открыть html


3-1102332746
Dimedrol
2004-12-06 14:32
2005.01.02
TTable дублирует записи в Grid-e...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский