Requêtes Javascript à distance vers Serveur Local

Fermé
Eliam - Modifié le 23 janv. 2020 à 11:00
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 - 20 févr. 2020 à 09:36
Bonjour,

J'ai à disposition un serveur local programmé en C (https://pastebin.com/7zrBq9Sx) ainsi qu'un userscript qui interragit avec celui-ci. L'idée globale étant qu'à chaque exécution de mon userscript, une requête soit envoyée au serveur qui se charge de récupérer des données pour les stocker dans un fichier txt (https://i.goopics.net/GDRO1.png.

Si cela fonctionne parfaitement sur mon PC, ce n'était pas le cas quand j'utilisais un autre PC chez moi ou hors de chez moi.

Je n'y connait pas grand chose mais je me suis essayé à la résolution de ce problème, d'abord en autorisant les requêtes entrantes pour les profils publics via la configuration de mon pare feu, qui initialement étaient bloquées (https://i.goopics.net/ADylw.png. Résultat, cela fonctionne maintenant quand j'utilise un autre PC chez moi, mais toujours pas quand je ne suis pas chez moi.

Impossible de trouver une solution depuis, même en ayant essayé de désactivé temporairement mon pare feu.

Désolé d'avance si je ne suis pas très clair, c'est déjà assez flou dans ma tête, mais je suis totalement disponible pour essayer de répondre à vos questions si besoin de précision.


Merci,
Eliam

Configuration: Windows / Chrome 79.0.3945.117
A voir également:

4 réponses

Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
Modifié le 23 janv. 2020 à 10:16
Bonjour,

Je vais essayer de résumer simplement le fonctionnement des réseaux.
Pour que deux ordinateurs communiquent ensemble, ils doivent :
1 - se trouver ;
2 - se comprendre.

L'adresse IP permet de se trouver. Classiquement, il y a deux niveau : l'IP publique et, derrière cette IP publique, des IP privées internes au sous-réseau.
Tu peux voir ça comme les portes de ton appartement : tu as une porte d'entrée, publique, celle où n'importe qui peut venir sonner. Et derrière, tu as ta chambre, ton salon, etc. Si tu commandes un colis, le livreur te l'amène à la porte d'entrée, il n'a pas besoin de savoir si ton colis est destiné à ta chambre ou ton salon : ça, c'est toi qui gère.
Avec les IP, c'est pareil : tant que tu es dans ton appartement, tu peux aller « dans le salon » sans devoir t'assurer que tu es bien chez toi d'abord. Le salon c'est 192.168.1.8. Par contre si tu fait venir quelqu'un, tu ne lui dis pas « viens dans le salon » sans d'abord lui dire « viens chez moi, j'habite au 58 rue Bidule ».

Pour se comprendre, les ordinateurs ont besoin de parler le même « langage ». On parle de protocole. Chaque programme peut utiliser son protocole propre. Du coup, si ton ordinateur reçoit un message, il doit savoir quel est le programme qui pourra comprendre ce message. Par exemple, une requête FTP ne pourra pas être comprise par un serveur web qui n'attend que des requêtes HTTP(s).
C'est là que le port intervient : quand on reçoit un message, il y a un numéro de port indiqué. Le message sera donc relayé à l'application qui est en train d'écouter sur ce port. Certains ports sont conventionnels : 80 pour HTTP, 443 pour HTTPS, 21 pour FTP, et plein d'autres. Mais fondamentalement, c'est chaque programme qui, lorsqu'il attend une requête, va réserver un de ces numéros de port pour lui. Si on veut écouter sur le port 8888, on peut, à condition qu'un autre programme ne soit pas déjà en train de le faire. Quand on veut faire une requête http sur un port spécifique, on le note :port après l'adresse ip, comme ça : http://adr.es.se.IP:8888.

Pour reprendre l'analogie de l'appartement, c'est un peu comme le nom du destinataire sur l'adresse d'une lettre. On a livré une lettre mais elle est adressée à ton colocataire : tu la récupères, mais tu ne l'ouvres pas, il s'en chargera lui-même. De toutes façons comme il ne parle qu'Ouzbèque, tu ne comprendrais rien.

Donc !
Pour en revenir à tes questions.

- Oui il faut mettre l'adresse de ta box. C'est la porte d'entrée chez toi. Par contre, non, il ne s'agit pas de son adresse MAC qui est autre chose.
Pour connaître l'IP publique de ta box, tu peux consulter le site https://www.whatismyip.com/ quand tu es chez toi. Tout en haut tu trouveras un texte du genre
My Public IPv4 is: 123.124.125.126
. C'est cette adresse qui est connue depuis l'extérieur.
Attention toutefois, suivant les fournisseurs d'accès, cette IP peut changer de temps en temps...

- Le port : dans ton code source, on peut voir
    int port = 80;
. Ton serveur fait maison écoute donc bien sur le port standard du http, le port 80. Donc dans la configuration de ta box, le port de destination doit être le même, 80. Ou ce que tu veux, tant que ces deux valeurs restent les mêmes.
Pour le port entrant (« port externe » dans ta capture d'écran), c'est là encore un peu ce que tu veux. Si tu appelles http://ton.adr.ess.ip/, c'est par défaut le port 80. Mais si tu préfères que ce soit le port 4444, pas de problème : tu mets 4444 dans cette case, et tu appelleras ton serveur comme ça : http://ton.adr.ess.ip:4444/.

Ouf ! J'espère avoir été clair et avoir répondu à tes questions :)

Bonne journée,

Xavier
1
Merci tout d'abord pour cette vulgarisation précise ! C'est déjà grandement plus clair :)

Voici l'exhaustivité de ce que j'ai fait :

- Remplacement de mon adresse IP locale (192.168.1.XX) par mon IP public (obtenue sur https://www.whatismyip.com) dans la procédure fetch. (ajouter ":80" est-il nécessaire ou facultatif dans ce cas ?)
- Dans la section DHCP/Adresse Statique, j'ai ajouté mon adresse IP locale (anciennent dans le fetch et qui correspond donc à ma machine).
- Dans la section NAT, j'ai ajouté les 2 redirections (Nom / TCP,UDP / Port / 80 / 192.168.1.XX (toujours la même) / 80) => https://i.goopics.net/KJNdK.png

Si cela fonctionne toujours sur mon PC, cela ne fonctionne malheureusement toujours pas quand j'utilise un PC hors de chez moi (à noter que j'ai fait le test via la 4G de mon tel ce soir, ce qui je l'espère revient au même), j'obtiens l'erreur suivante :

POST http://XX.XX.XX.XX/ net::ERR_CONNECTION_RESET
SERVER OFF (Failed to fetch)


Peut être une erreur et/ou un oubli dans mes changements ?
0
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011 > Eliam
23 janv. 2020 à 10:47
Si tu restes sur 80, il est facultatif, c'est le port par défaut des requêtes http://
A priori tu peux supprimer la redirection UDP, seule la TCP est utile pour du http://

Ça devrait marcher... Il faut peut-être redémarrer ta box pour que les changements soient pris en compte ?

(Et, oui, la 4G c'est hors réseau local, donc c'est un bon test)
0
Eliam > Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021
12 févr. 2020 à 23:17
Bonsoir,

Désolé pour le délai d'attente, je n'ai pas eu l'occasion de me replonger sur le sujet depuis la dernière fois.

Malheureusement, cela ne fonctionne toujours pas, aucun problème quand je suis connecté à mon WIFI mais le message d'erreur s'affiche dès que je passe en 4G.
0
Eliam > Eliam
19 févr. 2020 à 22:48
Je me permets une petite relance, n'ayant toujours pas trouvé de solution à mon problème.
0
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011 > Eliam
20 févr. 2020 à 09:36
Difficile de savoir, à distance :-/
Tu pourrais essayer de lancer une commande traceroute, pour voir où ça bloque, mais tous les noeuds du réseau n'y répondent pas...
À tout hasard : tracert <adresse_ip>
En remplaçant <adresse_ip> par ton ip de destination, bien sûr.

Tu peux aussi essayer d'ouvrir un navigateur et de mettre, en URL, cette même adresse IP et voir quel message d'erreur tu obtiens.
Après ça, mes compétences réseau arriveront à leur max...
0
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
22 janv. 2020 à 11:30
Bonjour,

J'imagine que chez toi, tu as un réseau local avec des adresses IP en 192.168.x.x.
Ces IPs ne sont valides que derrière ta box.

Pour qu'un appel extérieur puisse atteindre ton PC derrière ta box, il faut que tu utilises l'IP de ta box sur Internet, et que ta box soit configurée pour rediriger les appels qu'elle reçoit vers ton serveur.
La marche à suivre pour faire cette configuration dépend de ton fournisseur d'accès, mais généralement tu as une page web qui le permet (celle-là même où tu définis ton mot de passe wi-fi et autres options...). Il faut chercher quelque chose comme « configuration NAT », « port forwarding » ou « options routeur »...

Xavier
0
Merci pour ta réponse !

Je suis chez SFR et ai eu l'occas de me rendre sur la page de configuration que tu décris (http://192.168.1.1).

Bien reçu en tout cas, je testerai tout ça ce soir !
0
Alors, si j'ai bien saisi, je dois :

- Remplacer, dans ma procédure fetch, l'adresse IP de mon PC par celle de ma box (adresse MAC ?).
- Configurer une redirection vers mon serveur sur cette page web (NAT) => https://i.goopics.net/KJN1m.png ?

Si c'est bien le cas, à quoi correspondent les ports externes et ceux de destination (mon serveur ?) ?
0
C'est noté, je m'en chargerait à mon retour demain soir et vous tiendrait au courant :)
0