Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [C/C++] Utility per query ai record DNS

    Ciao!
    Ho creato con wxWindows un piccolo client per l'invio di e-mail tramite SMTP.
    Ora voglio creare una piccola utility (richiamabile da una voce del menu "tools") che faccia una query DNS, restituendo il valore del record MX, per trovare l'indirizzo del server SMTP di un certo dominio.
    L'utente digita il dominio in un campo di testo e fa la query, e su un altro campo appare l'indirizzo del server SMTP di quel dominio.
    Come potrei fare?

  2. #2
    Dovrai mandare un determinato pacchetto UDP formattato ad hoc al server DNS specificando, all'interno del flag specifico, l'opzione relativa alla query MX.
    Windows mette gia a disposizione un'utility per effettuare query DNS, tale 'nslookup.exe'. Qui un esempio:
    codice:
    C:\ nslookup
    Server predefinito:  s-linux.scrumble.loc
    Address:  192.168.0.254
    > set type=MX
    > tin.it
    Server:  s-linux.scrumble.loc
    Address:  192.168.0.254
    
    Risposta da un server non di fiducia:
    tin.it  MX preference = 10, mail exchanger = smtp.tin.it
    
    tin.it  nameserver = dns.tin.it
    tin.it  nameserver = dnsca.tin.it
    smtp.tin.it     internet address = 62.211.72.33
    smtp.tin.it     internet address = 62.211.72.32
    dns.tin.it      internet address = 194.243.154.62
    dnsca.tin.it    internet address = 195.31.190.31
    A questo punto hai due strade:
    - semplice: ti appoggi ad nslookup e parsi il suo output. Non è una soluzione portabile e raffinata ma è molto sbrigativa.
    - più complessa: ti costruisci a mano il pacchetto UDP contenente la query DNS, lo mandi tramite una banalissima socket al server DNS del caso e ricevi il pacchetto di ritorno che parsi e stampi a video.
    Dipendentemente dal linguaggio che utilizzi puoi magari provare a vedere se qualche anima pia ha scritto un modulo ad alto livello per effettuare query DNS di questo tipo, altrimenti ti tocca mettere mano all'RFC del protocollo DNS e costruirti il pacchetto da zero. In tal caso ti suggerisco di facilitarti la vita utilizzando nslookup in accoppiata con uno sniffer per osservare la struttura del pacchetto e provare a replicarla.

    Hope this helps.

    saluti ;-)
    Rilasciata Python FTP Server library 0.5.1
    http://code.google.com/p/pyftpdlib/

    We'll be those who'll make the italian folks know how difficult can be defecating in Southern California without having the crap flying all around the house.

  3. #3
    Grazie dei suggerimenti! Ci provero'!

  4. #4
    Moderatore di Sicurezza informatica e virus L'avatar di Habanero
    Registrato dal
    Jun 2001
    Messaggi
    9,782
    basta usare le API..... dato per scontato che usi windows...

    codice:
      char domain[]="google.com";
    
      DNS_RECORD *result = NULL;
      char *smtp;
      
      
    // Query DNS per il server SMTP (record MX) relativa al dominio presente in "domain"
    
      if (DnsQuery( domain, DNS_TYPE_MX, DNS_QUERY_STANDARD, NULL, &result, NULL))
        { smtp = result->Data.MX.pNameExchange; }
      else
        { printf("Err: non posso trovare un server smtp per il dominio %s\n",domain);
          return(-1);
        }
    
    // Ottiene l'IP del server SMTP
    
      if ( ( host = gethostbyname(smtp) ) == NULL )
         { printf("Err: non posso trovare l'ip di %s\n", smtp);
           return(-1);
         }
    Leggi il REGOLAMENTO!

    E' molto complicato, un mucchio di input e output, una quantità di informazioni, un mucchio di elementi da considerare, ho una quantità di elementi da tener presente...
    Drugo

  5. #5
    no grazie, sono allergico alle API
    grazie per la risposta comunque!

  6. #6
    Moderatore di Sicurezza informatica e virus L'avatar di Habanero
    Registrato dal
    Jun 2001
    Messaggi
    9,782
    che vuol dire sono allergico alle API???? :master:
    è il modo più semplice che esista per fare quello che chiedi... il codice mi sembra più che banale... mah!
    Leggi il REGOLAMENTO!

    E' molto complicato, un mucchio di input e output, una quantità di informazioni, un mucchio di elementi da considerare, ho una quantità di elementi da tener presente...
    Drugo

  7. #7
    Niente, era una battuta scema...
    Il fatto e' che voglio scrivere codice cross-platform, non solo per Windows, infatti come ho scritto nel primo post sto usando wxWindows.
    In effetti sarebbe molto facile nel modo che mi hai detto tu, il codice e' molto semplice e intuitivo! Se solo ci fosse un modo per "tradurlo" in codice portabile, con metodi di wxWindows...
    Grazie lo stesso per l'ottima risposta!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.