首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Solaris -我的进程侦听所有接口,但侦听localhost上的其他进程:6011

Solaris -我的进程侦听所有接口,但侦听localhost上的其他进程:6011
EN

Stack Overflow用户
提问于 2011-09-29 12:50:59
回答 2查看 585关注 0票数 1

我的服务器程序被设计成在所有的接口上侦听,并且它也在工作。

一种奇怪的行为正在发生。这意味着端口冲突与sshd进程。因为我需要在同一个端口范围内进行应用程序和sshd侦听。(例如: 6000 - 6100)

MyProg代码:

代码语言:javascript
运行
复制
   MyPort = 6011;

   #if TARGET_HAS_IPV6_SUPPORT

   /* IPv6 socket */
   {

        struct addrinfo *ai = NULL;

        r = ipw_getaddrinfo("::", NULL, AF_INET6, SOCK_STREAM, IPPROTO_TCP, AI_PASSIVE, &ai);
        if (r == 0)
        {
          Create_listen_socket(&ai, IpcMyPort);
        }
    }
   #endif

    {
        struct addrinfo ailocal = { 0 };
        struct sockaddr_in sin = { 0 };

        sin.sin_family = AF_INET;
        sin.sin_addr.s_addr = htonl(INADDR_ANY);
        ailocal.ai_family = AF_INET;
        ailocal.ai_socktype = SOCK_STREAM;
        ailocal.ai_protocol = IPPROTO_TCP;
        ailocal.ai_flags = AI_PASSIVE;
        ailocal.ai_addrlen = sizeof(struct sockaddr_in);
        ailocal.ai_addr = (struct sockaddr *)&sin;
        Create_listen_socket(&ailocal, MyPort);
    }


Create_listen_socket(struct addrinfo *ai,
                     unsigned int MyPort)
{

    SOCKET fd = INVALID_SOCKET;

    while (ai != NULL)
    {
        fd = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol);
            if (fd == INVALID_SOCKET)
            {
                Exit()
                break;
            }

            switch (switch (sa->sa_family)
            {
                case AF_INET:
                {
                    struct sockaddr_in *sin = (struct sockaddr_in *)sa;
                    sin->sin_port = htons((unsigned short)port);
                }
                break;

                #if TARGET_HAS_IPV6_SUPPORT 
                case AF_INET6:
                {
                    struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *)sa;
                    sin6->sin6_port = htons((unsigned short)port);
                }
                break;

                #endif 
            }

            if (ipw_bind(fd, ai->ai_addr, ai->ai_addrlen) < 0)
            {

               exit();
               Break;
            }
            else
            {

                r = ipw_listen(fd, IPC_MAX_LISTEN_COUNT);
             }

        ai = ai->ai_next;
    }
}

以下是"sudo lsof -i -P _ grep :60“的输出

* ::

sshd 23038 fin22495 11u IPv4 0x60026f7c7400t0 TCP本地主机:6011(听)

myProg 23108根4u IPv6 0x60026e460000t0 TCP *:6011 (听)

myProg 23108根5u IPv4 0x6002658e0c0t0 TCP *:6011 (听录音)

如果您看到,sshd守护进程正在侦听同一端口6011,但侦听本地主机接口。但我的节目正在收听*.6011。

如何确保myProg侦听"localhost:6011“和*:6011,如果已经有进程侦听"localhost:6011”,如何检测它。它发生在Solaris。

请告诉我你的看法。

谢谢你,纳加

EN

回答 2

Stack Overflow用户

发布于 2011-09-30 09:01:33

我不知道你在这里做了什么,因为sshd通常应该监听端口22,而不是6011。打开端口的第一个进程将获得独占访问。这是有好的、与安全有关的原因。有关详细信息,请参阅tcp(7P)手册-查找SO_REUSEADDR和SO_EXECLBIND。

票数 1
EN

Stack Overflow用户

发布于 2011-09-30 10:33:38

--如果您看到,sshd守护进程正在监听同一端口6011,但位于本地主机接口上。但我的节目正在收听*.6011。

如何确保myProg侦听"localhost:6011“和*:6011,如果已经有进程侦听"localhost:6011”,如何检测它。它发生在Solaris。

您的应用程序的端口号与ssh X转发使用的端口冲突。更改您的端口号并完成此操作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7597583

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档