Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Интернет и сети
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Закрытая тема
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 22.05.2009, 16:47
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
Вопрос ping + проверка порта на открытость

Сразу предупреждаю: яндексил, поиск по форуму юзал.

Нужен простой алгоритм ping-а (без применения тяжеловесов-индейцев, всё на winsock), и если есть ответ от сервера - проверить, открыт ли на нём порт. В результате функция должна вернуть:
-1 - если сервер недоступен
-2 - если сервер доступен, но порт закрыт
иначе среднее из двух-трёх пингов.

То, что имею сейчас:
Код:
function Aviable(ipaddr:string;port:integer):boolean;
var
  D:WSAData;
  S:TSocket;
  A:TSockAddr;
begin
  result:=false;
  if WSAStartup($101,D)<>0 then exit;
  A.sin_family:=AF_INET;
  A.sin_addr.S_addr:=inet_addr(pchar(ipaddr));
  S:=socket(AF_INET,SOCK_STREAM,0);
  if S=INVALID_SOCKET then exit;
  A.sin_port:=htons(port);
  if connect(S,A,sizeof(A))=0 then result:=true;
  WSACleanup;
end;
выдрал из ДелфиВорлда. Но он "застревает", если нету соединения с портом. Если есть метод поставить на нето таймаут - буду признателен. Если доделаю эту с таймаутом, то пинг возможно и сам сумею встроить... Но лучше бы сразу функцию...
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
  #2  
Старый 22.05.2009, 16:49
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

И вот ещё что: ни у кого не завалялась функция преобразования адреса вида "my.site.ru" в IP-адрес, с учётом файла hosts и текущих настроек DNS на компе юзера?

====================
ЗЫ: Раздаю плюсы за любую полезную информацию.
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
  #3  
Старый 30.05.2009, 17:21
Аватар для Ferra
Ferra Ferra вне форума
Местный
 
Регистрация: 12.03.2006
Адрес: Минск
Сообщения: 527
Репутация: 1336
Радость DelphiWorld

Насколько ты объяснил, ответы такие:

Как узнать IP машины по имени
Код:
uses
  WinSock;

const
  WINSOCK_VERSION = $0101;

function GetIPAddress(name: string): string;
var
  WSAData: TWSAData;
  p: PHostEnt;
begin
  WSAStartup(WINSOCK_VERSION, WSAData);
  p := GetHostByName(PChar(name));
  Result := inet_ntoa(PInAddr(p.h_addr_list^)^);
  WSACleanup;
end;

Определить, занят ли порт сокета
Код:
var SockAddrIn : TSockAddrIn;
    FSocket    : TSocket;

  ...

  If  bind(FSocket, SockAddrIn, SizeOf(SockAddrIn)) <> 0 Then
  begin
    обрабатываем WSAGetLastError
  end;

а вообще можно и через пинг.
Чтобы узнать IP сервера www.google.ru (http://www.google.ru), пишешь в командной строке:
ping www.google.ru (http://www.google.ru/)
__________________
Нет повести печальнее на свете, чем повесть о заклиневшем Resete.
  #4  
Старый 30.05.2009, 17:22
Аватар для Ferra
Ferra Ferra вне форума
Местный
 
Регистрация: 12.03.2006
Адрес: Минск
Сообщения: 527
Репутация: 1336
По умолчанию

И на всякий случай, формируй запросы правильно. и ищи детально.
http://www.google.ru/search?hl=ru&q=...lr=&aq=f&o q=
__________________
Нет повести печальнее на свете, чем повесть о заклиневшем Resete.
  #5  
Старый 31.05.2009, 19:59
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

Хм... спс за первый код. а второй я чёто не разобрал... слух, я в винсоках нулевой. Можешь разъяснить, что там и куда?
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
  #6  
Старый 02.06.2009, 15:04
Аватар для NekitoSSSS
NekitoSSSS NekitoSSSS вне форума
Начинающий
 
Регистрация: 02.05.2009
Адрес: Башкортостан, г.Благовещенск
Сообщения: 142
Версия Delphi: XE
Репутация: 13
По умолчанию

Internet Component Suite (ISC) тебе может помочь, там есть такой отличный компонент как TPing, скачать можно тут, в архиве есть демка по использованию. посмотришь исходничек демки и сам ответишь на все свои возникшие вопросы
----------------
офф. сайт
  #7  
Старый 02.06.2009, 15:43
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

Огромная спасиба))
=============
Радость была недолгой, ибо это решило дело лишь наполовину. Вопрос ещё открыт: как проверить, есть ли соединение с определённым портом на сервере?
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj

Последний раз редактировалось PhoeniX, 02.06.2009 в 16:02.
  #8  
Старый 02.06.2009, 17:33
Аватар для NekitoSSSS
NekitoSSSS NekitoSSSS вне форума
Начинающий
 
Регистрация: 02.05.2009
Адрес: Башкортостан, г.Благовещенск
Сообщения: 142
Версия Delphi: XE
Репутация: 13
По умолчанию

Просканировать все возможные порты в цикле на открытость.
думаю ЭТОТ исходник тебе поможет , ну или вот ЭТОТ

P.S. желательно использовать второй, он удобней сам его юзаю
  #9  
Старый 02.06.2009, 17:39
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

Спс, помогло. пока заюзал второй... Позже переделаю первый под себя.
Поставил плюсеги.
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
  #10  
Старый 03.06.2009, 06:13
Аватар для NekitoSSSS
NekitoSSSS NekitoSSSS вне форума
Начинающий
 
Регистрация: 02.05.2009
Адрес: Башкортостан, г.Благовещенск
Сообщения: 142
Версия Delphi: XE
Репутация: 13
По умолчанию

Кстати а для чего тебе это если не секрет??
  #11  
Старый 03.06.2009, 09:51
Aless Aless вне форума
Прохожий
 
Регистрация: 13.04.2009
Сообщения: 26
Репутация: 10
По умолчанию

Для Ferra.Я прикольнее придумал слоган - нет повести печальнее на свете,чем повесть о зависшем интернете!!!
Закрытая тема


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 18:06.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter