Socks5 сервер

Тема в разделе "WASM.UNIX", создана пользователем WIN32, 21 июн 2007.

  1. WIN32

    WIN32 Member

    Публикаций:
    0
    Регистрация:
    20 янв 2007
    Сообщения:
    338
    Пишу простенький Socks5 прокси сервер. Всё вроде делаю правильно, но данные не идут как не крути =( в общем посмотрите на код, если будут какие соображения , говорите.

    []
     
  2. nester7

    nester7 New Member

    Публикаций:
    0
    Регистрация:
    5 дек 2003
    Сообщения:
    720
    Адрес:
    Russia
    Ну вот тебе пример:




    Код (Text):
    1. #include <windows.h>
    2. #include <stdio.h>
    3. #include "psapi.h"
    4.  
    5.  
    6. #pragma comment (lib, "psapi")
    7. #pragma comment (lib, "advapi32")
    8.  
    9.  
    10. #define _toi (__int64)
    11. #define _toui (unsigned __int64)
    12.  
    13. #define LARGE_INTEGER unsigned __int64
    14.  
    15. #define LargeIntegerAdd(a,b)            (LARGE_INTEGER)(_toi(a)  + _toi(b))
    16. #define LargeIntegerSubtract(a,b)       (LARGE_INTEGER)(_toi(a)  - _toi(b))
    17. #define EnlargedIntegerMultiply(a,b)    (LARGE_INTEGER)(_toi(a)  * _toi(b))
    18. #define EnlargedUnsignedMultiply(a,b)   (LARGE_INTEGER)(_toui(a) * _toui(b))
    19. #define ExtendedIntegerMultiply(a,b)    (LARGE_INTEGER)(_toi(a)  * _toi(b))
    20.  
    21.  
    22. #define MAX_PROCESSES (2048)
    23.  
    24.  
    25. unsigned __int64
    26. LargeIntegerDivide (
    27.         unsigned __int64 i1,
    28.         unsigned __int64 i2,
    29.         unsigned __int64 *rem)
    30. {
    31.     if (i2)
    32.         if (rem)
    33.             *rem = i1 % i2;
    34.     if (i2)    
    35.         return (i1 / i2);
    36.        
    37.     return (0); /* ??? */
    38. }
    39.  
    40. typedef struct _PROCESS_TIME {
    41.  
    42.     DWORD           dwProcessId;
    43.     LARGE_INTEGER   ProcessTime;
    44.     LARGE_INTEGER   SystemTime;
    45.     int             iUsage;
    46.     int             IsGarbage;
    47.    
    48. } PROCESS_TIME;
    49.  
    50.  
    51. void getDebugPriv( void )
    52. {
    53.     HANDLE hToken;
    54.     LUID sedebugnameValue;
    55.     TOKEN_PRIVILEGES tkp;
    56.  
    57.     if ( !OpenProcessToken( GetCurrentProcess(),
    58.             TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken ) )
    59.         return;
    60.  
    61.     if (!LookupPrivilegeValue( NULL, SE_DEBUG_NAME, &sedebugnameValue ) ) {
    62.         CloseHandle( hToken );
    63.         return;
    64.     }
    65.  
    66.     tkp.PrivilegeCount = 1;
    67.     tkp.Privileges[0].Luid = sedebugnameValue;
    68.     tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
    69.  
    70.     AdjustTokenPrivileges( hToken, FALSE, &tkp, sizeof tkp, NULL, NULL );
    71.  
    72.     CloseHandle( hToken );
    73. }
    74.  
    75.  
    76. int
    77. get_cpu_usage_by_pid(PROCESS_TIME *pt)
    78. {
    79.     unsigned __int64    ftKernelTime,
    80.                         ftUserTime,
    81.                         ftCreationTime,
    82.                         ftExitTime,
    83.                         ftSystemTime,
    84.    
    85.                         tProcessTime,
    86.                         tSystemTime,
    87.                         ProcessTime,
    88.                         SystemTime,
    89.                         LargeInteger,
    90.                         Remainder;
    91.    
    92.     HANDLE hProcess;
    93.    
    94.     if (!pt)
    95.         return (0);
    96.        
    97.     if (pt->dwProcessId == 0 /* Idle Process */) {
    98.         pt->IsGarbage = 0;
    99.         pt->iUsage = 0;
    100.         return (0);
    101.     }
    102.    
    103.     hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, pt->dwProcessId);
    104.    
    105.     /* error, exited process? */
    106.     if (!hProcess) {
    107.         pt->IsGarbage = 1;
    108.         return (-1);
    109.     }
    110.        
    111.     if (!GetProcessTimes(hProcess,
    112.             (FILETIME*)&ftCreationTime,
    113.             (FILETIME*)&ftExitTime,
    114.             (FILETIME*)&ftKernelTime,
    115.             (FILETIME*)&ftUserTime))
    116.     {
    117.         pt->IsGarbage = 1;
    118.         return (-1);
    119.     }
    120.            
    121.     /* if process exit */
    122.     if (ftExitTime) {
    123.         pt->IsGarbage = 1;
    124.         return (1);
    125.     }
    126.    
    127.     GetSystemTimeAsFileTime((FILETIME*)&ftSystemTime);
    128.  
    129.     ProcessTime = ftUserTime + ftKernelTime;
    130.     SystemTime  = ftSystemTime;
    131.    
    132.     tProcessTime = ProcessTime;
    133.     tSystemTime  = SystemTime;
    134.        
    135.    
    136.     if (pt->ProcessTime && pt->SystemTime) {
    137.    
    138.         ProcessTime = ProcessTime - pt->ProcessTime;
    139.         SystemTime  = SystemTime  - pt->SystemTime;
    140.  
    141.         ProcessTime  = ExtendedIntegerMultiply(ProcessTime, 100);
    142.         LargeInteger = LargeIntegerDivide(ProcessTime, SystemTime, &Remainder);
    143.    
    144.         pt->iUsage = LargeInteger;
    145.        
    146.         pt->ProcessTime = tProcessTime;
    147.         pt->SystemTime  = tSystemTime;
    148.        
    149.     }
    150.     else {
    151.         pt->ProcessTime = ProcessTime;
    152.         pt->SystemTime  = SystemTime;
    153.         pt->iUsage      = 0; /* ? */
    154.     }
    155.    
    156.     pt->IsGarbage = 0;
    157.    
    158.     return (0);
    159. }
    160.  
    161. PROCESS_TIME*
    162. lsys_get_pt_by_pid(PROCESS_TIME *pt, int size, int pid)
    163. {
    164.     int msize;
    165.     PROCESS_TIME *ptime;
    166.    
    167.     ptime = pt;
    168.    
    169.     for (msize = 0; msize < size; msize++) {
    170.         if (ptime->dwProcessId == pid) {
    171.             ptime->IsGarbage = 1;
    172.             return ptime;
    173.         }
    174.         ptime++;
    175.     }
    176.    
    177.     ptime = pt;
    178.    
    179.     for (msize = 0; msize < size; msize++) {
    180.        
    181.         if (ptime->dwProcessId == -1UL) {
    182.        
    183.             ptime->dwProcessId = pid;
    184.             ptime->ProcessTime = 0;
    185.             ptime->SystemTime  = 0;
    186.             ptime->iUsage      = 0;
    187.             ptime->IsGarbage   = 1;
    188.            
    189.             return ptime;
    190.         }
    191.        
    192.         ptime++;
    193.     }
    194.    
    195.     return (0);
    196. }
    197.  
    198.  
    199. int
    200. lsys_get_cpu_usage(PROCESS_TIME *pt, int size)
    201. {
    202.    
    203.     DWORD aProcesses[MAX_PROCESSES], cbNeeded, cProcesses;
    204.     unsigned int i;
    205.     MEMORYSTATUSEX ms;
    206.     char *p;
    207.     PROCESS_TIME *tpt;
    208.     int msize;
    209.     int cpuusage;
    210.    
    211.    
    212.     if ( !EnumProcesses( aProcesses, sizeof(aProcesses), &cbNeeded ) )
    213.         return 0;
    214.  
    215.     cProcesses = cbNeeded / sizeof(DWORD);
    216.  
    217.     for (i = 0; i < cProcesses; i++) {
    218.        
    219.         tpt = lsys_get_pt_by_pid(pt, size, aProcesses[i]);
    220.      
    221.         get_cpu_usage_by_pid(tpt);
    222.        
    223.     }
    224.    
    225.     tpt = pt;
    226.     cpuusage = 0;
    227.    
    228.     for (msize = 0; msize < size; msize++) {
    229.        
    230.         if (tpt->IsGarbage) {
    231.             tpt->dwProcessId = -1UL;
    232.             tpt->ProcessTime = 0;
    233.             tpt->SystemTime  = 0;
    234.             tpt->iUsage      = 0;
    235.         }
    236.         else
    237.             cpuusage += tpt->iUsage;
    238.            
    239.         tpt++;
    240.     }
    241.  
    242.     return (cpuusage);
    243. }
    244.  
    245. int
    246. main()
    247. {
    248.     PROCESS_TIME *pt, *tpt;
    249.     int psize;
    250.     int i;
    251.     psize = MAX_PROCESSES;
    252.    
    253.    
    254.     pt = (PROCESS_TIME*) malloc(sizeof(PROCESS_TIME) * psize);
    255.  
    256.     if (!pt) {
    257.         printf("can't allocate memory\n");
    258.         return (-1);
    259.     }
    260.    
    261.     getDebugPriv();
    262.        
    263.     tpt = pt;
    264.    
    265.     for (i = 0; i < psize; i++) {
    266.         tpt->dwProcessId = -1;
    267.         tpt->ProcessTime = 0;
    268.         tpt->SystemTime=0;
    269.         tpt->iUsage = 0;
    270.         tpt->IsGarbage = 1;
    271.        
    272.         tpt++;
    273.     }
    274.    
    275.    // _asm int 3
    276.    
    277.     for ( ; ; ) {
    278.    
    279.         printf("%d\n", lsys_get_cpu_usage(pt, psize) / 2 /* num of cpu */);
    280.        
    281.         Sleep(1000);
    282.     }
    283.    
    284.     return (0);
    285. }
    И ты думаешь, что это вставленное мною говно кто-то будет разбирать?
    Это, ксати, просто тест-сорец.

    Локализуй ошибки, сформулируй вопросы.

    Точнее нет, не так, во:

    Чем больше код, тем меньше помогающих.
     
  3. GrDog

    GrDog New Member

    Публикаций:
    0
    Регистрация:
    28 июн 2007
    Сообщения:
    26
    Есть не законченный кусок кода на эту тему все пашет за исключением авторизации. Ну еще под никсы что бы собрать нужно кое что добавить а так могу отдать ...
     
  4. W4FhLF

    W4FhLF New Member

    Публикаций:
    0
    Регистрация:
    3 дек 2006
    Сообщения:
    1.050
    GrDog

    Отдай)
     
  5. UnW1n

    UnW1n New Member

    Публикаций:
    0
    Регистрация:
    25 ноя 2006
    Сообщения:
    13
    довай же)
     
  6. sl0n

    sl0n Мамонт дзена **

    Публикаций:
    0
    Регистрация:
    26 сен 2003
    Сообщения:
    703
    и сплоетам удобри -)