Например для inet_addr - обратная функция inet_ntoa. Есть ли что-нить подобное для htons? А то написал маленький port-scaner, а получить список открытых портов не получается. Вот код сканера, может что подскажите, посиба заранее! Код (Text): .data sin sockaddr_in <?> ws WSADATA <?> _port byte 512 dup(0) ConThrBuf byte 1024 dup (?) _port_ dd ? .code ConThr proc local sock:dword invoke socket,2,1,0 mov dword ptr [sock],eax inc eax jz a_exit invoke connect,dword ptr [sock],offset sin,sizeof sin inc eax jz a_next ; invoke inet_ntoa, dword ptr [sin.sin_port] ; mov _port_,eax invoke lstrcat,offset _port,_port_ invoke lstrcat,offset _port,$CTA0(', ') a_next:invoke closesocket,dword ptr [sock] ret ConThr endp start: invoke WSAStartup,00000101h,offset ws inc eax jz a_exit mov word ptr [sin.sin_family],02h invoke inet_addr,$CTA0("10.5.16.190") mov dword ptr [sin.sin_addr],eax mov edx,1 mov ecx,1000 @@:push ecx push edx invoke htons,edx mov word ptr [sin.sin_port],ax invoke CreateThread,0,0,offset ConThr,0,0,offset ConThrBuf invoke CloseHandle,offset ConThr invoke Sleep,10 pop edx inc edx pop ecx dec ecx jnz @B a_exit:invoke WSACleanup invoke MessageBox,0,offset _port,$CTA0("порты"),0 invoke ExitProcess,0 end start
Я вить правильно делаю? Код (Text): invoke connect,dword ptr [sock],offset sin,sizeof sin inc eax jz a_next invoke ntohs,word ptr [sin.sin_port] mov _port_,eax invoke lstrcat,offset _port,_port_ invoke lstrcat,offset _port,$CTA0(', ')
Вот мой способ,без добавления htons в таблицу импорта Код (Text): mov ebx,[port] ; } bswap ebx ; } htons by x-sgg shr ebx,16 ; }
Songoku, спасибо, твой код очень помог. всё работает, и даже на 1 секунду быстрее чем x-port, написанный умелцами xfocus.org ) Может кому понадобится.. Код (Text): .586 .model flat,stdcall option casemap:none include \masm32\include\windows.inc include \masm32\include\user32.inc includelib \masm32\lib\user32.lib include \masm32\include\kernel32.inc includelib \masm32\lib\kernel32.lib include \masm32\include\wsock32.inc includelib \masm32\lib\wsock32.lib include \masm32\macros\strings.mac .data sin sockaddr_in <?> ws WSADATA <?> _port byte 512 dup(0) ConThrBuf byte 1024 dup (?) szPort db 16 dup(0) .code ConThr proc local sock:dword invoke socket,2,1,0 mov dword ptr [sock],eax inc eax jz a_exit invoke connect,dword ptr [sock],offset sin,sizeof sin inc eax jz a_next mov ebx,dword ptr [sin.sin_port] bswap ebx shr ebx,16 push ebx push $CTA0('%i') push offset szPort call wsprintfA invoke lstrcat,offset _port,offset szPort invoke lstrcat,offset _port,$CTA0(', ') a_next:invoke closesocket,dword ptr [sock] ret ConThr endp start: invoke WSAStartup,00000101h,offset ws inc eax jz a_exit mov word ptr [sin.sin_family],02h invoke inet_addr,$CTA0("10.5.16.190") mov dword ptr [sin.sin_addr],eax mov edx,1 mov ecx,1030 @@:push ecx push edx mov ebx,edx bswap ebx shr ebx,16 mov word ptr [sin.sin_port],bx invoke CreateThread,0,0,offset ConThr,0,0,offset ConThrBuf invoke CloseHandle,offset ConThr invoke Sleep,1 pop edx inc edx pop ecx dec ecx jnz @B a_exit:invoke WSACleanup invoke MessageBox,0,offset _port,$CTA0("открытые порты"),0 invoke ExitProcess,0 end start