V I S U A L I Z Z A D I S C U S S I O N E |
marcodj85 |
Inserito il - 18/06/2009 : 18:59:01 ciao ragazzi, vi chiedo una mano, nell'ultimo appello un punto era di stampare sul server il nome dell'host del client con il quale si era instaurata la connessione. ora dato che si dovevano utilizzare la gethostbyname e la gethostbyaddr vi chiedo come si fà dato che non ho trovato nulla in merito nel sulle dispense del prof ne su internet...so come si stampa l'indirizzo e la porta ma non come si stampi il nome. attendo fiducioso in una vostra risposta |
9 U L T I M E R I S P O S T E (in alto le più recenti) |
juniorjak |
Inserito il - 22/06/2009 : 22:49:27 Citazione: Messaggio inserito da marcodj85
grazie per la risposta anche se non era quella che cercavo....in pratica senza usare una funzione e mettendo il codice direttamente nel main lo sapevo fare anche io...il problema si pone se vuoi utilizzare una funzione tipo:
void getHostByAddr(unsigned long addr) { struct hostent host; host=gethostbyaddr((char )&addr, 4, AF_INET); const char canonical_name=host-h_name; printf(Messaggio ricevuto dal Client %snn, canonical_name); }
in quel caso non so come cavolo si faccia...se sapete delucidarmi in proposito
scusa ma non ho capito bene, hai problemi con la sintassi? Perchè ci sarebbe qualche errore di sintassi... In ogni caso spostare una parte del main in una funzione/procedura non è complicato. Se non sai che errori ci siano ti passo una versione della tua funzione con qualche modifica, utilizzo linux quindi dovresti cambiare il file da includere netdb.h con quello/i per windows...
/****************************
uso: hostn ip
(es: hostn 127.0.0.1)
****************************/
#include <netdb.h>
#include <stdio.h>
#include <malloc.h>
void getHostByAddr(struct in_addr *);
int main(int argc,char* argv[]){
struct in_addr *ip = (struct in_addr *)malloc(sizeof(struct in_addr));
ip->s_addr = inet_addr(argv[1]);
getHostByAddr(ip);
return 0;
}
void getHostByAddr(struct in_addr *ip)
{
struct hostent *host;
struct sockaddr_in *indirizzo;
indirizzo = malloc(sizeof(struct sockaddr_in));
indirizzo->sin_addr.s_addr = ip->s_addr;
host=gethostbyaddr((char *)&indirizzo->sin_addr.s_addr, 4, AF_INET);
char* canonical_name=host->h_name;
printf("Hostname: %s \n", canonical_name);
}
ovviamente puoi controllare se l'ip è valido ecc.. questo è solo l'essenziale... ciao |
noname |
Inserito il - 21/06/2009 : 20:28:29 If we call for the proof and we question the answers Only the doubt will grow Are we blind to the truth or a sign to believe in? Only the wise will know
|
airbag |
Inserito il - 21/06/2009 : 19:48:58 Citazione: Messaggio inserito da marcodj85
grazie mi sei stato di grande aiuto ora si che ho capito come fare..... , qualcuno che mi da seriamente una mano senza criticare e basta??
In the garden of England dead moles lie inside their holes The dead-end tunnels crumble in the rain underfoot Innit a shame? |
marcodj85 |
Inserito il - 21/06/2009 : 18:19:34 grazie mi sei stato di grande aiuto ora si che ho capito come fare..... , qualcuno che mi da seriamente una mano senza criticare e basta?? |
noname |
Inserito il - 20/06/2009 : 16:26:02 In questo caso è la sintassi del C e il formato delle strutture che ti sfugge...
|
kikko |
Inserito il - 20/06/2009 : 12:31:01 Prof è possibile di spostare l'esame x le 15?perchè io in quel giorno(23 Giugno) alle 11 ho un esame. |
marcodj85 |
Inserito il - 20/06/2009 : 11:25:39 grazie per la risposta anche se non era quella che cercavo....in pratica senza usare una funzione e mettendo il codice direttamente nel main lo sapevo fare anche io...il problema si pone se vuoi utilizzare una funzione tipo:
void getHostByAddr(unsigned long addr) { struct hostent host; host=gethostbyaddr((char )&addr, 4, AF_INET); const char canonical_name=host-h_name; printf(Messaggio ricevuto dal Client %snn, canonical_name); }
in quel caso non so come cavolo si faccia...se sapete delucidarmi in proposito |
filippo |
Inserito il - 19/06/2009 : 01:45:30 Citazione: Messaggio inserito da marcodj85
ciao ragazzi, vi chiedo una mano, nell'ultimo appello un punto era di stampare sul server il nome dell'host del client con il quale si era instaurata la connessione. ora dato che si dovevano utilizzare la gethostbyname e la gethostbyaddr vi chiedo come si fà dato che non ho trovato nulla in merito nel sulle dispense del prof ne su internet...so come si stampa l'indirizzo e la porta ma non come si stampi il nome. attendo fiducioso in una vostra risposta
Preciso che ci sono anche le dispense sul DNS in C (http://www.di.uniba.it/~reti/calc/laboratorio.htm). Non dimenticarti del libro di testo: ci sono gli esempi che cerchi. |
noname |
Inserito il - 18/06/2009 : 20:35:49 Su Google ne trovi di materiale!
http://beej.us/guide/bgnet/output/html/multipage/gethostbynameman.html
Hai il puntatore alla struttura hostent, il campo h_name contiene il nome dell'host.
// THIS HAS BEEN SUPERCEDED
// use getnameinfo() instead!
struct hostent *he;
struct in_addr ipv4addr;
struct in6_addr ipv6addr;
inet_pton(AF_INET, "192.0.2.34", &ipv4addr);
he = gethostbyaddr(&ipv4addr, sizeof ipv4addr, AF_INET);
printf("Host name: %s\n", he->h_name);
inet_pton(AF_INET6, "2001:db8:63b3:1::beef", &ipv6addr);
he = gethostbyaddr(&ipv6addr, sizeof ipv6addr, AF_INET6);
printf("Host name: %s\n", he->h_name);
|