Wie bekomm ich die IP des clients herraus, der gerade connected?
-
Hi,
Wie bekomme ich die IP des Clients herraus, der gerade versucht zum Server zu conncten? Geht das evtl. über accept? Und ist es dann auch möglich diese Connection zu unterbinden?Gruß Tobi.
-
Nimm die Verbindung via accept() an, schau mit getpeername() nach welche IP das ist. Wenn du die IP nicht magst schließe die Verbindung wieder.
-
Wer lesen kann ist klar im Vorteil...
inet_ntoa()
-
@gosha16 accept hat als 2ten paramete struct sockaddr* addr, aber um inet_ntoa() zuverwenden brauch ich doch sockaddr_in oder nicht?
-
Du kannst accept() auch mit einem sockaddr_in füttern.
(ok, getpeername ist natürlich überflüssig ;D)
-
Kann ich das so machen:
SOCKET sPeer = accept( s, addr, addrlen ); SOCKADDR_IN sai; memset( &sai, 0, sizeof( SOCKADDR_IN ) ); getpeername( sPeer, (SOCKADDR*)&sai, 0 ); char szBuffer[ 128 ]; szBuffer[ 0 ] = 0; strcpy( szBuffer, inet_ntoa( sai.sin_addr ) );???
-
geeky schrieb:
Du kannst accept() auch mit einem sockaddr_in füttern.
(ok, getpeername ist natürlich überflüssig ;D)
hast du das überlesen oder einfach nicht verstanden?

-
sockaddr_in sai; int sockaddr_len=sizeof(sockaddr_in); SOCKET newSocket=accept(listenSocket,(sockaddr*)&sai,&sockaddr_len); if (newSocket==INVALID_SOCKET) { // Was schief gelaufen } else { // Die IP nach "ip" kopieren: char ip[100]; strcpy( ip, inet_ntoa(sai.sin_addr) ); }@gosha16: Ich scheine ein Brett vor dem Kopf zu haben?!
-
ich hab T0bi gemeint

-
Gosha16, wo ist dein Problem? Wieso sollte ich dein Post nicht gelesen haben? Darf ich hier nicht frei für mich entscheiden wie ich mein Problem löse? Was spricht gegen diese Variante?
-
T0bi, kann es sein, das du in einem früheren Leben "Spieleprogrammierer" geheißen hast?
greetz, Swordfish
-
T0bi ist doch viel dümmerer als wie der war.
-
Aber mit dem wars irgendwie spaßiger...
greetz, Swordfish
-
Jojo und ihr mich auch ...
-
geh doch ins hackerboard aber lass uns mit deinen kindereien in ruhe
-
Hi,
Falls ich dir noch helfen kann hier der Psydo-code:sockaddr_in sa; int namelen = sizeof(sa); getpeername(DEINCLIENTSOCKET,(SOCKADDR*)&sa,&namelen); int size = strlen(inet_ntoa(sa.sin_addr)); char* ip = new char[size+1]; strcpy(ip,inet_ntoa(sa.sin_addr)); delete [] ip;MFG ReduX
-
@"weg mit dir!" Ich find euch 11Jährigen Kinder immer nur zu lustig, wenn ihr mal ausfallend werden wollt logt ihr euch aus und postet hier mit son Crap-Namen ein Haufen Müll.
Irgendwie find ich das sowieso immer schlimmer hier, dass die die programmieren können auf denen rumhacken dies lernen wollen, klar stellt man sich da als Anfänger dumm an, das doch noch lange kein Grund so ausfallend zu werden?
Ich habe die Methode genommen, weil ich sonst nicht an die IP heran gekommen wäre:
// ***** Detour WSAAccept ***** SOCKET WINAPI DetourWSAAccept( SOCKET s, struct sockaddr *addr, LPINT addrlen, LPCONDITIONPROC lpfnCondition, DWORD dwCallbackData ) { SOCKET sPeer = fpOrigWSAAccept( s, addr, addrlen, lpfnCondition, dwCallbackData ); SOCKADDR_IN sai; int sai_len = sizeof( SOCKADDR_IN ); memset( &sai, 0, sizeof( SOCKADDR_IN ) ); getpeername( sPeer, (SOCKADDR*)&sai, &sai_len ); char szID[ 16 ]; szID[ 0 ] = 0; strcpy( szID, inet_ntoa( sai.sin_addr ) ); time_t TimeStamp = 0; tm *now = 0; TimeStamp = time( 0 ); now = localtime( &TimeStamp ); char szBuffer[ 128 ]; szBuffer[ 0 ] = 0; sprintf( szBuffer, "[ %2d/%2d/%d - %2d:%2d:%2d ] - %s", now->tm_mday, now->tm_mon + 1, now->tm_year + 1900, now->tm_hour, now->tm_min, now->tm_sec, szID ); std::ofstream file; file.open( "Connections.txt", std::ios::out | std::ios::app ); file << szBuffer << std::endl; file.close( ); return sPeer; }Oder hätte ich das, doch anders lösen können?
PS: @ReduX, Danke!
Gruß Tobi.