Hi there,
below is a tiny sample for WSAIoctl. Prg should show all active
interface IP with broadcast and subnet mask. Tested on NT4.
rgds
Ralph
------------------
below is a tiny sample for WSAIoctl. Prg should show all active
interface IP with broadcast and subnet mask. Tested on NT4.
rgds
Ralph
Code:
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' ipTest.bas ' get list of all active ip adapters ' based on MS intrfc.cpp - implified mem handling #DIM ALL #COMPILE EXE #OPTION VERSION4 #REGISTER NONE #INCLUDE "win32api.inc" #INCLUDE "wsock32.inc" DECLARE FUNCTION WSASocket LIB "ws2_32.dll" ALIAS "WSASocketA" (BYVAL af AS LONG, BYVAL ltype AS LONG, BYVAL protocol AS LONG, lpProtocolInfo AS DWORD, BYVAL g AS DWORD, BYVAL dwFlags AS DWORD) AS DWORD DECLARE FUNCTION WSAIoctl LIB "ws2_32.dll" ALIAS "WSAIoctl" (s AS DWORD, BYVAL dwIoControlCode AS DWORD, BYVAL lpvInBuffer AS DWORD, BYVAL cbInBuffer AS DWORD, BYVAL lpvOutBuffer AS DWORD, BYVAL cbOutBuffer AS DWORD, _ lpcbBytesReturned AS DWORD, lpOverlapped AS DWORD, BYVAL lpCompletionRoutine AS DWORD) AS LONG FUNCTION ip2str ( BYVAL s_in AS STRING ) AS STRING IF LEN(s_in) <> 4 THEN FUNCTION = "0.0.0.0" EXIT FUNCTION END IF FUNCTION = FORMAT$(ASC(LEFT$(s_in,1))) + "." + _ FORMAT$(ASC(MID$(s_in,2,1))) + "." + _ FORMAT$(ASC(MID$(s_in,3,1))) + "." + _ FORMAT$(ASC(RIGHT$(s_in,1))) END FUNCTION %SIO_GET_INTERFACE_LIST = &H4004747F %INTERFACE_RECLEN = 76 FUNCTION doit() AS LONG LOCAL sd AS DWORD LOCAL nBytesReturned AS DWORD LOCAL i AS LONG LOCAL lerr AS LONG LOCAL lReturn AS LONG LOCAL nNumInterfaces AS INTEGER LOCAL sDisplay AS STRING LOCAL sBuff AS STRING * 760 '' allow max 10 interfaces sd = WSASocket(%AF_INET, %SOCK_DGRAM, 0, BYVAL 0, 0, 0) IF sd = %SOCKET_ERROR THEN EXIT FUNCTION lReturn = WSAIoctl(BYVAL sd, %SIO_GET_INTERFACE_LIST, 0, 0, VARPTR( sBuff ), _ LEN(sBuff), nBytesReturned, BYVAL 0, BYVAL 0 ) lerr = WSAGetLastError() IF lreturn = %SOCKET_ERROR THEN MSGBOX "lReturn " + $TAB + STR$( lreturn ) + $CRLF + "lerr " + $TAB + STR$( lerr ),,"WSAIoctl" EXIT FUNCTION END IF nNumInterfaces = INT( nBytesReturned / %INTERFACE_RECLEN ) sDisplay = "There are " + STR$( nNumInterfaces ) + " interfaces" + $CRLF FOR i = 0 TO nNumInterfaces-1 sDisplay = sDisplay + ip2str( MID$(sBuff, i * %INTERFACE_RECLEN + 9, 4) ) sDisplay = sDisplay + " has bcast " + ip2str( MID$(sBuff, i * %INTERFACE_RECLEN + 33, 4) ) sDisplay = sDisplay + " and netmask " + ip2str( MID$(sBuff, i * %INTERFACE_RECLEN + 57, 4) ) + $CRLF NEXT i MSGBOX sDisplay FUNCTION = %true END FUNCTION FUNCTION PBMAIN() LOCAL WinsockData AS WSADATA LOCAL nRetVal AS LONG IF WSAStartup( MAKDWD( 2, 2 ), WinsockData) <> 0 THEN MSGBOX "Failed to find Winsock 2.2!" EXIT FUNCTION END IF nRetVal = doit() WSACleanup FUNCTION = nRetVal END FUNCTION
Comment