Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Сети > Whois через Winsock


Автор: MaXL 22.3.2006, 13:06
Как сделать? smile

Автор: MaXL 22.3.2006, 15:37
Ну я имею ввиду нужно послать серверу команду...какую? как её обработать, плиз если есть у кого пример киньте оч. срочно нужно.

Автор: Matematik 22.3.2006, 15:57
См. как в Indy сделано

Код

  Connect; try
    WriteLn(ADomain);
    Result := AllData;
  finally Disconnect; end;


Понятно?

Автор: MaXL 23.3.2006, 14:29
Если чесно то не очень smile

Автор: Digitalator 25.3.2006, 00:23
протокол Whois
http://rfc.net/rfc3912.html

сразу после коннекта посылаем серверу строку запроса, завершающуюся символами #13 #10
далее читаем все что присылает сервер, до тех пока он не закроет соединение.

Автор: MaXL 25.3.2006, 03:50
Спасибо сёдня попробую smile

Автор: S.A.P. 25.3.2006, 07:42
Не знаю как в Делфи, но могу кое - чем поделиться.
Для того, чтобы получить какую - либо информацию о домене тебе необходимо определить, на каком whois сервере он числится (их много), например для зоны ru обычно это whois.ripn.net.

Едем дальше... Чтобы получить информацию о домене, тебе необходимо приконнектиться к нужному whois серверу по 43 порту и отправить туда строку, например 'vingrad.ru\n' (перевод строки). Дальше уже читаешь ответ, для каждого whois сервера он специфичен.

Могу кинуть список whios серверов, но он у меня устаревший, поэтому попробуй поискать более новый в инете.

Автор: MaXL 25.3.2006, 13:43
Если можешь кидай, свой список, я по нему проверю если чо старые выкину.

Автор: S.A.P. 26.3.2006, 09:36
Собственно вот обещанный список
Код

com => whois.internic.net
net => whois.internic.net
org => whois.internic.net
info => info.whois-servers.net
biz => biz.whois-servers.net
co.uk => whois.nic.uk
org.uk => whois.nic.uk
ltd.uk => whois.nic.uk
plc.uk => whois.nic.uk
edu => whois.internic.net
mil => whois.internic.net
br.com => whois.centralnic.com
cn.com => whois.centralnic.com
eu.com => whois.centralnic.com
hu.com => whois.centralnic.com
no.com => whois.centralnic.com
qc.com => whois.centralnic.com
sa.com => whois.centralnic.com
se.com => whois.centralnic.com
se.net => whois.centralnic.com
us.com => whois.centralnic.com
uy.com => whois.centralnic.com
za.com => whois.centralnic.com
ac => whois.ripe.net
ac.ac => whois.ripe.net
co.ac => whois.ripe.net
gv.ac => whois.ripe.net
or.ac => whois.ripe.net
af => whois.netnames.net
am => whois.nic.am
as => whois.nic.as
at => whois.nic.at
ac.at => whois.nic.at
co.at => whois.nic.at
gv.at => whois.nic.at
or.at => whois.nic.at
asn.au => whois.aunic.net
com.au => whois.aunic.net
edu.au => whois.aunic.net
org.au => whois.aunic.net
net.au => whois.aunic.net
be => whois.ripe.net
ac.be => whois.ripe.net
br => whois.nic.br
adm.br => whois.nic.br
adv.br => whois.nic.br
am.br => whois.nic.br
arq.br => whois.nic.br
art.br => whois.nic.br
bio.br => whois.nic.br
cng.br => whois.nic.br
cnt.br => whois.nic.br
com.br => whois.nic.br
ecn.br => whois.nic.br
eng.br => whois.nic.br
esp.br => whois.nic.br
etc.br => whois.nic.br
eti.br => whois.nic.br
fm.br => whois.nic.br
fot.br => whois.nic.br
fst.br => whois.nic.br
g12.br => whois.nic.br
gov.br => whois.nic.br
ind.br => whois.nic.br
inf.br => whois.nic.br
jor.br => whois.nic.br
lel.br => whois.nic.br
med.br => whois.nic.br
mil.br => whois.nic.br
net.br => whois.nic.br
nom.br => whois.nic.br
ntr.br => whois.nic.br
odo.br => whois.nic.br
org.br => whois.nic.br
ppg.br => whois.nic.br
pro.br => whois.nic.br
psc.br => whois.nic.br
psi.br => whois.nic.br
rec.br => whois.nic.br
slg.br => whois.nic.br
tmp.br => whois.nic.br
tur.br => whois.nic.br
tv.br => whois.nic.br
vet.br => whois.nic.br
zlg.br => whois.nic.br
ca => whois.cdnnet.ca
ab.ca => whois.cdnnet.ca
bc.ca => whois.cdnnet.ca
mb.ca => whois.cdnnet.ca
nb.ca => whois.cdnnet.ca
nf.ca => whois.cdnnet.ca
ns.ca        => whois.cdnnet.ca
nt.ca => whois.cdnnet.ca
on.ca => whois.cdnnet.ca
pe.ca => whois.cdnnet.ca
qc.ca        => whois.cdnnet.ca
sk.ca => whois.cdnnet.ca
yk.ca => whois.cdnnet.ca
cc => whois.nic.cc
ac.cn => whois.cnnic.cn
com.cn => whois.cnnic.cn
edu.cn => whois.cnnic.cn
gov.cn => whois.cnnic.cn
net.cn => whois.cnnic.cn
org.cn => whois.cnnic.cn
bj.cn => whois.cnnic.cn
sh.cn => whois.cnnic.cn
tj.cn => whois.cnnic.cn
cq.cn => whois.cnnic.cn
he.cn => whois.cnnic.cn
nm.cn => whois.cnnic.cn
ln.cn => whois.cnnic.cn
jl.cn => whois.cnnic.cn
hl.cn => whois.cnnic.cn
js.cn => whois.cnnic.cn
zj.cn => whois.cnnic.cn
ah.cn => whois.cnnic.cn
hb.cn => whois.cnnic.cn
hn.cn => whois.cnnic.cn
gd.cn => whois.cnnic.cn
gx.cn => whois.cnnic.cn
hi.cn => whois.cnnic.cn
sc.cn => whois.cnnic.cn
gz.cn => whois.cnnic.cn
yn.cn => whois.cnnic.cn
xz.cn => whois.cnnic.cn
sn.cn => whois.cnnic.cn
gs.cn => whois.cnnic.cn
qh.cn => whois.cnnic.cn
nx.cn => whois.cnnic.cn
xj.cn => whois.cnnic.cn
tw.cn => whois.cnnic.cn
hk.cn => whois.cnnic.cn
mo.cn => whois.cnnic.cn
cx => whois.cx.net
cz => whois.ripe.net
de => whois.nic.de
dk => whois.ripe.net
fo => whois.ripe.net
com.ec => whois.lac.net
org.ec => whois.lac.net
net.ec => whois.lac.net
mil.ec => whois.lac.net
fin.ec => whois.lac.net
med.ec => whois.lac.net
gov.ec => whois.lac.net
fr => whois.nic.fr
tm.fr => whois.nic.fr
com.fr => whois.nic.fr
asso.fr => whois.nic.fr
presse.fr => whois.nic.fr
gf => whois.nplus.gf
gs => whois.adamsnames.tc
co.il => whois.ripe.net
org.il => whois.ripe.net
net.il => whois.ripe.net
ac.il => whois.ripe.net
k12.il => whois.ripe.net
gov.il => whois.ripe.net
muni.il => whois.ripe.net
ac.in => whois.iisc.ernet.in
co.in => whois.iisc.ernet.in
ernet.in => whois.iisc.ernet.in
gov.in => whois.iisc.ernet.in
net.in => whois.iisc.ernet.in
res.in => whois.iisc.ernet.in
is => whois.ripe.net
it => whois.ripe.net
ac.jp => whois.nic.ad.jp
co.jp => whois.nic.ad.jp
go.jp => whois.nic.ad.jp
or.jp => whois.nic.ad.jp
ne.jp => whois.nic.ad.jp
ac.kr => whois.nic.or.kr
co.kr => whois.nic.or.kr
go.kr => whois.nic.or.kr
ne.kr => whois.nic.or.kr
nm.kr => whois.nic.or.kr
or.kr => whois.nic.or.kr
re.kr => whois.nic.or.kr
li => whois.nic.li
lt => whois.ripe.net
lu => whois.ripe.net
asso.mc => whois.ripe.net
tm.mc => whois.ripe.net
com.mm => whois.nic.mm
org.mm => whois.nic.mm
net.mm => whois.nic.mm
edu.mm => whois.nic.mm
gov.mm => whois.nic.mm
ms => whois.adamsnames.tc
mx => whois.nic.mx
com.mx => whois.nic.mx
org.mx => whois.nic.mx
net.mx => whois.nic.mx
edu.mx => whois.nic.mx
gov.mx => whois.nic.mx
nl => whois.domain-registry.nl
no => whois.norid.no
nu => whois.nic.nu
pl => whois.ripe.net
com.pl => whois.ripe.net
net.pl => whois.ripe.net
org.pl => whois.ripe.net
pt => whois.ripe.net
com.ro => whois.ripe.net
org.ro => whois.ripe.net
store.ro => whois.ripe.net
tm.ro => whois.ripe.net
firm.ro => whois.ripe.net
www.ro => whois.ripe.net
arts.ro => whois.ripe.net
rec.ro => whois.ripe.net
info.ro => whois.ripe.net
nom.ro => whois.ripe.net
nt.ro => whois.ripe.net
ru => whois.ripn.net
com.ru => whois.ripn.net
net.ru => whois.ripn.net
org.ru => whois.ripn.net
se => whois.nic-se.se
si => whois.arnes.si
com.sg => whois.nic.net.sg
org.sg => whois.nic.net.sg
net.sg => whois.nic.net.sg
gov.sg => whois.nic.net.sg
sk => whois.ripe.net
st => whois.nic.st
tc => whois.adamsnames.tc
tf => whois.adamsnames.tc
ac.th => whois.thnic.net
co.th => whois.thnic.net
go.th => whois.thnic.net
mi.th => whois.thnic.net
net.th => whois.thnic.net
or.th => whois.thnic.net
tj => whois.nic.tj
tm => whois.nic.tm
to => monarch.tonic.to
bbs.tr => whois.metu.edu.tr
com.tr => whois.metu.edu.tr
edu.tr => whois.metu.edu.tr
gov.tr => whois.metu.edu.tr
k12.tr => whois.metu.edu.tr
mil.tr => whois.metu.edu.tr
net.tr => whois.metu.edu.tr
org.tr => whois.metu.edu.tr
com.tw => whois.twnic.net
org.tw => whois.twnic.net
net.tw => whois.twnic.net
ac.uk => whois.ja.net
uk.co => whois.uk.co
uk.com => whois.nomination.net
uk.net => whois.nomination.net
gb.com => whois.nomination.net
gb.net => whois.nomination.net
vg => whois.adamsnames.tc
ac.za => whois.co.za
alt.za => whois.co.za
co.za => whois.co.za
edu.za => whois.co.za
gov.za => whois.co.za
mil.za => whois.co.za
net.za => whois.co.za
ngo.za => whois.co.za
nom.za => whois.co.za
org.za => whois.co.za
school.za => whois.co.za
tm.za => whois.co.za
web.za => whois.co.za
sh => whois.nic.sh
kz => whois.domain.kz

Автор: MaXL 21.4.2006, 07:03
Не получаетсяя сделать перевод строки
я делаю так:
 
Код

lstrcpy(str,PChar('kaspersky.ru'+#13#10));

ещё пробовал так:
Код

lstrcpy(str,PChar('kaspersky.ru'+#13#10#0));

сервер мне шлёт 
Код

Пошло
% By submitting a query to RIPN's Whois Service
% you agree to abide by the following terms of use:
% http://www.ripn.net/about/servpol.html#3.2 (in Russian) 
% http://www.ripn.net/about/en/servpol.html#3.2 (in English).
-----------------------------------
No entries found for the selected source(s).

Last updated on 2006.04.21 07:50:39 MSK/MSD

 of use:
% http://www.ripn.net/about/servpol.html#3.2 (in Russian) 
% http://www.ripn.net/about/en/servpol.html#3.2 (in English).

хотя, если на этом сервере делать whois через браузер(ну тип на их сайт и там набирать), то всё прекрасно выдаёт инфу, что делать? 

Автор: Rouse_ 21.4.2006, 15:06
Код

////////////////////////////////////////////////////////////////////////////////
//
//  ****************************************************************************
//  * Project Name : WhoIs
//  * Unit Name    : uMain
//  * Purpose      : Демонстрационный пример получения информации с WhoIs сервера.
//  * Author       : Александр (Rouse_) Багель
//  * Version      : 1.00
//  ****************************************************************************
//
//  Особая благодарность TrefptYc и группе Машина Времени,
//  за оказанную моральную поддержку, в процессе написания данного примера :)
//

unit uMain;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, Winsock, XPMan;

type
  TfrmMain = class(TForm)
    edServer: TLabeledEdit;
    edRecipient: TLabeledEdit;
    GroupBox1: TGroupBox;
    memReport: TMemo;
    Button1: TButton;
    XPManifest1: TXPManifest;
    procedure Button1Click(Sender: TObject);
  end;

var
  frmMain: TfrmMain;

implementation

{$R *.dfm}

function WhoIs(Server, Query: String; Timeout: Integer;
  var Response: TStringList): Boolean;
const
  MAXBLOCKSIZE = 1024;
var
  WSAData: TWSAData;
  hSocket: TSocket;
  Addr_in: sockaddr_in;
  Host: PHostEnt;
  InAddr, NoBlock: u_long;
  FDSet: TFDSet;
  Time: timeval;
  Buff: array [0..MAXBLOCKSIZE - 1] of Char;
  RecvCount: Integer;
begin
  // инициализируем WinSock
  Result := WSAStartup(MakeWord(1, 0), WSAData) = NOERROR;
  if not Result then Exit;
  try
    // создаем сокет
    hSocket := socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    if hSocket = INVALID_SOCKET then
    begin
      Result := False;
      Exit;
    end;
    try
      // Определяем, что ввел пользователь имя хоста или его адрес
      InAddr := inet_addr(PChar(Server));
      if InAddr = INADDR_NONE then
      begin
        Host := gethostbyname(PChar(Server));
        if not Assigned(Host) then
        begin
          Result := False;
          Exit;
        end;
        InAddr := PInAddr(Host.h_addr_list^)^.S_addr;
      end;
      // Подготавливаем структуру для соединения
      FillChar(Addr_in, SizeOf(sockaddr_in), 0);
      Addr_in.sin_addr.S_addr := InAddr;
      Addr_in.sin_family:= AF_INET;
      Addr_in.sin_port := htons(IPPORT_WHOIS);
      // Устанавливаем интервалы таймаута
      setsockopt(hSocket, SOL_SOCKET, SO_RCVTIMEO, @Timeout, SizeOf(Integer));
      setsockopt(hSocket, SOL_SOCKET, SO_SNDTIMEO, @Timeout, SizeOf(Integer));
      // Соединение с сервером - довольно долгий процесс, поэтому мы поступим по
      // хитрому - а именно переводим сокет в неблокирующий режим
      NoBlock := 1;
      ioctlsocket(hSocket, FIONBIO, NoBlock);
      // соединяемся
      if connect(hSocket, Addr_in, SizeOf(sockaddr_in)) = SOCKET_ERROR then
        case WSAGetLastError of
          // Обычно при неблокирующем соединении выдается вот эта ошибка
          // на попытку соединения, поэтому мы будем ждать окончания
          // соединения через select
          WSAEWOULDBLOCK:
          begin
            FD_ZERO(FDSet);
            FD_SET(hSocket, FDSet);
            Time.tv_sec := Timeout div 1000;
            Time.tv_usec := Timeout;
            if select(0, nil, @FDSet, nil, @Time) <> 1 then
            begin
              Result := False;
              Exit;
            end;
          end;
        else
          begin
            Result := False;
            Exit;
          end;
        end;
      // Соединились - теперь неблокирующий режим нам не нужен
      // Возвращаем все как было
      NoBlock := 0;
      ioctlsocket(hSocket, FIONBIO, NoBlock);
      // Обязательно проверяем чтобы в конце запроса стояло #13#10
      Query := Query + sLineBreak;
      // И отправляем запрос серверу
      if Send(hSocket, Query[1], Length(Query), 0) = SOCKET_ERROR then
      begin
        Result := False;
        Exit;
      end;
      // Запрос отправлен - начинаем читать данные пока не кончатся
      RecvCount := 1;
      while RecvCount > 0 do
      begin
        RecvCount := recv(hSocket, Buff, MAXBLOCKSIZE, 0);
        Response.Text := Response.Text + String(Buff);
      end;
    finally
      // Завершаем установленную сессию
      shutdown(hSocket, SD_BOTH);
      // Закрываем сокет
      closesocket(hSocket);
    end;
  finally
    // Деинициализируем WinSock
    WSACleanup;
  end;
end;

procedure TfrmMain.Button1Click(Sender: TObject);
var
  S: TStringList;
begin
  S := TStringList.Create;
  try
    // edServer.Text = whois.internic.net
    // edRecipient.Text = borland.com
    WhoIs(edServer.Text, edRecipient.Text, 10000, S);
    memReport.Lines.Assign(S);
  finally
    S.Free;
  end;
end;

end.


Целиком забирай тут: http://rouse.front.ru/whois.zip 

Автор: MaXL 23.4.2006, 13:01
Спасибо, теперь разобрался, и мой пример тоже заработалд, только он чуть попроще  smile  

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)