как определить свой IP?

Тема в разделе "WASM.NETWORKS", создана пользователем trust, 26 янв 2008.

  1. trust

    trust New Member

    Публикаций:
    0
    Регистрация:
    18 янв 2008
    Сообщения:
    49
    Добрый вечер. Подскажите пожалуйста как определить свой IP, без использования gethostbyname?
    Определяю так:
    Код (Text):
    1. .386
    2. .model flat, stdcall
    3. option casemap:none
    4.  
    5. include \masm32\include\windows.inc
    6. include \masm32\include\kernel32.inc
    7. includelib \masm32\lib\kernel32.lib
    8. include \masm32\include\user32.inc
    9. includelib \masm32\lib\user32.lib
    10. includelib /masm32/lib/wsock32.lib
    11. include /masm32/include/wsock32.inc
    12.  
    13. .data                        
    14. caption db "message",0
    15. lcht db '127.0.0.1', 0
    16.  
    17. .data?    
    18. szip db ?          
    19. wsa WSADATA <?>
    20. .code
    21. Start:
    22. invoke WSAStartup,101h,addr wsa        
    23. invoke gethostname, addr szip, sizeof szip      
    24. invoke gethostbyname, addr szip
    25. mov eax, [eax + 12]
    26. mov eax, [eax]
    27. mov eax, [eax]
    28. invoke inet_ntoa, eax
    29. invoke lstrcmpi, eax, addr lcht                                  
    30. invoke WSACleanup
    31. invoke MessageBox, NULL,addr lcht, addr caption, MB_OK
    32. invoke ExitProcess, 0
    33. end Start
    Но этот способ меня не устраивает ( не потому что не работает, просто не устраивает ). Может быть есть еще способ. Подскажите пожалуйста.
     
  2. satrau

    satrau Александр

    Публикаций:
    0
    Регистрация:
    5 янв 2008
    Сообщения:
    229
    валом способов - если тебе нужно узнать IP любым способом
    1- вывести диалоговое окно с просьбой ввести IP. результат использовать у себя далее.
    2- запустить процесс cmd.exe с параметрами /c "ipconfig >ip.txt" и потом парсить ip.txt
    3- купить хостинг с пхп на котором поставить скрипт, который при обращении к нему возвращает IP адресс инициализатора соеденения - далее ответ с сервера парсим и получаем IP.
    ...
    хоть и могут показаться глупыми мои советы - но если тебе надо узнать - все методы хороши.
     
  3. steelfactor

    steelfactor New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2007
    Сообщения:
    501
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces,
    там содержится текущий IP
     
  4. trust

    trust New Member

    Публикаций:
    0
    Регистрация:
    18 янв 2008
    Сообщения:
    49
    steelfactor спасибо.
     
  5. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    GetAdaptersInfo
     
  6. trust

    trust New Member

    Публикаций:
    0
    Регистрация:
    18 янв 2008
    Сообщения:
    49
    IceStudent спасибо. ну а все же, в чем моя ошибка с RegEnumKeyEx? заранее спасибо.
     
  7. trust

    trust New Member

    Публикаций:
    0
    Регистрация:
    18 янв 2008
    Сообщения:
    49
    хорошо. вот код. немного подправил. но все еще не работает.
    Код (Text):
    1. .386
    2. .model flat, stdcall
    3. option casemap:none
    4.  
    5. include \masm32\include\windows.inc
    6. include \masm32\include\kernel32.inc
    7. includelib \masm32\lib\kernel32.lib
    8. include \masm32\include\user32.inc
    9. includelib \masm32\lib\user32.lib
    10. include \masm32\include\gdi32.inc
    11. includelib \masm32\lib\gdi32.lib      
    12. include \masm32\include\advapi32.inc
    13. includelib \masm32\lib\advapi32.lib
    14.  
    15.  
    16. .data?
    17.   phKey dd ?
    18.   newKey dd ?            
    19.   sizekey dd ?    
    20.   valuekey dd ?    
    21.   dwIndex dd ?            
    22.   namepkey db 40 dup(?)          
    23.   buffnamepkey dd ?
    24.  
    25. .code
    26.     Start:        
    27.         .data
    28. .code
    29. invoke RegOpenKeyEx, HKEY_LOCAL_MACHINE, ADDR patch, NULL, KEY_ALL_ACCESS, ADDR phKey          
    30. mov dwIndex, 0    
    31. mov buffnamepkey, 40
    32. rec:    
    33. invoke RegEnumKeyEx, phKey, dwIndex, addr namepkey, addr buffnamepkey,NULL,NULL,NULL,NULL  
    34. invoke MessageBox, NULL, addr namepkey, NULL, MB_OK  
    35. invoke lstrcat,ADDR patch, ADDR namepkey                              
    36. invoke RegOpenKeyEx, phKey, ADDR patch, NULL, KEY_ALL_ACCESS, ADDR newKey  
    37. invoke MessageBox, NULL, addr patch, NULL, MB_OK
    38. invoke RegQueryValueEx,newKey,addr data,0,0,NULL,addr sizekey
    39. invoke RegQueryValueEx,newKey,addr data,0,0,ADDR valuekey,addr sizekey                    
    40. invoke RegCloseKey, newKey
    41. invoke RegCloseKey, phKey
    42. .IF valuekey == 0    
    43.     inc dwIndex
    44.     jmp rec
    45. .ENDIF        
    46. invoke MessageBox, NULL, addr valuekey, NULL, MB_OK
    47. invoke ExitProcess, 0
    48.     end Start
    в чем дело ?:dntknw:
     
  8. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    trust
    но все еще не работает ... в чем дело ?
    Какая уж тут работа, он даже не компилируется.
     
  9. trust

    trust New Member

    Публикаций:
    0
    Регистрация:
    18 янв 2008
    Сообщения:
    49
    немного продвинулся. вот код:
    Код (Text):
    1. .386
    2. .model flat, stdcall
    3. option casemap:none
    4.  
    5. include \masm32\include\windows.inc
    6. include \masm32\include\kernel32.inc
    7. includelib \masm32\lib\kernel32.lib
    8. include \masm32\include\user32.inc
    9. includelib \masm32\lib\user32.lib
    10. include \masm32\include\gdi32.inc
    11. includelib \masm32\lib\gdi32.lib      
    12. include \masm32\include\advapi32.inc
    13. includelib \masm32\lib\advapi32.lib
    14.  
    15. .data                        
    16. patch db "SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Interfaces\\",0
    17. data db "DhcpIPAddress",0
    18. namepkey db MAX_PATH dup (0)
    19. sz_buf dd sizeof MAX_PATH
    20.  
    21. .data?
    22.   phKey dd ?
    23.   newKey dd ?            
    24.   sizekey dd ?    
    25.   valuekey dd ?  
    26.   patch1 dd ?
    27.  
    28. .code
    29.     Start:        
    30. invoke RegOpenKeyEx, HKEY_LOCAL_MACHINE, ADDR patch, NULL, KEY_ALL_ACCESS, ADDR phKey          
    31. mov dwIndex, 0      
    32.  
    33. rec:          
    34. push sz_buf                      
    35. ;mov eax,offset patch
    36. ;mov patch1,eax
    37. invoke RegEnumKeyEx, phKey, dwIndex, addr namepkey, addr sz_buf,NULL,NULL,NULL,NULL  
    38. ;invoke MessageBox, NULL, addr namepkey, NULL, MB_OK      
    39. invoke lstrcat,ADDR patch, ADDR namepkey                              
    40. invoke RegOpenKeyEx, phKey, ADDR patch, NULL, KEY_ALL_ACCESS, ADDR newKey  
    41. ;invoke MessageBox, NULL, addr patch, NULL, MB_OK
    42. invoke RegQueryValueEx,newKey,addr data,0,0,NULL,addr sizekey
    43. invoke RegQueryValueEx,newKey,addr data,0,0,ADDR valuekey,addr sizekey            
    44.     pop sz_buf
    45.     inc dwIndex      
    46.     jmp rec
    47.      
    48. invoke MessageBox, NULL, addr valuekey, NULL, MB_OK
    49. invoke ExitProcess, 0
    50.     end Start
    Вопрос почему после вызова lstrcat меняется параметр namepkey на другой ( вобще на какуюто фигню )? Из за этого все идет на перекосяк.
     
  10. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    а отладчик что показывает?
     
  11. trust

    trust New Member

    Публикаций:
    0
    Регистрация:
    18 янв 2008
    Сообщения:
    49
    отладчик показывает что сразу же после вызова lstrcat в namepkey записывается другая строка. даже непонимаю откуда он берет ее. голова уже кругом идет.
     
  12. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Потому что имя ключа пишется в конец строки patch, а что у неё в конце, сам посмотри.

    Как выход: добавь ещё один буфер, скопируй в него начальное имя ключа (patch) и сохрани указатель на конец строки. При перечислении ключей будешь копировать полученное имя сразу в сохранённый указатель, получая полный путь.
     
  13. trust

    trust New Member

    Публикаций:
    0
    Регистрация:
    18 янв 2008
    Сообщения:
    49
    что то я запутался. если не трудно можно отрывочек кода. что надо сделать. заранее спасибо.
     
  14. trust

    trust New Member

    Публикаций:
    0
    Регистрация:
    18 янв 2008
    Сообщения:
    49
    это надо было сделать?:
    Код (Text):
    1. ...........
    2.  
    3. invoke RegEnumKeyEx, phKey, dwIndex, addr namepkey, addr sz_buf,NULL,NULL,NULL,NULL            
    4. ;invoke MessageBox, NULL, addr namepkey, NULL, MB_OK                                    
    5. lea edx, patch    
    6. lea eax, namepkey  
    7. invoke lstrcat, edx, eax                                  
    8. invoke RegOpenKeyEx, phKey, edx, NULL, KEY_ALL_ACCESS, ADDR newKey  
    9.  
    10. ............
    если да то, сделал все равно не работает. если я не так понял. запостите код. что именно надо сделать. плиз.
     
  15. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.348
    Код (Text):
    1. .data                        
    2. data db "DhcpIPAddress",0
    3. namepkey db MAX_PATH dup (0)
    4. sz_buf dd sizeof MAX_PATH
    5. patch db "SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Interfaces\\",0
    6. db MAX_PATH dup(0)
     
  16. trust

    trust New Member

    Публикаций:
    0
    Регистрация:
    18 янв 2008
    Сообщения:
    49
    еще продвинулся. все вродебы перечисляет. но. есть одно но
    вот код:
    Код (Text):
    1. .386
    2. .model flat, stdcall
    3. option casemap:none
    4.  
    5. include \masm32\include\windows.inc
    6. include \masm32\include\kernel32.inc
    7. includelib \masm32\lib\kernel32.lib
    8. include \masm32\include\user32.inc
    9. includelib \masm32\lib\user32.lib
    10. include \masm32\include\gdi32.inc
    11. includelib \masm32\lib\gdi32.lib      
    12. include \masm32\include\advapi32.inc
    13. includelib \masm32\lib\advapi32.lib
    14.  
    15. .data                        
    16. patch db "SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Interfaces\\",0 ;{A453EED3-1CD5-46E0-8111-E7FAA70A7EE0}          
    17. data db "DhcpIPAddress",0
    18. namepkey db 40 dup (0)
    19. sz_buf dd 40        
    20.  
    21. .data?
    22.   phKey dd ?
    23.   newKey dd ?            
    24.   sizekey dd ?    
    25.   valuekey dd ?    
    26.   dwIndex dd ?          
    27.   oldszbuf dd ?        
    28.   patch1 db ?      
    29.  
    30. .code
    31.     Start:        
    32. invoke RegOpenKeyEx, HKEY_LOCAL_MACHINE, ADDR patch, NULL, KEY_ALL_ACCESS, ADDR phKey          
    33. mov dwIndex, 0      
    34.  
    35. rec:          
    36. push sz_buf                  
    37. ;mov eax,offset patch
    38. ;mov patch1,eax
    39. invoke RegEnumKeyEx, phKey, dwIndex, addr namepkey, addr sz_buf,NULL,NULL,NULL,NULL            
    40. ;invoke MessageBox, NULL, addr namepkey, NULL, MB_OK                                    
    41. invoke lstrcpy, addr patch1, addr patch
    42. lea eax, namepkey  
    43. invoke lstrcat, addr patch1, eax                                  
    44. invoke RegOpenKeyEx, phKey, addr patch1, NULL, KEY_ALL_ACCESS, ADDR newKey  
    45. ;invoke MessageBox, NULL, addr patch, NULL, MB_OK
    46. invoke RegQueryValueEx,newKey,addr data,0,0,NULL,addr sizekey
    47. invoke RegQueryValueEx,newKey,addr data,0,0,ADDR valuekey,addr sizekey          
    48.  
    49. invoke MessageBox, NULL, addr valuekey, NULL, MB_OK    
    50. pop sz_buf        
    51.     inc dwIndex      
    52.     jmp rec    
    53. invoke ExitProcess, 0
    54.     end Start
    но после вызова этой функции invoke RegOpenKeyEx, phKey, eax, NULL, KEY_ALL_ACCESS, ADDR newKey поидее в newKey мы должны получить дескриптор. но я его не могу получить. в чем дело? параметры функции заданы верно. из-за этого ( что я не могу получить этот дескриптор ). ничего и не работает ( не получаю IP ). что делать? в чем загвоздка? всю голову сломал. заранее спасибо.
     
  17. trust

    trust New Member

    Публикаций:
    0
    Регистрация:
    18 янв 2008
    Сообщения:
    49
    всем спасибо. разобрался :)
     
  18. _sheva740

    _sheva740 New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2005
    Сообщения:
    1.539
    Адрес:
    Poland
    trust
    ну и чтоже было ? :)
     
  19. _sheva740

    _sheva740 New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2005
    Сообщения:
    1.539
    Адрес:
    Poland
    trust
    ну и чтоже было ? :)
    Я вот тоже не пойму, примеров натянул, все вроде правильно, но не идет что-то, не выдает IP почему-то
    Код (Text):
    1. #include <stdio.h>
    2. #include <windows.h>
    3.  
    4. int main(int argc, char *argv[])
    5. {
    6.     DWORD dwIndex = 0;
    7.     DWORD dwBufSize = 256;
    8.     DWORD dwDataType;
    9.     char szSubKey[256];
    10.     unsigned char szData[256];
    11.     char lpszTcpip_IPAddress[20];
    12.     char strKeyName[] = "SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Interfaces\\";
    13.     HKEY hKey;
    14.  
    15.  
    16.     if(RegOpenKeyEx(HKEY_LOCAL_MACHINE, strKeyName, 0, KEY_READ, &hKey)!= ERROR_SUCCESS) return FALSE;
    17.    
    18.     while(RegEnumKeyEx(hKey, dwIndex++, szSubKey, &dwBufSize, NULL, NULL, NULL, NULL) == ERROR_SUCCESS)
    19.     {
    20.         strcpy(szData, strKeyName);
    21.         strcat(szData, szSubKey );
    22.         dwBufSize = 256;
    23.         if(RegQueryValueEx(hKey, "IPAddress", 0, &dwDataType, (LPTSTR)lpszTcpip_IPAddress, &dwBufSize) == ERROR_SUCCESS);
    24.         printf("TCP/IP IPAddress : %s\n", lpszTcpip_IPAddress);
    25.     }
    26.     RegCloseKey(hKey);
    27.     return 0;
    28. }
    ... ветки (их пути) формируются правильно, а RegQueryValueEx() в lpszTcpip_IPAddress оставляет пусто ...
    ... что не так? помогите разглядеть пожалуйста ...
     
  20. trust

    trust New Member

    Публикаций:
    0
    Регистрация:
    18 янв 2008
    Сообщения:
    49
    _sheva740 я эту проблему решил так.... смотри у меня в примере был код:
    Код (Text):
    1. invoke lstrcat, addr patch1, eax                                  
    2. invoke RegOpenKeyEx, phKey, addr patch1, NULL, KEY_ALL_ACCESS, ADDR newKey  
    3. ;invoke MessageBox, NULL, addr patch, NULL, MB_OK
    4. invoke RegQueryValueEx,newKey,addr data,0,0,NULL,addr sizekey
    вмето phKey я передал HKEY_LOCAL_MACHINE вот код:
    Код (Text):
    1. invoke lstrcat, addr patch1, eax                                  
    2. invoke RegOpenKeyEx, HKEY_LOCAL_MACHINE, addr patch1, NULL, KEY_ALL_ACCESS, ADDR newKey  
    3. ;invoke MessageBox, NULL, addr patch, NULL, MB_OK
    4. invoke RegQueryValueEx,newKey,addr data,0,0,NULL,addr sizekey
    теперь IP отлично определяется ;)
    вот полный код:
    Код (Text):
    1. .386
    2. .model flat, stdcall
    3. option casemap:none
    4.  
    5. include \masm32\include\windows.inc
    6. include \masm32\include\kernel32.inc
    7. includelib \masm32\lib\kernel32.lib
    8. include \masm32\include\user32.inc
    9. includelib \masm32\lib\user32.lib
    10. include \masm32\include\gdi32.inc
    11. includelib \masm32\lib\gdi32.lib      
    12. include \masm32\include\advapi32.inc
    13. includelib \masm32\lib\advapi32.lib
    14.  
    15. .data                        
    16. patch db "SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Interfaces\\",0 ;{A453EED3-1CD5-46E0-8111-E7FAA70A7EE0}          
    17. data db "DhcpIPAddress",0
    18. namepkey db 40 dup (0)
    19. sz_buf dd 40        
    20. ip db "0.0.0.0",0
    21.  
    22. .data?
    23.   phKey dd ?
    24.   newKey dd ?            
    25.   sizekey dd ?    
    26.   valuekey dd ?    
    27.   dwIndex dd ?          
    28.   oldszbuf dd ?        
    29.   patch1 db ?      
    30.  
    31. .code
    32.     Start:        
    33. invoke RegOpenKeyEx, HKEY_LOCAL_MACHINE, ADDR patch, NULL, KEY_ALL_ACCESS, ADDR phKey          
    34. mov dwIndex, 0      
    35.  
    36. rec:          
    37. push sz_buf                  
    38. invoke RegEnumKeyEx, phKey, dwIndex, addr namepkey, addr sz_buf,NULL,NULL,NULL,NULL            
    39. invoke lstrcpy, addr patch1, addr patch
    40. lea eax, namepkey  
    41. invoke lstrcat, addr patch1, eax                                  
    42. invoke RegOpenKeyEx, HKEY_LOCAL_MACHINE, addr patch1, NULL, KEY_ALL_ACCESS, addr newKey  
    43. invoke RegQueryValueEx,newKey,addr data,0,0,NULL,addr sizekey
    44. invoke RegQueryValueEx,newKey,addr data,0,0,addr valuekey,addr sizekey          
    45. .IF eax == ERROR_SUCCESS        
    46.     jmp x
    47. .ENDIF    
    48. pop sz_buf        
    49.     inc dwIndex      
    50.     jmp rec          
    51.  
    52. x:      
    53. invoke RegCloseKey, newKey          
    54. invoke RegCloseKey, phKey
    55. invoke MessageBox, NULL, addr valuekey, NULL, MB_OK
    56. invoke ExitProcess, 0
    57.     end Start