Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Socket : Connexion refused

9 réponses
Avatar
Michel SIMIAN
Bonjour,

J'avais écrit 2 bout de prog C qui, l'un, serveur, créait
une socket() plus bind() plus listen() plus accept()
et l'autre client, qui créait une socket() + connect().
sur un port libre (20500)

Sans souci sur mon Linux 2.0.36 (SuSE 7.3)

Depuis, je l'ai ressorti et mes Debian (linux 2.4 ou 2.6)
me répondent un connexion refused lorsque le client est
distant.

En fait, lorsque le serveur est sur la vieille babasse,
ça passe.
Dès qu'il se trouve sur l'une des récentes, ça refuse.

Après avoir exploré les man des appels systèmes, puis les
howto networking, je vois pas qui bloque, et pourquoi.

C'est réellement un problème de config (et pas de langage C).

Quelqu'un a une idée ?

--
L'Amer Michel

9 réponses

Avatar
Nicolas George
Michel SIMIAN wrote in message
<44803839$0$20186$:
Quelqu'un a une idée ?


Fais les mêmes essais avec des outils éprouvés comme netcat ou socat,
d'abord des deux côtés, puis seulement de l'un, puis seulement de l'autre.

Avatar
Thierry Danis
Michel SIMIAN wrote:
Bonjour,

J'avais écrit 2 bout de prog C qui, l'un, serveur, créait
une socket() plus bind() plus listen() plus accept()
et l'autre client, qui créait une socket() + connect().
sur un port libre (20500)

Sans souci sur mon Linux 2.0.36 (SuSE 7.3)

Depuis, je l'ai ressorti et mes Debian (linux 2.4 ou 2.6)
me répondent un connexion refused lorsque le client est
distant.

En fait, lorsque le serveur est sur la vieille babasse,
ça passe.
Dès qu'il se trouve sur l'une des récentes, ça refuse.

Après avoir exploré les man des appels systèmes, puis les
howto networking, je vois pas qui bloque, et pourquoi.

C'est réellement un problème de config (et pas de langage C).

Quelqu'un a une idée ?



Ne serait-ce pas une configuration iptable un peu
restrictive ?
A+,
--
Thierry

Avatar
Michel SIMIAN
Thierry Danis wrote:
Michel SIMIAN wrote:


C'est réellement un problème de config (et pas de langage C).

Quelqu'un a une idée ?



Ne serait-ce pas une configuration iptable un peu
restrictive ?


voila le résultat d'iptable :

michel1:/home/michel# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination

Chain FORWARD (policy ACCEPT)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination
michel1:/home/michel#

Donc, je ne pense pas. Qui peut interdire la connexion
d'une socket _avant_ mon petit programme ?

il n'y a pas de host.deny, pas de host.allow
(et ils ne sontr utilisés que par inetd, me semble t-il)

--
L'Amer Michel


Avatar
Calimero
Michel SIMIAN wrote:

Donc, je ne pense pas. Qui peut interdire la connexion
d'une socket _avant_ mon petit programme ?


Comme dit, le netcat a donné quoi ?

D'autre part (même si les infos que tu donnes ne suggèrent pas ca), on
est d'accord que tu utilises un port > 1024 si tu exécutes ton serveur
en tant que non-root ?

--
@+
Calimero

Avatar
Michel SIMIAN
Calimero wrote:
Michel SIMIAN wrote:

Donc, je ne pense pas. Qui peut interdire la connexion
d'une socket _avant_ mon petit programme ?



Comme dit, le netcat a donné quoi ?


michel1:/home/michel# nc -v 192.168.0.246 20500
michel2 [192.168.0.246] 20500 (sovkipeu) : Connection refused
michel1:/home/michel#

L'option -o ne génère pas de traces (fichier vide)

D'autre part (même si les infos que tu donnes ne suggèrent pas ca), on
est d'accord que tu utilises un port > 1024 si tu exécutes ton serveur
en tant que non-root ?



oui (20500)

quels seraient les fichiers de conf network qui protégeraient
(et qui seraient différents entre la vieille SuSE et les Debian )
--
L'Amer Michel


Avatar
vincent.verdon
Bonjour,

Thierry Danis wrote:

il n'y a pas de host.deny, pas de host.allow
(et ils ne sontr utilisés que par inetd, me semble t-il)
Moi je crois bien que si !


Amicalement, Vincent Verdon

Avatar
octane
J'avais écrit 2 bout de prog C qui, l'un, serveur, créait
une socket() plus bind() plus listen() plus accept()
et l'autre client, qui créait une socket() + connect().
sur un port libre (20500)

Sans souci sur mon Linux 2.0.36 (SuSE 7.3)

Depuis, je l'ai ressorti et mes Debian (linux 2.4 ou 2.6)
me répondent un connexion refused lorsque le client est
distant.

cela veut dire que sur un noyau recent, ca passe en

localhost?

En fait, lorsque le serveur est sur la vieille babasse,
ça passe.


client sur noyau recent et serveur sur noyau ancien -> OK

Dès qu'il se trouve sur l'une des récentes, ça refuse.

client sur noyau recent, et serveur sur noyau recent -> KO?

un netstat -n -l te montre le port 20500 en LISTEN?

Après avoir exploré les man des appels systèmes, puis les
howto networking, je vois pas qui bloque, et pourquoi.

C'est réellement un problème de config (et pas de langage C).

Quelqu'un a une idée ?

Pour la config:

cote serveur:
nc -l -p 20500

cote client:
echo "ca passe" | nc IP_DU_SERVEUR 20500

Si ca coince, ton programme n'est pas en cause.
Si ca passe, c'est ta config qui est en cause.

Avatar
Michel SIMIAN
wrote:
cela veut dire que sur un noyau recent, ca passe en
localhost?


oui


client sur noyau recent, et serveur sur noyau recent -> KO?
un netstat -n -l te montre le port 20500 en LISTEN?


J'ai une ligne

tcp 0 0 127.0.0.1:20500 [.../..] listen

quand le serveur est sur accept().


Pour la config:
cote serveur:
nc -l -p 20500

cote client:
echo "ca passe" | nc IP_DU_SERVEUR 20500

Si ca coince, ton programme n'est pas en cause.
Si ca passe, c'est ta config qui est en cause.

le serveur affiche "CA PASSE" :)

le client reste bloqué, c'est normal ?

Donc, config en cause. Mais quoi ?
Est-ce la même raison qui me refuse telnet par exemple ?

--
L'Amer Michel

Avatar
octane
client sur noyau recent, et serveur sur noyau recent -> KO?
un netstat -n -l te montre le port 20500 en LISTEN?


J'ai une ligne

tcp 0 0 127.0.0.1:20500 [.../..] listen

donc ca n'ecoute _que_ sur 127.0.0.1


Sur un noyau ancien, tu n'as pas:
*:20500 ?
(l'etoile signifiant que ca ecoute sur toutes les interfaces)

quand le serveur est sur accept().
Pour la config:
cote serveur:
nc -l -p 20500

verifie par un netstat -n -a que le port 20500 est bien en LISTEN


pour * et pas 127.0.0.1 seulement.

cote client:
echo "ca passe" | nc IP_DU_SERVEUR 20500

Si ca coince, ton programme n'est pas en cause.
Si ca passe, c'est ta config qui est en cause.

le serveur affiche "CA PASSE" :)

le client reste bloqué, c'est normal ?

oui. Un Ctrl-C pour lui signaler la fin de transmission.


Donc, config en cause. Mais quoi ?


Il n'y a pas eu du changement dans la prog systeme
qui specifie de devoir ecouter les interfaces sur lesquelles
on veut ecouter lorsqu'on lance un serveur?

Est-ce la même raison qui me refuse telnet par exemple ?

tout pareil. telnet, nc, meme combat.