2009-06-14 8 views
1

C'est la sortie du serveur quand je telnet:D'où viennent ces adresses IP?

[email protected]:~$ ./server_setup 1299 
Connection recieved from 186.32.0.0 
[email protected]:~$ ./server_setup 1299 
^C 
[email protected]:~$ ./server_setup 1290 
Connection recieved from 231.237.0.0 
[email protected]:~$ ./server_setup 1290 
Connection recieved from 231.241.0.0 
[email protected]:~$ 

BTW je tourne un pare-feu donc mon adresse du serveur est 192.168.101 et ma machine locale est 192.168.1.104

EDIT Je soupçonne que la région troublée est l'appel de fonction

inet_ntop(AF_INET, 
         their_addr.sa_data, 
         ipaddr, sizeof ipaddr); 

C'est ici que l'adresse IP stockée est convertie en chaîne.

+0

Selon la documentation http://linux.about.com/library/cmd/blcmdl3_inet_pton.htm il serait Soyez une bonne idée pour récupérer la valeur de retour de inet_ntop et vérifier les erreurs. Vous connectez-vous au serveur via l'interface de bouclage localhost/127.0.0.1? – merkuro

+0

Vous utilisez INET6_ADDRSTRLEN, ne devrait-il pas être INET_ADDRSTRLEN pour ipv4? – cloudhead

+0

Bon point. Il faut éviter de mélanger ces deux-là, mais puisque INET6_ADDRSTRLEN> INET_ADDRSTRLEN je ne pense pas qu'un buffer débordé soit à l'origine de ce comportement. – merkuro

Répondre

2

inet_ntop attend un pointeur struct in_addr comme second argument, alors essayez quelque chose comme ceci:

inet_ntop(AF_INET, &((struct sockaddr_in*)&their_addr)->sin_addr, 
            ipaddr, sizeof ipaddr); 
+0

merci! cela a fonctionné que signifie le 's' dans sin_ *? – Tyler

+0

Fondamentalement, il signifie simplement "sockaddr_in". sockaddr fonctionne un peu comme une union, dans ce cas la sa_data [14] se traduit par un port court non signé (sin_port) suivi d'une adresse de 4 octets (sin_addr), suivie de 8 octets morts. – Gerald

Questions connexes