Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 这不是问题吗?在这种特殊情况下(暂时忘掉其他情况),您认为操作系统如何知道客户端试图连接到哪个IP地址?如果操作系统不知道你要访问的IP地址,你怎么能指望它工作呢?@johnleonardonwuzuruigbo举个例子:假设你在街对面没有朝两边看就被车撞_C_Unix_Firewall - Fatal编程技术网

C 这不是问题吗?在这种特殊情况下(暂时忘掉其他情况),您认为操作系统如何知道客户端试图连接到哪个IP地址?如果操作系统不知道你要访问的IP地址,你怎么能指望它工作呢?@johnleonardonwuzuruigbo举个例子:假设你在街对面没有朝两边看就被车撞

C 这不是问题吗?在这种特殊情况下(暂时忘掉其他情况),您认为操作系统如何知道客户端试图连接到哪个IP地址?如果操作系统不知道你要访问的IP地址,你怎么能指望它工作呢?@johnleonardonwuzuruigbo举个例子:假设你在街对面没有朝两边看就被车撞,c,unix,firewall,C,Unix,Firewall,这不是问题吗?在这种特殊情况下(暂时忘掉其他情况),您认为操作系统如何知道客户端试图连接到哪个IP地址?如果操作系统不知道你要访问的IP地址,你怎么能指望它工作呢?@johnleonardonwuzuruigbo举个例子:假设你在街对面没有朝两边看就被车撞了。你会说,“这不可能是因为我没有朝两边看。我在穿过客厅之前没有朝两边看,也没有被车撞到。我在穿过草坪之前没有朝两边看,也没有被车撞到。”@Davide Schwartz,我按照你的建议做了,但仍然没有工作。我还在接通REFUSED@johnl


这不是问题吗?在这种特殊情况下(暂时忘掉其他情况),您认为操作系统如何知道客户端试图连接到哪个IP地址?如果操作系统不知道你要访问的IP地址,你怎么能指望它工作呢?@johnleonardonwuzuruigbo举个例子:假设你在街对面没有朝两边看就被车撞了。你会说,“这不可能是因为我没有朝两边看。我在穿过客厅之前没有朝两边看,也没有被车撞到。我在穿过草坪之前没有朝两边看,也没有被车撞到。”@Davide Schwartz,我按照你的建议做了,但仍然没有工作。我还在接通REFUSED@johnleonardonwuzuruigbo那么,现在,这不是原因。假设你做得正确,我们无法判断,因为我们看不到代码。如果你想检查
errno
(直接或间接地通过例如
peror
),你需要在函数失败后立即进行检查。如果您使用任何其他可能设置
errno
(可能间接设置
printf
)的函数,则
errno
的值未定义。首先,您确定防火墙已打开吗?在你的规则之前可能有其他规则阻止这一点?确保的一种方法(也许您是iptables方面的专家,但只是为了确保…)是在该端口上设置其他内容并进行测试。如果这样做有效,那么您可以确定问题出在您的代码中。我只是在你添加了防火墙规则之后才提出这个问题,听起来问题可能在那里或者代码中。设置netcat“Web服务器”是一种测试方法。运行:netcat-l5001hostip[0]是一个数字,则您不设置
dest.sin\u addr
。假设在这种情况下,
hostip
是一个IP地址,则不需要为此调用
getaddrinfo
。就用吧。另外,在另一种情况下,您不应该真正使用
strncpy
,因为数据实际上不是字符串。@FSDaniel当我运行netcat-l 5001errno(直接或间接地通过
perror
)您需要在函数失败后立即进行检查。如果您使用任何其他可能设置
errno
(可能间接设置
printf
)的函数,则
errno
的值未定义。首先,您确定防火墙已打开吗?在你的规则之前可能有其他规则阻止这一点?确保的一种方法(也许您是iptables方面的专家,但只是为了确保…)是在该端口上设置其他内容并进行测试。如果这样做有效,那么您可以确定问题出在您的代码中。我只是在你添加了防火墙规则之后才提出这个问题,听起来问题可能在那里或者代码中。设置netcat“Web服务器”是一种测试方法。运行:netcat-l5001hostip[0]是一个数字,则您不设置
dest.sin\u addr
。假设在这种情况下,
hostip
是一个IP地址,则不需要为此调用
getaddrinfo
。就用吧。另外,在另一种情况下,您不应该真正使用
strncpy
,因为数据实际上不是字符串。@FSDaniel当我运行netcat-l 5001int main() { int fd, i,svclient,rval,msg; int clients[10], num_clients; fd_set read_set,write_set; char buf[100]; struct sockaddr_in addr; if ( (fd = socket(AF_INET, SOCK_STREAM, 0)) == -1) { perror("socket error"); exit(-1); } bzero((char *) &addr, sizeof(addr)); addr.sin_family = AF_INET; addr.sin_addr.s_addr = INADDR_ANY; addr.sin_port = htons(4001); //strncpy(addr.sun_path, socket_path, sizeof(addr.sun_path)-1); //strcpy(addr.sun_path, NAME); if (bind(fd, (struct sockaddr*)&addr, sizeof(addr)) == -1) { perror("bind error"); exit(-1); } printf("Bind complet...\n"); if (listen(fd, 20) == -1) { perror("listen error"); exit(-1); } num_clients = 0; int size = sizeof(fd); while (1) { int clientfd; struct sockaddr_in client_addr; int addrlen=sizeof(client_addr); FD_ZERO(&read_set); FD_SET(fd, &read_set); for (i = 0; i < num_clients; i++) { //at first this part will not excute FD_SET(clients[i], &read_set); } select(fd + num_clients + 1, &read_set, NULL, NULL, NULL); if (FD_ISSET(fd, &read_set)) { if ( (clients[num_clients++] = accept(fd,(struct sockaddr*)&client_addr,&addrlen)) == -1) { perror("accept error"); continue; } /*printf("incoming message..................... !\n \n");*/ printf("%s:%d connected\n", inet_ntoa(client_addr.sin_addr), ntohs(client_addr.sin_port)); } for (i = 0; i < num_clients; i++) { if (FD_ISSET(clients[i], &read_set)) { msg = read(clients[i], buf, sizeof(buf)); if(msg > 0){ buf[msg] = 0; int savedclnt = clients[i]; printf("%s \n \n", buf); /*for(int p=0;p<num_clients;p++) { if( clients[p]!= savedclnt){ write(clients[p],buf,msg); } }*/ } } } } }
    int main( )
{   

    struct uci_context *uci;
    uci = uci_init();
    int sockfd;
    int ret;
    struct sockaddr_in dest;
    struct addrinfo hint, *res = NULL;
    struct hostent *host;
    char *hostip;
    char *string;



    if ( (sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0 )
    {
        puts("Unble to create socket");
        exit(1);
    }

    hostip = ucix_get_option(uci, "pack_mon", "pack_monitoring", "address");
    string = ucix_get_option(uci, "pack_mon", "pack_monitoring", "port");

    bzero(&dest, sizeof(dest));
    dest.sin_family = AF_INET;
    dest.sin_port = htons(atoi(string));

    memset(&hint, '\0', sizeof hint);
    hint.ai_family = PF_UNSPEC;
    hint.ai_flags = AI_NUMERICHOST;

    printf(" %s- %s\n", hostip, string );



    if(isdigit(hostip[0])){
        ret = getaddrinfo(hostip, NULL, &hint, &res);// this is more efficient than inet_addr

        if (ret) {

            exit(1);
        }
    }else if( (host = gethostbyname(hostip)) != 0){

        memcpy((char*)&dest.sin_addr , (char*)host->h_addr , (sizeof dest.sin_addr)+1);

    }else{

        exit(1);
        printf("cannot resolve ip address");
    }  


    if ( connect(sockfd, (struct sockaddr *)&dest, sizeof(dest)) < 0 )
    {

        perror("ERROR Connecting" );
        exit(1);
    }else{

        printf("Port number %s is open.....\n",string);
    }


    char *message;
    message = "help";
    write(sockfd,message,strlen(message));


    close(sockfd);
    freeaddrinfo(res);
    return 0;
}
    strncpy((char*)&dest.sin_addr , (char*)host->h_addr , sizeof dest.sin_addr);
    printf("%d\n", connect(sockfd, (struct sockaddr *)&dest, sizeof(dest)) < 0);
    perror("hmmmm" );
    exit(1);