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