;-ip.asm--------------------------------------------------------------------- ; x86 - Dos & Win32 - Assembly Language Programming ; ; ; ; Written by: John A Lyons (megablast) ; ; Email : asm@megablast.8k.com ; ; Page : http://asmsource.8k.com/ ; ; Compiler : Masm32 v6.13 Microsoft Macro Assembler ; ; Date : 18-Jul-2001 ; ; Purpose : Displays the current IP number of the machine. ; ; ; ;---------------------------------------------------------------------------- ; Compile with nmake .386 .MODEL FLAT , STDCALL include windows.inc include user32.inc include kernel32.inc include gdi32.inc include wsock32.inc includelib user32.lib includelib kernel32.lib includelib gdi32.lib includelib wsock32.lib .data ClassName db "SimpleWinClass",0 AppName db "Hello!",0 TestString db "Hello World",0 hInstance HINSTANCE ? CommandLine LPSTR ? hwnd HWND ? hdc dword ? .code WinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:SDWORD LOCAL wc:WNDCLASSEX LOCAL msg:MSG mov wc.cbSize,SIZEOF WNDCLASSEX mov wc.style, CS_BYTEALIGNWINDOW mov wc.lpfnWndProc, OFFSET WndProc mov wc.cbClsExtra,NULL mov wc.cbWndExtra,NULL push hInstance pop wc.hInstance mov wc.hbrBackground,COLOR_WINDOW+1 mov wc.lpszMenuName,NULL mov wc.lpszClassName,OFFSET ClassName invoke LoadIcon,NULL,IDI_APPLICATION mov wc.hIcon,eax mov wc.hIconSm,0 invoke LoadCursor,NULL,IDC_ARROW mov wc.hCursor,eax invoke RegisterClassEx, addr wc INVOKE CreateWindowEx,NULL,ADDR ClassName,ADDR AppName,\ WS_OVERLAPPEDWINDOW, CW_USEDEFAULT,CW_USEDEFAULT, 300,100, ;size NULL,NULL,\ hInst,NULL mov hwnd,eax INVOKE ShowWindow, hwnd,SW_SHOWNORMAL INVOKE UpdateWindow, hwnd .WHILE TRUE INVOKE GetMessage, ADDR msg,NULL,0,0 .BREAK .IF (!eax) INVOKE TranslateMessage, ADDR msg INVOKE DispatchMessage, ADDR msg .ENDW mov eax,msg.wParam ret WinMain endp WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM ;LOCAL hdc:HDC LOCAL ps:PAINTSTRUCT mov eax,uMsg .IF eax==WM_DESTROY invoke PostQuitMessage,NULL .ELSEIF eax==WM_PAINT invoke BeginPaint,hWnd, ADDR ps mov hdc,eax call IP2 ;invoke TextOut,hdc,0,0,ADDR TestString,(SIZEOF TestString) -1 invoke EndPaint,hWnd, ADDR ps .ELSE invoke DefWindowProc,hWnd,uMsg,wParam,lParam ret .ENDIF xor eax,eax ret WndProc endp IP2 proc uses ebx hWndWORD, ItemWORD LOCAL HostName[256]:BYTE LOCAL wsadata1:WSADATA invoke WSAStartup, 0101h, ADDR wsadata1 cmp eax,0 jne wsfail lea ebx,wsadata1 assume ebx: ptr WSADATA lea eax,[ebx].szDescription invoke TextOut,hdc,0,16,eax,256 ; --- Clear combobox items --- ;invoke SendDlgItemMessage, hWnd, Item, CB_RESETCONTENT, NULL, NULL ; --- Get hostname --- invoke gethostname, ADDR HostName, 256 cmp eax,0 jne wsfail ; --- Get hostent from hostname --- invoke gethostbyname, ADDR HostName mov ebx, eax ; --- ebx is now ptr to hostent struct --- assume ebx: ptr hostent mov eax, [ebx].h_list assume ebx: nothing mov ebx, eax ; --- ebx is now a pointer to an array of pointers to IP's 8-) --- ; .WHILE TRUE ; --- get next pointer from array in eax --- mov eax, [ebx] ; --- break if null terminator --- ; .BREAK .IF eax==0 ; --- get IP from pointer to IP --- mov eax, [eax] ; --- convert to string --- invoke inet_ntoa, eax ; --- add to list --- invoke TextOut,hdc,0,0,eax,15 ;invoke SendDlgItemMessage, hWnd, Item, CB_ADDSTRING, NULL, eax ; --- next pointer --- add ebx, 4 ; .ENDW wsfail: ret IP2 endp start: invoke GetModuleHandle, NULL mov hInstance,eax invoke GetCommandLine invoke WinMain, hInstance,NULL,CommandLine, SW_SHOWDEFAULT invoke ExitProcess,eax end start