1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.

  2. Anuncie Aqui ! Entre em contato fdantas@4each.com.br

Mostrando IP _ Host

Discussão em 'Progress 4GL' iniciado por FernandaSantos, Janeiro 27, 2009.

  1. FernandaSantos

    FernandaSantos Membro Participativo

    Com o código abaixo é possível obter o Endereço de IP e HostName da máquina do usuário:
    Código:
    &SCOPED-DEFINE WSADATA_LENGTH           403   
    &SCOPED-DEFINE HOSTENT_ADDR_LIST         13 
    
    def var hostName as char no-undo.
    def var ip       as char no-undo.
    
    run i-getTcpInfo (output hostName , output ip).
    
    MESSAGE "HostName : " hostName SKIP(1)
            "IP ...............: " IP     
        VIEW-AS ALERT-BOX INFO BUTTONS OK.
    
    PROCEDURE i-GetTcpInfo:
    
    DEFINE OUTPUT PARAMETER p-TcpName      AS CHARACTER NO-UNDO.
    DEFINE OUTPUT PARAMETER p-TcpAddr      AS CHARACTER NO-UNDO.
    
    DEFINE VARIABLE         w-TcpName      AS CHARACTER NO-UNDO.
    DEFINE VARIABLE         w-LENGTH       AS INTEGER   NO-UNDO.
    DEFINE VARIABLE         w-RETURN       AS INTEGER   NO-UNDO.
    DEFINE VARIABLE         ptr-WsaData    AS MEMPTR    NO-UNDO.
    DEFINE VARIABLE         w-Hostent      AS INTEGER   NO-UNDO.
    DEFINE VARIABLE         ptr-Hostent    AS MEMPTR    NO-UNDO.
    DEFINE VARIABLE         ptr-AddrString AS MEMPTR    NO-UNDO.
    DEFINE VARIABLE         ptr-AddrList   AS MEMPTR    NO-UNDO.
    DEFINE VARIABLE         ptr-ListEntry  AS MEMPTR    NO-UNDO.
    DEFINE VARIABLE         w-TcpLong      AS INTEGER   NO-UNDO.
    
    ASSIGN p-TcpName = ?
         p-TcpAddr = ?.
    
    SET-SIZE(ptr-WsaData) = {&WSADATA_LENGTH}.
    
    RUN WSAStartup (INPUT  257,
                  INPUT  GET-POINTER-VALUE(ptr-WsaData),
                  OUTPUT w-RETURN).
    
    SET-SIZE(ptr-WsaData) = 0.
    
    IF w-RETURN NE 0 THEN DO:
    MESSAGE "Error accessing WINSOCK support." VIEW-AS ALERT-BOX.
    RETURN.
    END.
    
    ASSIGN w-LENGTH  = 100
         w-TcpName = FILL(" ", w-LENGTH).
    
    RUN gethostname (OUTPUT w-TcpName,
                   INPUT  w-LENGTH,
                   OUTPUT w-RETURN).
    
    IF w-RETURN NE 0 THEN DO:
    MESSAGE "Error getting tcp name." VIEW-AS ALERT-BOX.
    RUN WSACleanup (OUTPUT w-RETURN).
    RETURN.
    END.
    
    p-TcpName = ENTRY(1,w-TcpName,CHR(0)).
    
    RUN gethostbyname (INPUT  w-TcpName,
                     OUTPUT w-Hostent).
    
    IF w-Hostent EQ 0 THEN DO:
    MESSAGE "Error resolving host name." VIEW-AS ALERT-BOX.
    RUN WSACleanup (OUTPUT w-RETURN).
    RETURN.
    END.
    
    SET-POINTER-VALUE(ptr-Hostent) = w-Hostent.
    
    SET-POINTER-VALUE(ptr-AddrList)  = GET-LONG(ptr-Hostent, {&HOSTENT_ADDR_LIST}).
    SET-POINTER-VALUE(ptr-ListEntry) = GET-LONG(ptr-AddrList, 1).
    w-TcpLong                        = GET-LONG(ptr-ListEntry, 1).
    
    RUN inet_ntoa (INPUT  w-TcpLong,
                 OUTPUT ptr-AddrString).
    
    p-TcpAddr = GET-STRING(ptr-AddrString, 1).
    
    RUN WSACleanup (OUTPUT w-RETURN).
     
    END PROCEDURE.
    
    PROCEDURE gethostname EXTERNAL "wsock32.dll" :
      DEFINE OUTPUT       PARAMETER p-Hostname      AS CHARACTER.
      DEFINE INPUT        PARAMETER p-LENGTH        AS LONG.
      DEFINE RETURN       PARAMETER p-RETURN        AS LONG.
    END PROCEDURE.
     
    PROCEDURE gethostbyname EXTERNAL "wsock32.dll" :
      DEFINE INPUT        PARAMETER p-NAME          AS CHARACTER.
      DEFINE RETURN       PARAMETER p-Hostent       AS LONG.
    END PROCEDURE.
     
    PROCEDURE inet_ntoa EXTERNAL "wsock32.dll" :
      DEFINE INPUT        PARAMETER p-AddrStruct    AS LONG.
      DEFINE RETURN       PARAMETER p-AddrString    AS MEMPTR.
    END PROCEDURE.
     
    PROCEDURE WSAStartup EXTERNAL "wsock32.dll" :
      DEFINE INPUT        PARAMETER p-VersionReq    AS SHORT.
      DEFINE INPUT        PARAMETER ptr-WsaData     AS LONG.
      DEFINE RETURN       PARAMETER p-RETURN        AS LONG.
    END PROCEDURE.
     
    PROCEDURE WSACleanup EXTERNAL "wsock32":
      DEFINE RETURN       PARAMETER p-RETURN        AS LONG.
    END PROCEDURE.
    Abb,

    Fernanda

Compartilhe esta Página