簡體   English   中英

獲取套接字對等IPS Linux

[英]Get socket peer IPS linux

在我的linux c ++應用程序中,我想編寫一個函數帽子,如果套接字對等體是本地的,它將檢查給定套接字。 我知道如何檢索所有本地IP,但是我不知道如何檢查套接字對等方是否來自本地IPS列表。

有什么幫助嗎? 請輸入密碼!

10倍

您正在尋找套接字對等方的getpeername() 在套接字的本地端使用getsockname() 以下代碼段將檢索Internet域中的套接字本地和對等地址。 如果需要的話,我會把它留給您擴展以處理其他類型的套接字。 我還提供了一些基本的錯誤檢查作為獎勵。

int
get_addresses(int sd, struct sockaddr_in *local_ptr,
              struct sockaddr_in *peer_ptr)
{
    int rc = -1;
    if (local_ptr == NULL || peer_ptr == NULL) {
        errno = EFAULT;
        return rc;
    }
    if (sd == -1) {
        errno = EBADF;
        return rc;
    }
    if (local_ptr->sin_family != AF_INET || peer_ptr->sin_family != AF_INET) {
        errno = EINVAL;
        return rc;
    }

    rc = getsockname(sd, (struct sockaddr*)local_ptr,
                     sizeof(struct sockaddr_in));
    if (rc == 0) {
        rc = getpeername(sd, (struct sockaddr*)local_ptr,
                         sizeof(struct sockaddr_in));
        if (rc < 0) {
            if (errno == ENOTCONN) {
                /* socket is not connected so zero out the peer side */
                peer_ptr->sin_len = sizeof(struct sockaddr_in);
                peer_ptr->sin_family = AF_INET;
                peer_ptr->sin_port = 0;
                peer_ptr->sin_addr.s_addr = INADDR_NONE;
                rc = 0;
            }
        }
    }
    return rc;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM