Partage
  • Partager sur Facebook
  • Partager sur Twitter

portForwarding|NAT|TCP/IP|java|modem mobile

communication impossible

    24 avril 2018 à 18:15:57

    Bonjour ! 

    Je souhaite créer un serveur et un client (codes à la fin) et les faire communiquer sans qu'ils ne soient dans le même réseau local.
    Il me semble que mon problème est une question de port forwarding mais j'aimerais confirmation et aide s'il vous plaît.

    Je m'explique : 
    J'ai deux ordinateurs RAINBOW et FLUTTER
    J'ai deux modem 4G (téléphones portables car en entreprise j'avais peur d'être bloquée par le réseau complexe)
    J'ai mes adresses locales sur chacun des reseaux
    J'ai les Adresses publiques de mes modems grâce à https://www.whatismyip.com/  (voir EDIT)

    Lorsque les deux PC sont sur le même routeur mon serveur et mon client communiquent parfaitement (vias leurs adresses locales)
    MAIS 
    Lorsque chaque PC a son modem propre il m'est impossible de communiquer de l'un à l'autre (en passant par les adresses publiques et le port)

    J'ai cru voir que la solution serait le portforwarding et une NAT serait-ce ça ? Comment l’implémenter ?
    De plus j'ai bien tenté juste de pinger le modem de FLUTTER (adresse publique) depuis RIANBOW et réciproquement mais rien ne passe...

    Sauriez-vous ce qu'il me manque pour relier mes deux réseaux ? 
    Merci d'avance

    EDIT : les adresses que je perçois comme publiques ne seraient que des adresses reliés à des NAT opérateur et donc un port forwarding ne suffirait pas d'après https://android.stackexchange.com/questions/168422/how-to-port-forward-internet-using-android-hotspot-to-pc

    EDIT2 : D'un réseau mobile à un réseau domestique ça fonctionne, la  modification de la NAT était donc bien nécessaire pour le réseau du serveur (domestique), malheureusement mon travail n'est pas chez moi ==> nouvelle question : Est il possible d'obtenir l'adresse publique d'un routeur mobile et d'appliquer à ce routeur un port forwarding ??

    Serveur.java

    import java.io.*;
    import java.net.*;
    
    public class Serveur {
    
    	public static void main(String[] zero) {
    
    		ServerSocket socketserver  ;
    		Socket socketduserveur ;
    		BufferedReader in;//buffer d'entrée
    		PrintWriter out;//buffer sortie
    
    		String message_distant="init";
    
    		try {
    
    
    			System.out.println("\tServeur local host :  "+InetAddress.getLocalHost());
    			
    			//crée une prise sur le port 6501 rend l'écoute possible
    			socketserver = new ServerSocket(6501);
    			System.out.println("\t\tLe serveur est à l'écoute du port "+socketserver.getLocalPort());
    
    			
    			//branche, bloquant
    			socketduserveur = socketserver.accept(); 
    			System.out.println("\t\tconnecté");
    			
    			
    			//cree buffer entre&sortie && branche aux input output stream
    			out = new PrintWriter(socketduserveur.getOutputStream());
    			in = new BufferedReader (new InputStreamReader (socketduserveur.getInputStream()));
    
    			
    			while (!message_distant.equals("shutdown")) {
    
    				System.out.println("\t\tstrcmp : "+message_distant.equals("shutdown"));
    				//lecture + affiche buff entré
    				message_distant = in.readLine();
    				System.out.println("\t\t Lu "+message_distant);
    
    				//envoi + clear 
    				out.println("\t\t echo : "+message_distant);
    				out.flush();
    			}
    
    			socketduserveur.close();
    			socketserver.close();
    
    			System.out.println("\t\tsocket serveur fermé");
    
    		}catch (IOException e) {
    
    			e.printStackTrace();
    		}
    	}
    
    }
    
    

    Client.java

    import java.io.*;
    
    import java.net.*;
    import java.util.Scanner;
    
    
    
    public class Client {
    
    	public static final String RAINBOW_TEL = "192.168.X.Y";
    	public static final String FLUTTER_TEL = "192.168.X.Z";
    	public static final String TEL = "77.136.J.K";
    	public static final String AMINE = "37.173.L.M";
    	public static final int PORT= 6501;
    
    	public static void main(String[] zero) {
    
    
    
    		Socket socketduClient ;
    		BufferedReader in;//buffer d'entrée
    		PrintWriter out;//buffer sortie
    		Scanner sc;
    		String SaisieClav="init";
    		String message_distant=null;
    
    
    
    		try {
    
    			
    			InetAddress addr = InetAddress.getByName(FLUTTER_TEL);//ip à rejoindre
    			System.out.println("connection");
    			System.out.println("client : "+addr);
    
    			//Cree et connecte a l'hote mentionné, au port mentionné
    			socketduClient = new Socket(addr,PORT);
    			System.out.println("connecté");
    
    
    			//cree buffer entre&sortie && branche aux input output stream
    			out = new PrintWriter(socketduClient.getOutputStream());
    			in = new BufferedReader (new InputStreamReader (socketduClient.getInputStream()));
    
    			//créé le lecteur clavier
    			sc = new Scanner(System.in);
    
    
    			while (!SaisieClav.equals("shutdown")) {
    
    				//System.out.println("strcmp : "+SaisieClav.equals("shutdown"));
    				//lecture clavier
    				SaisieClav = sc.nextLine();
    				//envoi + clear
    				out.println(SaisieClav);
    				out.flush();
    				//Lecture Echo
    				message_distant = in.readLine();
    				System.out.println(message_distant);
    			}
    
    			socketduClient.close();
    			System.out.println("socket client fermé");
    
    		}catch (IOException e) {
    			e.printStackTrace();
    
    		}
    
    	}
    
    
    
    }
    
    
    
    
    

    -
    Edité par MarineC1 24 avril 2018 à 21:36:15

    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      24 avril 2018 à 18:48:31

      Salut,

      Donc tes modem, ce sont des téléphones portables en partage de co'?

      • Partager sur Facebook
      • Partager sur Twitter
        25 avril 2018 à 8:33:53

        Salut

        Oui c'est bien ça mais du coup je n'ai pas encore trouvé comment ouvrir les ports.... Après il s'agit d'une solution temporaire pour les testes, plus tard je m'attaquerai a un réseau en dur.

        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          25 avril 2018 à 13:01:05

          Je ne sais pas si sur Android, c'est possible de base (et sur tout les téléphones). A mon avis, tu passes par un routeur de l'opérateur avant d'aller sur internet ( vu que tu es sur le réseau de ton opérateur). Et vu que tu n'as pas la main sur ce routeur, tu ne peux pas toucher à la NAT.

          Cependant, pourquoi ne pas virtualiser ou simuler un réseau directement, sur un pc? Comme ça tu as la main sur tout le réseau et les équipements.

          • Partager sur Facebook
          • Partager sur Twitter
            27 avril 2018 à 10:58:45

            Androïd étant un linux, iptables est présent par défaut. Il suffit de se mettre en SSH sur le téléphone et de configurer iptables pour la redirection de ports je pense.
            • Partager sur Facebook
            • Partager sur Twitter
              27 avril 2018 à 11:02:37

              Ca me semble plus pratique que laisser le serveur à la maison en effet mais dans le cas de la virtualisation est-ce que je pourrais accéder à mon serveur depuis partout ou est ce que je n'aurais fait que rajouter un étage de routage entre moi et les routeurs que je peut pas modifier?
              • Partager sur Facebook
              • Partager sur Twitter
              Anonyme
                27 avril 2018 à 12:44:23

                elalitte a écrit:

                Androïd étant un linux, iptables est présent par défaut. Il suffit de se mettre en SSH sur le téléphone et de configurer iptables pour la redirection de ports je pense.

                Le problème c'est que sur smartphone il faut rooter pour pouvoir accéder au compte root.

                Et ça ne change pas le fait qu'en 4G on est derrière le routeur de l'opérateur non ? Avec certaines clé 3G/4G, on a la possibilité de rediriger certains ports vers sa clé, mais je doute que ce soit faisable avec un simple abonnement téléphonique.

                -
                Edité par Anonyme 27 avril 2018 à 12:47:05

                • Partager sur Facebook
                • Partager sur Twitter
                  27 avril 2018 à 18:00:47

                  Si je virtualise un réseau sur mon ordinateur n'aurais-je pas toujours le problème d'être en dessous du réseau de mon entreprise qui lui est inchangeable ?

                  Rooter mon téléphone en soit n'est pas un problème, la définition des ports ouvert est elle sur le téléphone ou sur la carte sim ?

                  • Partager sur Facebook
                  • Partager sur Twitter
                  Anonyme
                    27 avril 2018 à 19:34:12

                    MarineC1 a écrit:

                    Si je virtualise un réseau sur mon ordinateur n'aurais-je pas toujours le problème d'être en dessous du réseau de mon entreprise qui lui est inchangeable ?

                    Je proposais ça pour tester que tes scripts fonctionnent.

                    Sinon, oui, mais de toute façon, si tu souhaites accéder à une machine de ton entreprise depuis le WAN, tu dois utiliser le réseau de ton entreprise. La, en gros, t'essaye d'installer une porte dérobée sur le réseau de ton entreprise. Et c'est rarement autorisé ^^ (pour de bonnes raisons).

                    Le mieux est d'en parler avec l’administrateur du réseau. Le laisser en dehors de ça, c'est une mauvaise idée. Et lui devrait pouvoir t'aider à faire ça proprement.

                    MarineC1 a écrit:

                    Rooter mon téléphone en soit n'est pas un problème, la définition des ports ouvert est elle sur le téléphone ou sur la carte sim ?

                    Le problème est un peu le même qu'avec celui de ton entreprise. Quand tu utilises la 4G pour te connecter à internet, tu es sur un réseau privé ( celui de ton opérateur). Pour schématiser grossièrement, tu as une machine A connecté à ton téléphone qui sert de point d'accès. Ton téléphone utilise la 4G, il est relié à un routeur de ton opérateur qui lui est relié au WAN:

                    Machine A --- Téléphone --- Routeur Opérateur --- WAN

                    Tu dois passer par ton opérateur pour faire du port forwarding. Cependant, je doute que ce soit possible avec une simple forfait mobile. Je sais qu'avec certaines clé 3G/4G tu peux faire du port forwarding par contre.

                    Sinon, utiliser ton téléphone sur Android comme un routeur, c'est possible. C'est comme utiliser n'importe quelle distribution Linux.

                    • Partager sur Facebook
                    • Partager sur Twitter
                      30 avril 2018 à 18:28:46

                      Pourles deux questions c'est bien ce qui me semblait, ce qui ne m'arrange pas, pour l'instant mes scriptes fonctionnent bien en local.


                      Comment ça utiliser mon téléphone comme routeur ? Je viens juste de commencer à chercher mais je ne trouve que comment l'utiliser en modem.

                      En tout cas merci pour les réponses.

                      -
                      Edité par MarineC1 30 avril 2018 à 18:29:29

                      • Partager sur Facebook
                      • Partager sur Twitter
                      Anonyme
                        1 mai 2018 à 0:45:44

                        A ma connaissance, tu ne peux pas utiliser un téléphone comme un modem pour rendre accessible une machine du LAN depuis le WAN ( cf. ce que j'ai dit au dessus). Après je ne travaille pas pour des opérateurs téléphoniques, et je ne pourrais pas te dire si certaines offres de forfait mobiles le permettent.

                        Pour ce qui est d'utiliser un téléphone Android comme un routeur, ou comme un modem du LAN vers le WAN, c'est comme pour n'importe quelle machine Linux ( cf. le cours d'elalitte sur les réseaux TCP/IP). Mais t'iras pas vraiment plus loin que l'option partage de connexion pré-configurée sur ton téléphone au final.

                        Sinon, une solution à ton problème serait d'inverser le rôle client-server. Plutôt que d'essayer de te connecter à la machine inaccessible depuis le WAN vers le LAN, c'est cette machine qui se connecte à toi pour demander des instructions. Cependant, il faut qu'elle sache à quoi se connecter et définir la fréquence à laquelle elle essaie. Par contre, je pense toujours que c'est pas le genre de chose à faire sur une machine professionnelle sans accord de l'administrateur ( après, tu fais ce que tu veux ;) ).

                        -
                        Edité par Anonyme 1 mai 2018 à 0:53:14

                        • Partager sur Facebook
                        • Partager sur Twitter
                          2 mai 2018 à 9:22:45

                          Merci pour tes réponses, 

                          Malheureusement les deux réseaux dont je dispose sont inaccessibles, inverser les rôles client-serveur ne m'avance pas énormément. par contre je viens d'acquérir une tour,j le plus simple (pour l'instant) va être de laisser le serveur à la maison sur un réseau où j'ai la main et voir pour déporter le contrôle de ce pc pour le gérer depuis le boulot (si bien sur les réseaux le permettent...)
                          • Partager sur Facebook
                          • Partager sur Twitter

                          portForwarding|NAT|TCP/IP|java|modem mobile

                          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                          • Editeur
                          • Markdown