Pages: [1]   Go Down
Author Topic: UDP depuis serveur Free  (Read 1541 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Newbie
*
Karma: 0
Posts: 22
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour à tous,

J ai un petit bout de code qui fait un fader sur une diode via une commande ethernet UDP depuis un serceur php qui tourne en local sur mon pc.

Le PC et la carte arduino avec le shield ethernet sont branchés sur une freebox revolution en mode router.

Mon problème, ca fonctionne très bien dans cette config, meme depuis l'exterieur, mais j aimerais héberger tout ca sur un serveur Free pour ne pas laisser mon PC tourner.

Voici l erreur que je rencontre :

socket_sendto() [function.socket-sendto]: unable to write to socket [101]

Quote
<?php
//phpinfo();
//$valeur_led = $_POST["led1"]; //  récupération de la valeur transmise en méthode POST
$valeur_led ="59";
$host="88.167.XXX.XXX";  //  Adresse ip défini dans le code arduino
$port=8888;    // Port défini dans le code arduino

 $socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
 socket_sendto($socket, $valeur_led , strlen($valeur_led), 0, $host, $port);
 echo socket_last_error();
 echo "<br>";
 echo socket_strerror(socket_last_error());
 
 socket_close($socket);
?>

le Ino:
Quote

#include <SPI.h>       // needed for Arduino versions later than 0018
#include <Ethernet.h>
#include <EthernetUdp.h>        // UDP library from: bjoern@cs.stanford.edu 12/30/2008
 
// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
uint8_t hwaddr[6] = {0xDE, 0xAD, 0xBE, 0xEF, 0xBA, 0xBE}; // mac-adress of arduino
//uint8_t ipaddr[4] = {192, 168, 0, 10};                    // IP-adress of arduino
uint8_t ipaddr[4] = {88,167,233,135};                    // IP-adress of arduino
uint8_t gwaddr[4] = {192, 168, 0, 254};                     // IP-adress of gateway ( for later DNS implementation)
uint8_t dns[4] = {192, 168, 0, 254};                     // IP-adress of gateway ( for later DNS implementation)
uint8_t subnet[4] = {255, 255, 255, 0};                   // subnetmask           ( for later DNS implementation)
//uint8_t serverip[4] = {88,167,233,135};                    // IP-adress of server arduino sends data to
//uint8_t ipaddr[4] = {192, 168, 0, 10};

unsigned int localPort = 8888;      // local port to listen on

// the next two variables are set when a packet is received
byte remoteIp[4];        // holds received packet's originating IP
unsigned int remotePort; // holds received packet's originating port
 
// buffers for receiving and sending data
char packetBuffer[UDP_TX_PACKET_MAX_SIZE]; //buffer to hold incoming packet,
char  ReplyBuffer[] = "acknowledged";       // a string to send back
EthernetUDP Udp;
void setup() {
  // start the Ethernet and UDP:
  Ethernet. begin(hwaddr,ipaddr,dns,gwaddr,subnet);                // start up ethernet   

  Udp.begin(localPort);
 
  Serial.begin(9600);
}
 
void loop() {
  // if there's data available, read a packet
  int packetSize = Udp.parsePacket();
  if(packetSize)
  {
    Serial.print("Received packet of size ");
    Serial.println(packetSize);
 Serial.print("From ");
    IPAddress remote = Udp.remoteIP();
    for (int i =0; i < 4; i++)
    {
      Serial.print(remote, DEC);
      if (i < 3)
      {
        Serial.print(".");
      }
    }
    Serial.print(", port ");
    Serial.println(Udp.remotePort());
    memset(packetBuffer, 0, UDP_TX_PACKET_MAX_SIZE);
 
    // read the packet into packetBufffer and get the senders IP addr and port number
    Udp.read(packetBuffer,UDP_TX_PACKET_MAX_SIZE);
    Serial.println("Contents:");
    Serial.println(packetBuffer);
 
    analogWrite(9, atoi(packetBuffer)); //utiliser la valeur reçu pour allumer la led
  }
  //delay(250);
}

Ca fait 3 jours que je cherche dans mon code et sur le net, ma box est bien paramétrée pour rediriger les port (enfin je crois smiley-wink )

Si quelqu un a une idée, Skywood si tu passes dans le coin...

Merci à tous
Logged

Offline Offline
Edison Member
*
Karma: 17
Posts: 1968
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

bonjour,
as tu essayé déjà via le port 80 pour tester?
est ce bien l'UDP qui est sélectionné pour le port et non le TCP.
avant il fallait rebooter la FB pour terminer la config des ports, je sais pas si c'est toujours d'actu.
regarde ce tuto pour emule
http://routeurs.emule-french.org/freeboxv6.php
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 22
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Merci pour ta reponse infobarquee.

Sur le port 80 j ai une redirection vers mon PC avec le serveur Wamp ceci dit, je pourrais le cutter.

Je n ai pas essayé de reboot la box, ce n'est a priori pas nécessaire mais je vais essayer aussi.

j ai a peu près tout essayé donc je tente tout ce que je n ai pas deja fait smiley-wink

@+
Logged

France
Offline Offline
Faraday Member
**
Karma: 55
Posts: 5347
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Salut,

Je suis pas trés fort quand il s'agit d'udp m'enfin ...

Est ce que tu as bien routé le port 8888 en udp vers ton arduino dans la configuration de ta freebox ?
Est ce que ta freebox est en IPV4 ou en IPV6 ?

Rajoute un test if($socket === false) pour avoir un retour sur erreur de socket_create() :
http://www.php.net/manual/fr/function.socket-last-error.php

Sinon si tu veut pas te casser la tête il existe fsocketopen() qui est plus simple à utiliser :
http://php.net/manual/fr/function.fsockopen.php

D'aprés le phpinfo de free : http://free.box.free.fr/info.php3 aucune restriction n'est en place donc pas de probléme de ce cote là.
« Last Edit: April 13, 2012, 06:18:50 am by skywodd » Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Made in Belgium
Offline Offline
God Member
*****
Karma: 1
Posts: 756
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

La grande majorité des hébergeurs mutualisés n'accepte tout simplement pas les socket, même activé niveau php.

Pour free particulièrement, une rapide recherche m'a permis de trouvé ça.

Quote
Réponse de l'Assistance Mail de Free :
 
Cher utilisateur,

Nous vous confirmons que les fonctions de sortie en port 80 ne sont plus disponibles sur les pages perso FREE depuis le 01/12/08.

La fonction fopen() ne peut plus fonctionner que sur des fichiers locaux et pas des URL.

Les autres fonctions désactivées sont notamment :
- fsockopen()
- file_get_contents()
- curl()
- readfile()
- file()
- allow_url_open()

Nous restons à votre entière disposition pour toute information complémentaire et je vous souhaite une bonne journée.

Cordialement.
Marc, Service Mailer Free
Logged


0
Offline Offline
Newbie
*
Karma: 0
Posts: 22
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

@Skywodd, je t ai fait un petit MP avec le lien de phpsecureinfo sur mon serveur free.

Ma box est en IPV6, ca pose un problème?

Si tu regarde mon code, j affiche deja le code erreur :unable to write to socket [101], ce qui donne Network is unreachable.

Oui le port UDP est bien routé.

@OSAKA
J'ai également trouvé ces infos mais je ne suis pas sur qu elles soient encore d actu, en effet, voici ce que retourne un serveur mutualisé chez OVH sur lequel socket n'est pas autorisé : Operation not permitted

grrrrrrr

Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 22
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

J'ai le meme probleme avec fsockopen()...

désespoire
Logged

Ile-de-France (92 sud), France
Offline Offline
Edison Member
*
Karma: 24
Posts: 2055
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

C'est pas étonnant.
Sur les serveur de pages perso, encore plus que sur les serveurs mutualisé, il y a plein de fonctions désactivées pour des raisons de sécurité.
Vous imaginez ce que ça donne si des spammeurs ou des pirates se servent des serveurs de pages perso pour des attaques ?

Sinon, c'est peut être possible sur le cloud d'Amazon ou celui de Google.

Ne peux tu pas héberger la page directement sur l'Arduino ?
Ou bien un Raspberry Pi ? Si tu à la chance d'arriver à en obtenir un avant la fin d'année smiley

Sinon, on arrive encore à trouver du déstockage sur des netbooks de première génération pour pas très cher. Avec un Ubunto Netbook ca fait un petit serveur pas trop cher, qui ne consomme pas beaucoup.
Moi j'ai récupéré un vieux terminal windows HP T5300, j'ai viré la carte flash d'origine qui tournait un Windows CE que j'ai remplacé par Tinycore, une micro distri Linux. C'est un Transmeta Crusoe (clone Pentium II) à 500 MHz avec 56 MB de SDRAM et j'arrive à faire tourner une mini distri lunix appellée Tinycore pour héberger un micro serveur web, un serveur VPN pour me connecter à mon réseau depuis l'extérieur et 2..3 bricoles.
Logged

Barbuduino: Arduino sur Breadboard & VinciDuino: Clone Leonardo // WR703: Mini-routeur hacké // LauchPad MSP430 et Stellaris // Panda II Arduino-like .NetMF sous VisualC#
RTFC: Read That F.....g Code / RTFD: Read That F.....g Doc / RTFDS: Read That F.....g DataSheet / RTFS: Read That F.....g Schematic / Wot da ya wanna D.I.Y. today ?

Made in Belgium
Offline Offline
God Member
*****
Karma: 1
Posts: 756
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

@OSAKA
J'ai également trouvé ces infos mais je ne suis pas sur qu elles soient encore d actu, en effet, voici ce que retourne un serveur mutualisé chez OVH sur lequel socket n'est pas autorisé : Operation not permitted

La différence entre ovh et free c'est que les socket on été directement désactivé au niveau php côté ovh je pense, je ne suis pas certain ni expert php (j'ai testé les socket en php et je n'ai pas aimé),  mais par contre une chose dont je suis presque certain, est qu'il est illusoire de vouloir manipulé des socket chez un hébergeur quel qu’il soit pour des raison de sécurité évidente.
Donc pour toute ses raisons je suis justement en train de me faire une petite application serveur en java dédié aux websocket, ce qui me permettra d’héberger mes fichiers web sur du mutualisé vu que les websocket son initié par le navigateur et sont indépendant de l'hébergeur, il permettra également de manipuler un port série depuis un websocket donc plus besoin de shield ethernet.
« Last Edit: April 12, 2012, 07:31:18 pm by osaka » Logged


France
Offline Offline
Faraday Member
**
Karma: 55
Posts: 5347
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

La grande majorité des hébergeurs mutualisés n'accepte tout simplement pas les socket, même activé niveau php.

Pour free particulièrement, une rapide recherche m'a permis de trouvé ça.
Ouf ça me rassure ... mais c'est vicieux, les fonctions désactivé ne sont pas affiché dans le phpinfo ? J'ai du zaper un truc.

Ma box est en IPV6, ca pose un problème?

Si tu regarde mon code, j affiche deja le code erreur :unable to write to socket [101], ce qui donne Network is unreachable.
Oui le port UDP est bien routé.
Tu ne peut pas envoyer des données depuis une IPV4 vers une IPV6.
Test avec AF_INET6 au lieu AF_INET dans ton socket_create().

J'ai le meme probleme avec fsockopen()...
Si les info d'osaka sont toujours d'actualité (quasi sur) c'est normal que fsocketopen ne marche pas ...
En poussant un peu plus loin vu les restrictions ça pourrait bien être impossible de faire des socket quel qu'ils soient.
En plus il est fort probable que coté serveur tout traffic sortant excepté http et https soit bloqué.
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

0
Offline Offline
Newbie
*
Karma: 0
Posts: 22
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ok ok, merci à tous pour vos réponse, je vais réfléchire à une autre solution... Ca marchait si bien sur mon wamp (avec le module socket activé smiley-wink )

Mon sketch, au départ, log des températures dans une base mysql pour mon chauffage. Vous l'aurez deviné je voulais pouvoir changer la consigne de température à distance.

Juste une dernière question sur IPV6 IPV4, je charge a distance des pages sur mon serveur wamp ou dur l'arduino en mode server en appelant une ip public au format IPV4 et kes redirections de port sont faites sous la forme 192.168.0.XX, où est L'ip V6 dans tout ca??
 (ma box est bien en IPV6) un éclaircissement peut etre?

Merci encore
Logged

Pages: [1]   Go Up
Jump to: