Newsgroup: it.comp.programmare.win32
Titolo: DNS query

Qualcuno sa come si può fare in Visual C++ a fare una query al DNS server di
sistema per risolvere un inidirizzo ?
Grazie
        Riccardo

 ha scritto nel messaggio
news:0hcd7.875$3Q4....@news2.tin.it...


Quello se ho capito bene è un componente per la gestione del un server DNS
da ASP...non credo che faccia al caso mio...
Grazie comunque
Ciao


 writes:
RP> Quello se ho capito bene è un componente per la gestione del un server DNS
RP> da ASP...non credo che faccia al caso mio...
RP> Grazie comunque
Apri una pipe sull'output di NSLOOKUP. Il comando è di sistema.
--
Gian Uberto| main(){printf(&unix["\021%six\012\0"],(unix)["have"]+"fun"-0x60);}
Lauri      |                        David Korn, 1987 ioccc best one liner 
(aka saint)|-------------------------------------------------------------------
em@ail: 
sa...@eng.it
 ( vedere X-nospam nello header - see X-nospam in header )

> Apri una pipe sull'output di NSLOOKUP. Il comando č di sistema.
Lo so...cosě č molto semplice...
Il problema č che la query deve essere fatta molte volte al secondo...e da
task diversi...
Non ci sarebbe un modo migliore ? Ad esempio un'API che lo fa ?
Altrimenti...dove posso prendere l'ip del DNS di sistema ? In questo modo
potrei andare a dialogare direttamente con il server DNS tramite il
TCP/IP...
Poi se non sbaglio NSLOOKUP č un comando di sistema solo per NT e 2000...
Grazie e ciao
        Riccardo

> Apri una pipe sull'output di NSLOOKUP. Il comando č di sistema.
RP> Lo so...cosě č molto semplice...
RP> Il problema č che la query deve essere fatta molte volte al secondo...e da
RP> task diversi...
Beh,  preparati,  alcune  query  possono essere  lunghe...  Anyway  se
continui a chiamare nslookup.exe lui rimane nella cache dei dischi.
RP> Non ci sarebbe un modo migliore ? Ad esempio un'API che lo fa ?
Devi  gestirti tutto un  dialogo col  server.  Se  ti serve  solo l'IP
dovrebbero  aver fatto un  port della  gethostbyname(). Se  ti servono
informazioni diverse  (i.e. chi č  il nameserver di un  certo dominio,
chi č il mail exchanger).
RP> Altrimenti...dove posso prendere l'ip del DNS di sistema ? In questo modo
RP> potrei andare a dialogare direttamente con il server DNS tramite il
RP> TCP/IP...
Ce c'č qualcuno che  lo fa per te č meglio lasciarlo  fare a lui salvo
pesanti e provati problemi di performance. Questa č una idea che sotto
Windows latita.
RP> Poi se non sbaglio NSLOOKUP č un comando di sistema solo per NT e 2000...
Vero, anche questa hanno le altre ciof...


Ho optato per le API...e lascerò nslookup come ultima speranza...
Ho provato ad usare questa funzione :
struct HOSTENT FAR * gethostbyaddr (
  const char FAR * addr,
  int len,
  int type
);
Ma non c'e' verso si farla funzionare...soprattutto perchè non so cosa è il
terzo paramentro...anzi credo di aver capito cos'e' ma non trovo i valori da
passargli...
Dovrebbe essere un valore che indica il tipo di record su cui fare una
query...ma non riesco a trovare i valori da inserire...
L'errore ritornato da WSAGetLastError è : WSANO_DATA        Valid name, no
data record of requested type.
Io dovrei fare una query sui record di tipo A...se non sbaglio...cioè devo
inserire un indirizzo IP e avere la stringa alfanumerica corrispondente...
Ciao e grazie
        Riccardo

 Ho optato per le API...e lascerň nslookup come ultima speranza...


 TCP/IP...
Non vorrei dire una stupidata ma
gethostbyname()
The Windows Sockets gethostbyname function gets host
information corresponding to a hostname.
gethostbyaddr()
The Windows Sockets gethostbyaddr function gets host
information corresponding to an address.
non fanno al caso tuo.
ciao
Massimo

 writes:
RP> Ho risolto con questa funzione che ho trovato sul web....
RP> LPHOSTENT nsLookUp(char *addr)
RP> {
RP>     DWORD dwIPAddr;
RP>     LPHOSTENT HostEnt;
RP>       // we assume that the address is a host name
RP>       if( (dwIPAddr = inet_addr(addr)) == INADDR_NONE )
RP>           HostEnt = gethostbyname(addr);
RP>       // else.. is a valid IP address( decimal address separated by dot's)
RP>       else
RP>           HostEnt = gethostbyaddr((LPCSTR) &dwIPAddr, 4, PF_INET);
RP>       return(HostEnt);
RP> }
Se ti  serve avere solo la  risoluzione diretta o inversa  dei nomi va
più che bene, anzi è il modo  di procedere. Con NSLOOKUP (che a me era
venuto in mente  perché avevo appena suggerito in  icwa come capire se
un  dominio era già  stato registrato  o no)  puoi fare  richieste più
'sfiziose', ad esempio chiedere chi è il mail exchanger.


 'sfiziose', ad esempio chiedere chi è il mail exchanger.
Era proprio la cosa che mi serviva...comunque ti ringrazio molto...
Ciao
        Riccardo