xinetd自定义服务中如何获取连接客户端的IP地址

高出埃及记

问题: xinetd(扩展 Internet 服务守护进程)将输入映射到服务的标准输入,将输出映射到服务的标准输出。

换句话说,假设一个用 C 编写的自定义 TCP 服务,进入端口X 的数据映射到服务的标准输入,服务的标准输出映射到端口Y 的数据

同样,假设一个用 C 编写的自定义 TCP 服务,该服务有没有办法确定连接客户端的 IP 地址?

网络研究:在发布此问题时,Stack Exchange(或其他地方)上没有其他问题专门处理用 C 编写的 xinetd TCP 服务,试图确定连接客户端的 IP 地址。

有类似的问题:

但是没有人回答这篇文章中详述的具体问题。

跟进注意: xinetd 获取与 TCP 端口X关联套接字描述符并将其映射到服务的标准输入。

认识到这一事实将允许进行更好的网络搜索,从而得到以下答案:

苔藓

是的,getpeername(2)在其 stdin (0) 或 stdout (1) 文件描述符上。

示例:当从xinetdor运行时inetd,这将打印连接到其标准输入的客户端的地址:

#define _DEFAULT_SOURCE
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/in.h>
#include <stdio.h>
#include <err.h>
#include <netdb.h>

int main(void){
        union {
                struct sockaddr a;
                struct sockaddr_in in;
                struct sockaddr_in6 in6;
        } na;
        char host[NI_MAXHOST], port[NI_MAXSERV]; int e;
        socklen_t nl = sizeof na;
        if(getpeername(0, &na.a, &nl)) err(1, "getpeername");
        if(e = getnameinfo(&na.a, nl, host, sizeof host, port, sizeof port,
                        NI_NUMERICHOST|NI_NUMERICSERV))
                errx(1, "getnameinfo: %s", gai_strerror(e));
        switch(na.a.sa_family){
        case AF_INET:
                errx(0, "connection from %s:%s", host, port);
        case AF_INET6:
                errx(0, "connection from [%s]:%s", host, port);
        default:
                errx(0, "connection from unknown address family %d",
                        na.a.sa_family);
        }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在Java中使用RESTful Web服务获取远程/客户端IP地址?

如何查找连接到服务器的客户端的IP地址?

获取Web服务客户端的IP地址

如何在Java中获取已连接客户端的主机名?

如何在Golang的UDP服务器上获取客户端ip地址?

如何向Perl中的Websocket的已连接客户端发送定期消息

如何在Roda中获取客户端的IP地址?

获取客户端添加的OpenSSL自定义扩展

如何使用LoadBalancer服务从Azure Kubernetes内部获取客户端IP地址

如何在身份服务器4中获取客户端的远程IP地址

在python套接字编程中建立连接后,如何获取客户端的ip地址?

如何使用aiohttp获取客户端的IP地址

如何在Aqueduct Dart服务器中获取客户端请求的IP地址

我如何在python服务器上获取客户端IP地址

如何获取连接到Websocket服务器的所有客户端的“真实” IP地址

如何获取客户端的本地IP地址和代理服务器

如何使用php获取客户端公共IP地址?

如何显示在nginx服务器上运行的网站的已连接客户端数?

如何在Struts2 / Servlet中从Apache Web服务器获取客户端IP地址?

如何获取正在访问您的Web服务的客户端的IP地址?

在ASMX Web服务上获取客户端的IP地址

需要在我的客户端连接EditText中填写服务器的IP地址

如果使用HTTPS,如何获取客户端的IP地址?

在ASP.net MVC Signal R中连接客户端服务器

如何在UDP无连接客户端中的固定端口上运行客户端程序-Java中的服务器对

连接客户端服务器Java

检查PHP套接字服务器中的断开连接客户端

通过 OpenVPN 隧道保留连接客户端的 IP 地址

如何在next.js应用程序中从服务器端获取客户端的IP地址?