/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
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




Søg
Reklame
Statistik
Spørgsmål : 177501
Tips : 31968
Nyheder : 719565
Indlæg : 6408522
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste