ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

SOCKS4 Server
  #1  
Старый 31.12.2007, 21:37
razzzar
Участник форума
Регистрация: 16.06.2007
Сообщений: 107
Провел на форуме:
725870

Репутация: 208
Arrow SOCKS4 Server

Написал простенький сокс4 сервер. Может кому-то понадобится.

Умеет парсить коммандную строку для задания параметров порта, адресса для бинда, введения логов.
Справка по параметру --help ( -h ).

+ исходники

С Наступающим!

Скачать

Последний раз редактировалось razzzar; 31.12.2007 в 21:43..
 
Ответить с цитированием

  #2  
Старый 31.12.2007, 21:49
ElteRUS
Постоянный
Регистрация: 11.10.2007
Сообщений: 406
Провел на форуме:
7215020

Репутация: 1423
По умолчанию

Прикольно, огромное спасибо. Буду на досуге разбирать код )
 
Ответить с цитированием

  #3  
Старый 31.12.2007, 22:17
Jes
Постоянный
Регистрация: 16.04.2007
Сообщений: 398
Провел на форуме:
3371897

Репутация: 1462
По умолчанию

С наступающим

Последний раз редактировалось Jes; 31.12.2007 в 22:21..
 
Ответить с цитированием

  #4  
Старый 02.01.2008, 02:00
DWORD
Участник форума
Регистрация: 24.07.2007
Сообщений: 138
Провел на форуме:
165671

Репутация: 215
По умолчанию

Код:
while ( true )
Лучше for(;;), вроде даже _Great_ на этом форуме рассказывал почему.
Код:
if ( stArgv.bLog == TRUE )
Сравнивать явно с условием ИСТИНА "считается" плохим тоном здесь, но даже не в этом дело, а в том, что в C++ никто не обещал существование константы TRUE.
Код:
uVal = 1;
ioctlsocket(sockAcc, FIONBIO, &uVal);
...
do
		nLen = recv(sockData, &cDummy, sizeof ( cDummy ), 0);
	while ( (nLen > 0) && (cDummy != cCond) );
У вас сервер по временам центральный ЦП не кушает под 100%? Холостой цикл (в общем случае успешный select, который вы сделали по-выше вас не спасет).
Код:
typedef struct tag_SOCKS4_REQUEST
{
	BYTE ucVersion;
	BYTE ucCommand;
	WORD wDestPort;
	DWORD dwDestIp;
} SOCKS4_REQUEST;

typedef struct tag_CONFIG_STRUCT
{
	int nPort;
	u_long ulListen;
	BOOL bLog;
} CONFIG_STRUCT;

typedef struct tag_THREAD_ARGV_STRUCT
{
	SOCKET sockParam;
	sockaddr_in saParam;
	BOOL bLog;
} THREAD_ARGV_STRUCT;
В С++ typedef ненужно писать перед объявлением структуры, имя структуры также является именем соответствующего типа даных.
Код:
closesocket(sockClnt);
shutdown(sockClnt, 0);
Код:
closesocket(sockAcc);
shutdown(sockAcc, 0);
...


----------------------
А вообще мне понравилось, хоть и нет в этом никакого смысла!
----------------------
 
Ответить с цитированием

  #5  
Старый 02.01.2008, 03:56
KEZ
Banned
Регистрация: 18.05.2005
Сообщений: 1,981
Провел на форуме:
1941233

Репутация: 2726


По умолчанию

Цитата:
Лучше for(;, вроде даже _Great_ на этом форуме рассказывал почему.
Не представляю, о чем там можно написать и почему что-то лучше.
А все остальное - да, согласен, быдлокодинг... Особенно про == TRUE.
 
Ответить с цитированием

  #6  
Старый 02.01.2008, 05:10
__mad
Участник форума
Регистрация: 04.11.2007
Сообщений: 103
Провел на форуме:
548128

Репутация: 104
По умолчанию

Цитата:
Сообщение от kez  
Не представляю, о чем там можно написать и почему что-то лучше.
ну наверн потомучто экономится пару байт : D ну и исчезает бесползное сравнение с тру... : D
 
Ответить с цитированием

  #7  
Старый 02.01.2008, 06:29
KEZ
Banned
Регистрация: 18.05.2005
Сообщений: 1,981
Провел на форуме:
1941233

Репутация: 2726


Exclamation

>ну наверн потомучто экономится пару байт : D ну и исчезает бесползное сравнение с тру... : D

конпеляторы уже давно делают параллелизацию кода, оптимизацию под всякие SSE, MMX и конкретные процессоры, выкидывать неиспользуемый код, заменять константы,и ты думаешь, они не выкинут твое сравнение while (1) ?

я пишу

Код:
while (1)
{
	__asm nop
}
и

Код:
for (;;)
{
    __asm nop
}
а получаю и там и там:

Цитата:
003918AD > /90 nop
003918AE .^\EB FD jmp short test.003918AD
Собрано с использованием конпелятора Intel C++ 9 (с дефолтной оптимизацией)
 
Ответить с цитированием

  #8  
Старый 02.01.2008, 06:41
KEZ
Banned
Регистрация: 18.05.2005
Сообщений: 1,981
Провел на форуме:
1941233

Репутация: 2726


По умолчанию

PS

но ни один конпелятор тебе не поможет, если ты будешь писать ТАКОЕ
Код:
	for ( int i=0; i<nCount; i++ )
	{
		if ( (wcscmp(szCmdLine[i], L"--port") == 0) || (wcscmp(szCmdLine[i], L"-p") == 0) && (bPort == FALSE) )
		{
			stTmpConfig.nPort = _wtoi(szCmdLine[i+1]);
			bPort = TRUE;
		}

		if ( (wcscmp(szCmdLine[i], L"--bind") == 0) || (wcscmp(szCmdLine[i], L"-b") == 0) )
		{
далее, почему-то (видимо, для кросс-платформености) юзаются то виндовые типы, то стандартные....
unsigned long __stdcall AccThread
а тут вдруг
BOOL ParseCmdLine

Если ты все-таки решил юзать виндо-зависимые техники, то время (строкой) получается намного проще, нежели так:
Код:
	_snprintf(szLogText, nLogLenth, "[%s] [%02d-%02d-%02d %02d:%02d:%02d]\r\n%s\r\n", szIp, stTime->tm_year+1900, stTime->tm_mon+1, stTime->tm_mday, stTime->tm_hour, stTime->tm_min, stTime->tm_sec, szText);
а через GetTimeFormat, GetDateFormat

И ещё, почему UNICODE? Нафиг тут оно надо, по два байта хранить на символ?

А это что?
Код:
#pragma comment(lib, "user32.lib")
#pragma comment(lib, "kernel32.lib")
#pragma comment(linker, "/SUBSYSTEM:WINDOWS")
Причем, это сорец из журнала "Хакер", который ты переделал в худшую сторону.
 
Ответить с цитированием

  #9  
Старый 02.01.2008, 14:27
DWORD
Участник форума
Регистрация: 24.07.2007
Сообщений: 138
Провел на форуме:
165671

Репутация: 215
По умолчанию

Действительно, невероятно, но факт. while(1) в MSVS при дефолтных настройках оптимизации дает:
Код:
0041139E  mov         eax,1 
004113A3  test        eax,eax 
004113A5  je          wmain+2Ah (4113AAh) 
004113A7  nop              
004113A8  jmp         wmain+1Eh (41139Eh)
А for(;;) :

Код:
0041139E  nop              
0041139F  jmp         wmain+1Eh (41139Eh)
 
Ответить с цитированием

  #10  
Старый 03.01.2008, 00:44
presidentua
Постоянный
Регистрация: 04.11.2007
Сообщений: 331
Провел на форуме:
1724067

Репутация: 806
Отправить сообщение для presidentua с помощью ICQ
По умолчанию

Во теоретики! Один байт економии это пипец как много, особенно если он для СоксСервера. Начитавшись советов больше не подойду к С и Делфи, буду только на асме кодить. Клянусь, клянусь, клянусь
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Windows Home Server повреждает пользовательские файлы dinar_007 Мировые новости 0 28.12.2007 14:13
ASPLinux тестирует новый продукт ASPLinux Server ConfPoint Edition GreenBear Мировые новости 0 13.02.2006 11:21
отправка на Icq Mefisto PHP, PERL, MySQL, JavaScript 12 08.07.2005 11:34



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ