Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz

23.01.2009, 15:42
|
|
Members of Antichat - Level 5
Регистрация: 05.04.2006
Сообщений: 1,066
Провел на форуме: 3493315
Репутация:
1228
|
|
socks 4 получение IP
Возникла необходимость написать програмку которая будет работать протоколом сокс 4.
Программа работает как сокс сервер, ток проблемма в том что когда она по протаколу сокс получает IP адрес, некоторые актеты в нем оказываться отрицательными. Не могу понять в чем причина. Вот кусок программы в котором проблемма
Код:
#include <winsock2.h>
#include <stdio.h>
#include <math.h>
#pragma comment(lib,"ws2_32")
#define SLISTEN_PORT 8080 //порт
#define LISTEN_BACKLOG 5
//////***************************************************************************************************/////
DWORD WINAPI SocketListen(LPVOID AS)
{
SOCKET AcceptSocket = (SOCKET)AS;
char auth[8];
recv(AcceptSocket, auth, 8, 0);
char c;
do
{
recv(AcceptSocket, &c, 1, 0);
}while(c);
if(auth[0] != 0x04 || auth[1] != 0x01)
{
printf("#%d Auntification error\n", AcceptSocket);
send(AcceptSocket, "\x00\x05b\xd3\xd1", 4, 0);
closesocket(AcceptSocket);
return false;
}
unsigned port = (auth[2] * 256) + auth[3];
char ip[16];
sprintf(ip, "%d.%d.%d.%d", auth[4], auth[5], auth[6], auth[7]);
printf("#%d Connect %s:%d \n", AcceptSocket, ip, port);
return true;
}
int main(int argc, char *argv[])
{
WSADATA wsaData;
if (WSAStartup(MAKEWORD(2,2), &wsaData) != NO_ERROR)
return printf("Error at WSAStartup()\n");
SOCKET ListenSocket = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP );
if (ListenSocket == INVALID_SOCKET)
{
printf("Error at socket(): %ld\n", WSAGetLastError());
WSACleanup();
return 0;
}
SOCKADDR_IN sa = {0};
int len = sizeof(sa);
sa.sin_family = AF_INET;
sa.sin_addr.s_addr = INADDR_ANY;
sa.sin_port = htons( SLISTEN_PORT );
if( bind( ListenSocket, (sockaddr*)&sa, len ) == SOCKET_ERROR )
{
printf("bind() failed.\n");
closesocket(ListenSocket);
return 0;
}
if( listen( ListenSocket, LISTEN_BACKLOG ) == SOCKET_ERROR )
{
printf("Error listening on socket.\n");
closesocket(ListenSocket);
return 0;
}
printf("Server start at port: %d \nWaiting...\n",SLISTEN_PORT );
SOCKET AcceptSocket;
DWORD thID;
while( (AcceptSocket = accept( ListenSocket, (sockaddr*)&sa, &len )) != -1 )
{
printf("#%d Connection from %s:%d\n", AcceptSocket, inet_ntoa(sa.sin_addr), htons(sa.sin_port));
CreateThread(0, 0, SocketListen, (LPVOID)AcceptSocket, 0, &thID);
}
return 1;
}
Запускаю этот код, в браузере происую socks4 на 127.0.0.1:8080 , ввожу в браузере адрес наример ya.ru, в консоли должен высыититья IP яндекса тоесть 213.180.204.8 вместо этго выводиться -44.118.48.97
тоесть IP не верно получаться. В чем ошибка, вроде все соотвтствует протоколу socks4/
Вроде понятно обяснил)
|
|
|
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|