|
| Identifikation af ip ved accept. Fra : Jesper Gødvad |
Dato : 30-05-01 10:44 |
|
Hej Alle.
I nedenstående linie får jeg en connection, men jeg har store problemer med
at finde udaf hvilken ip den kommer fra.
Er der ikke én som har en smart konverteringsrutime så jeg enten får
maskin-navnet eller ip-adressen i klar tekst så jeg kan skrive noget
meningsfyldt på skærmen.
klientfd = accept (komfd, (struct sockaddr*) &klient_addr, &addr_str);
cout << "connection fra " << ntohs( klient_addr.sin_addr.s_addr )<< "\n";
mvh. jesper
| |
Jonas Meyer Rasmusse~ (30-05-2001)
| Kommentar Fra : Jonas Meyer Rasmusse~ |
Dato : 30-05-01 13:35 |
|
hvis vi antager at den ligger i en 32 bit int, hvilket den
nok gør siden du kører ntohs på den, så er det meget simpelt
du nøjes bare med at tage 8 bit ud af gangen:
jeg går ud fra du vil have de 4 tal man ser i 255.255.255.255 ikke ?
int adr;
int first = 0xFF & adr;
int second = 0xFF & ( adr >> 8 );
int third = 0xFF & ( adr >> 16);
int fourth = 0xFF & ( adr >> 24);
Jeg ved ikke hvilken rækkefølge du får dem i, men det kan du jo selv teste
Jonas
"Jesper Gødvad" <Xesper@goedvad.dk> wrote in message
news:9f2f5c$c6p$1@sunsite.dk...
> Hej Alle.
>
> I nedenstående linie får jeg en connection, men jeg har store problemer
med
> at finde udaf hvilken ip den kommer fra.
>
> Er der ikke én som har en smart konverteringsrutime så jeg enten får
> maskin-navnet eller ip-adressen i klar tekst så jeg kan skrive noget
> meningsfyldt på skærmen.
>
> klientfd = accept (komfd, (struct sockaddr*) &klient_addr, &addr_str);
> cout << "connection fra " << ntohs( klient_addr.sin_addr.s_addr )<<
"\n";
>
> mvh. jesper
>
>
| |
Jesper Gødvad (30-05-2001)
| Kommentar Fra : Jesper Gødvad |
Dato : 30-05-01 17:10 |
|
> jeg går ud fra du vil have de 4 tal man ser i 255.255.255.255 ikke ?
>
> int adr;
> int first = 0xFF & adr;
> int second = 0xFF & ( adr >> 8 );
> int third = 0xFF & ( adr >> 16);
> int fourth = 0xFF & ( adr >> 24);
>
> Jeg ved ikke hvilken rækkefølge du får dem i, men det kan du jo selv teste
I rigtig rækkefølge naturligvis! Det virker glimrende. tak for det!
~jesper
| |
Lau Sennels (30-05-2001)
| Kommentar Fra : Lau Sennels |
Dato : 30-05-01 14:38 |
|
"Jesper Gødvad" wrote:
> Er der ikke én som har en smart konverteringsrutime så jeg enten får
> maskin-navnet eller ip-adressen i klar tekst så jeg kan skrive noget
> meningsfyldt på skærmen.
>
> klientfd = accept (komfd, (struct sockaddr*) &klient_addr, &addr_str);
> cout << "connection fra " << ntohs( klient_addr.sin_addr.s_addr )<< "\n";
Nu skriver du ganske vidst ikke hvilket OS du arbejder under (fy!),
men lad os gætte på Linux.
BSD-funktionen, der gør nogenlunde det samme som Jonas Rasnussens
forslag, er:
#include<arpa/inet.h>
char* inet_ntoa(struct in_addr in)
--
Mvh
Lau Sennels
| |
Jesper Gødvad (30-05-2001)
| Kommentar Fra : Jesper Gødvad |
Dato : 30-05-01 17:21 |
|
> Nu skriver du ganske vidst ikke hvilket OS du arbejder under (fy!),
> men lad os gætte på Linux.
Jammen det er jo slet ikke nødvendigt, når du gætter så godt.
> BSD-funktionen, der gør nogenlunde det samme som Jonas Rasnussens
> forslag, er:
>
> #include<arpa/inet.h>
> char* inet_ntoa(struct in_addr in)
Jeg har i forvejen included arpa/inet.h, så denne ser lidt mere rationel ud.
Jeg skal udskrive ip-adressen og overføre den til min nye tråd. I forvejen
overfører jeg filedescriptoren, men det burde vel ikke være noget problem at
sende lidt ekstra info, vel?
fra:
void* incoming( void* kfd )
til:
void* incoming( void* kfd, void* ip_info )
Er det forøvrigt korrekt at jeg ville løbe en stor risiko for problemer hvis
jeg ikke med det samme caster pointeren til en rigtig variabel i den nye
tråd? Kan jeg ikke være så uheldig at to connections kommer så tæt på
hinanden at kfd variablen er blevet overskrevet med den nye værdi når jeg i
incoming skriver:
int kommunikations_fd = (int) kfd;
mvh. jesper
| |
|
|