1 votes

Impossible de se lier à aucun port (Devuan)

J'ai récemment rencontré des problèmes pour établir un tunnel SSH. Il s'est avéré que ni Apache ni Nginx ne se lient à aucun port (même en tant que root et/ou en dehors de la plage <1024). À partir de aquí J'ai obtenu un petit programme de test (juste en dessous Exemple de code (ma version avec les résultats ci-dessous), en espérant pouvoir trouver l'erreur. Cependant, en exécutant ./server 6789 y ./client localhost 6789 (dans deux terminaux sur la même machine) ne donne aucune erreur. Il n'y a simplement pas de connexion, donc server blocs dans accept() :

Server:
socket().
bzero().
htons().
bind().
listen().

Client:
socket().
gethostbyname().
bzero().
bcopy().
htons().
ERROR connecting: Connection timed out

Les déclarations de sortie sont les miennes. Ce sont les seules choses que j'ai modifiées, elles sont imprimées après chaque commande réussie.

Apache et Nginx se comportent de la même manière, vous ne pouvez simplement pas vous connecter au serveur. Cependant, avec SSH, il y a une erreur :

$ ssh -4 -vvv -NL 5901:"$server":5901 "$user@$server"
[...]
debug1: Authentication succeeded (publickey).
Authenticated to <server> ([<ip>]:22).
debug1: Local connections to LOCALHOST:5901 forwarded to remote address <server>:5901
debug3: channel_setup_fwd_listener_tcpip: type 2 wildcard 0 addr NULL
debug1: Local forwarding listening on 127.0.0.1 port 5901.
bind: Cannot assign requested address
channel_setup_fwd_listener_tcpip: cannot listen to port: 5901
Could not request local forwarding.
debug2: fd 3 setting TCP_NODELAY
debug3: ssh_packet_set_tos: set IP_TOS 0x10
debug1: Requesting no-more-sessions@openssh.com

(Sans -4 le résultat est légèrement différent mais fondamentalement le même).

Anki se comporte de la même manière :

$ anki
Exception in thread Thread-1:
Traceback (most recent call last):
  File "threading.py", line 916, in _bootstrap_inner
  File "aqt/mediasrv.py", line 57, in run
  File "socketserver.py", line 453, in __init__
  File "aqt/mediasrv.py", line 38, in server_bind
  File "socketserver.py", line 467, in server_bind
OSError: [Errno 99] Cannot assign requested address

Vous avez une idée de ce qui se passe ici ou de la façon dont je pourrais trouver l'erreur ?

Avec Devuan Jessie, cela a fonctionné, ainsi que sur un autre PC exécutant Devuan ASCII. J'ai déjà vérifié s'il ne manquait pas un paquet qui est présent sur les autres installations, mais je n'ai rien trouvé qui semble pertinent (je dispose de netbase ).

Merci !

server.cpp :

/* A simple server in the internet domain using TCP
   The port number is passed as an argument */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h> 
#include <sys/socket.h>
#include <netinet/in.h>

void error(const char *msg)
{
    perror(msg);
    exit(1);
}

int main(int argc, char *argv[])
{
    puts("Server:");
    int sockfd, newsockfd, portno;
    socklen_t clilen;
    char buffer[256];
    struct sockaddr_in serv_addr, cli_addr;
    int n;
    if (argc < 2) {
        fprintf(stderr,"ERROR, no port provided\n");
        exit(1);
    }
    sockfd = socket(AF_INET, SOCK_STREAM, 0);
    if (sockfd < 0) 
        error("ERROR opening socket");
    puts("socket().");
    bzero((char *) &serv_addr, sizeof(serv_addr));
    puts("bzero().");
    portno = atoi(argv[1]);
    serv_addr.sin_family = AF_INET;
    serv_addr.sin_addr.s_addr = INADDR_ANY;
    serv_addr.sin_port = htons(portno);
    puts("htons().");
    if (bind(sockfd, (struct sockaddr *) &serv_addr,
             sizeof(serv_addr)) < 0) 
        error("ERROR on binding");
    puts("bind().");
    listen(sockfd,5);
    puts("listen().");
    clilen = sizeof(cli_addr);
    newsockfd = accept(sockfd, 
                (struct sockaddr *) &cli_addr, 
                &clilen);
    if (newsockfd < 0) 
        error("ERROR on accept");
    puts("accept().");
    bzero(buffer,256);
    n = read(newsockfd,buffer,255);
    if (n < 0) error("ERROR reading from socket");
    printf("Here is the message: %s\n",buffer);
    n = write(newsockfd,"I got your message",18);
    if (n < 0) error("ERROR writing to socket");
    close(newsockfd);
    close(sockfd);
    return 0; 
}

client.cpp :

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h> 

void error(const char *msg)
{
    perror(msg);
    exit(0);
}

int main(int argc, char *argv[])
{
    puts("Client:");

    int sockfd, portno, n;
    struct sockaddr_in serv_addr;
    struct hostent *server;

    char buffer[256];
    if (argc < 3) {
       fprintf(stderr,"usage %s hostname port\n", argv[0]);
       exit(0);
    }
    portno = atoi(argv[2]);
    sockfd = socket(AF_INET, SOCK_STREAM, 0);
    if (sockfd < 0) 
        error("ERROR opening socket");
    puts("socket().");
    server = gethostbyname(argv[1]);
    if (server == NULL) {
        fprintf(stderr,"ERROR, no such host\n");
        exit(0);
    }
    puts("gethostbyname().");
    bzero((char *) &serv_addr, sizeof(serv_addr));
    puts("bzero().");
    serv_addr.sin_family = AF_INET;
    bcopy((char *)server->h_addr, 
         (char *)&serv_addr.sin_addr.s_addr,
         server->h_length);
    puts("bcopy().");
    serv_addr.sin_port = htons(portno);
    puts("htons().");
    if (connect(sockfd,(struct sockaddr *) &serv_addr,sizeof(serv_addr)) < 0) 
        error("ERROR connecting");
    printf("Please enter the message: ");
    bzero(buffer,256);
    fgets(buffer,255,stdin);
    n = write(sockfd,buffer,strlen(buffer));
    if (n < 0) 
         error("ERROR writing to socket");
    bzero(buffer,256);
    n = read(sockfd,buffer,255);
    if (n < 0) 
         error("ERROR reading from socket");
    printf("%s\n",buffer);
    close(sockfd);
    return 0;
}

1voto

philipp2100 Points 21

La sortie de ip addr show lo indiquait que l'interface de bouclage ne fonctionnait pas, donc une réparation rapide était

sudo ifup lo

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X