Stuart McLachlan
stuart at lexacorp.com.pg
Wed Sep 15 18:47:48 CDT 2004
On 15 Sep 2004 at 18:55, Steve Conklin (Developer at UltraDNT) wrote: > I am using WDSI, WinInet and various API's to get 2 Access applications > to send data to each other over FTP. It is working well, but I want the > server to be secure, that is to only allow logins/files to come from > specific IP's. This is ok when I am sending, because I know my IP, and I > tell the client to allow my IP. When I (hopefully) sell a copy to the > client's client, how can they easily determine their IP? > I have looked at the Winsock API and can get remote IP's via Host Name. > However, when I want to get the IP of the local PC, it returns the > 192.168.x.x address; how can I get the external IP that the FTP server > needs to know through VB/API? > If you are working through a router, you can't since only the router knows the external address.. The only way would be to bounce an HTML request of an external website and read the return data. There a numbder of freeware tools available on the web that do just that. See http://www.snapfiles.com/freeware/network/fwip.html for examples If you're machine is directly connected to the Internet, you can iterate through it's IP adddresses. Here's a module to do it (watch for linewrap) Option Compare Database Option Explicit Const MAX_IP = 5 'To make a buffer... i dont think you have more than 5 ip on your pc.. Type IPINFO dwAddr As Long ' IP address dwIndex As Long ' interface index dwMask As Long ' subnet mask dwBCastAddr As Long ' broadcast address dwReasmSize As Long ' assembly size unused1 As Integer ' not currently used unused2 As Integer '; not currently used End Type Type MIB_IPADDRTABLE dEntrys As Long 'number of entries in the table mIPInfo(MAX_IP) As IPINFO 'array of IP address entries End Type Type IP_Array mBuffer As MIB_IPADDRTABLE BufferLen As Long End Type Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long) Public Declare Function GetIpAddrTable Lib "IPHlpApi" (pIPAdrTable As Byte, pdwSize As Long, ByVal Sort As Long) As Long Public Function ConvertAddressToString(longAddr As Long) As String Dim myByte(3) As Byte Dim Cnt As Long CopyMemory myByte(0), longAddr, 4 For Cnt = 0 To 3 ConvertAddressToString = ConvertAddressToString + CStr(myByte(Cnt)) + "." Next Cnt ConvertAddressToString = Left$(ConvertAddressToString, Len(ConvertAddressToString) - 1) End Function Public Function IPAddresses() As Long Dim lngRetVal As Long Dim lngLoop As Long Dim bBytes() As Byte Dim IPList As MIB_IPADDRTABLE GetIpAddrTable ByVal 0&, lngRetVal, True If lngRetVal <= 0 Then Exit Function ReDim bBytes(0 To lngRetVal - 1) As Byte 'retrieve the data GetIpAddrTable bBytes(0), lngRetVal, False 'Get the first 4 bytes to get the entry's.. ip installed CopyMemory IPList.dEntrys, bBytes(0), 4 For lngLoop = 0 To IPList.dEntrys - 1 'Copy whole structure to Listing.. CopyMemory IPList.mIPInfo(lngLoop), bBytes(4 + (lngLoop * Len(IPList.mIPInfo(0)))), Len(IPList.mIPInfo(lngLoop)) Debug.Print "IP address : " & ConvertAddressToString(IPList.mIPInfo(lngLoop).dwAddr) Debug.Print "IP Subnetmask : " & ConvertAddressToString(IPList.mIPInfo(lngLoop).dwMask) Debug.Print "BroadCast IP address : " & ConvertAddressToString(IPList.mIPInfo(lngLoop).dwBCastAddr) Debug.Print "**************************************" Next End Function -- Stuart