Results 1 to 5 of 5

Thread: Can someone help me out with these 2 problems?

  1. #1

    Thread Starter
    Join Date
    Jun 2000



    I am trying to make an FTP server. I am having some problems
    with this, however. Actually I have 2 problems at this time.

    My first problem is (really a math problem I guess):

    When a client connects it sends the PORT command to establish a data socket connection. Now, the client
    sends it's IP and the port it's listening on in a format
    that I don't understand: it sends a string like:

    PORT 102,32,69,120,15,208

    where the first 4 numbers (102,32,69 and 120) form the
    IP address, and the last 2 (15,208) from the port.

    Now, how do I find out what the port number is?

    perhaps these hints will help:

    The argument is a HOST-PORT specification for the data port
    to be used in data connection. There are defaults for both
    the user and server data ports, and under normal
    circumstances this command and its reply are not needed. If
    this command is used, the argument is the concatenation of a
    32-bit internet host address and a 16-bit TCP port address.
    This address information is broken into 8-bit fields and the
    value of each field is transmitted as a decimal number (in
    character string representation). The fields are separated
    by commas. A port command would be:
    PORT h1,h2,h3,h4,p1,p2

    where h1 is the high order 8 bits of the internet host address.

    My 2nd question should be easier:

    If I'm listening on a port and someone connects, then how do I find out the IP of the person connecting?

    I hope someone can help me out here,
    Thanks in advance,


  2. #2
    Fanatic Member gwdash's Avatar
    Join Date
    Aug 2000
    my binary math skills are not very good, but if p1 is the "high region" (above 8-bit), then take (in your example)

    Dim lowpart As Byte, highpart As Byte, fullpart As Long
    lowpart = 208 'p2
    highpart = 15 'p1
    fullpart = (highpart * 256) + lowpart
    This may be completly wrong, but i'm not sure. I've done this before, once (adding a 4-bit binary number to a 8-bit binary number
    [b]VB6, Perl, ASP, HTML, JavaScript, VBScript, SQL, C, C++, Linux , Java, PHP, MySQL, XML[b]

  3. #3

    Thread Starter
    Join Date
    Jun 2000
    Thank you for your reply.
    You were right; someone else told me (as well) that:

    Port = (p1 * 256) + p2

    p1 = port/256
    p2 = port And 255

  4. #4
    Fanatic Member
    Join Date
    Jun 1999
    California, USA
    You must be connected to the person to get their ip address. It is stored in the RemoteIP property of the Winsock control that is connected. If you're doing this through code, I have no idea.

  5. #5

    Thread Starter
    Join Date
    Jun 2000
    Well, I *think* I got it;

    What I am using now gives my an IP, unfortunatly
    when I connect it tells me the IP = ""
    which is my local IP, not my real IP.
    I just hope that it will work when other people connect
    to the server.

    What I use is:

    ToDo = getpeername(Csock, sADDR, Len(sADDR))
    ToDo = sADDR.sin_addr
    mRemoteIP = lngIPtoStrIP(ToDo)

    Public Function lngIPtoStrIP(ByVal longip As Long) As String

    Dim dotted As String
    Dim i As Long
    Dim tval As Long

    If longip < 0 Then
    tval = 255
    longip = longip + 1
    End If

    For i = 1 To 3
    dotted = dotted + CStr((longip Mod 256) + tval) + "."
    longip = Fix(longip \ 256)

    dotted = dotted + CStr(longip + tval)
    lngIPtoStrIP = dotted

    End Function

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts

Click Here to Expand Forum to Full Width