PureBasic

Forums PureBasic
Nous sommes le Lun 24/Juin/2019 18:34

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 31 messages ]  Aller à la page Précédente  1, 2, 3  Suivante
Auteur Message
 Sujet du message: Re: packet UDP sur broadcast
MessagePosté: Jeu 30/Mai/2013 7:52 
Hors ligne

Inscription: Lun 11/Déc/2006 16:11
Messages: 40
remarque pour voir si ce n'est pas les VMs et ma machine qui bloque le port il n'y aurai pas un fichier.c de test pour envoyer une trame UDP sur le broadcast
afin de savoir si c'est l'appli compilé avec pure qui ne pase pas ?


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: packet UDP sur broadcast
MessagePosté: Jeu 30/Mai/2013 8:26 
Hors ligne

Inscription: Lun 11/Déc/2006 16:11
Messages: 40
lolvince a écrit:
bon je vais tester sur un autre linux sur un autre réseau (192.168.1.x) de pinguer son broadcast (192.168.1.255) voir ce que cela donne....

=> donc je confirme je peux envoyer sur 192.168.0.255 et 192.168.2.5 mais si je fais 192.168.1.255 (Le broadcast du réseau en cour) j'ai une erreur d’envoi (-1) :(

alors voila pour mon on ne peux envoyer une trame UDP sur le broadcast avec purebasic compilé sous Linux ... :( du moins avec les fonctions OpenNetworkConnection et SendNetworkData

il y a des anciens bout de code qui permette un ping en trés bas niveau il me semble, je en sait pas si il y aurai moyen d'exploiter ça ...


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: packet UDP sur broadcast
MessagePosté: Jeu 30/Mai/2013 8:28 
Hors ligne

Inscription: Jeu 07/Mar/2013 19:02
Messages: 188
Localisation: France Alsace / Espagne Girona
Premiere chose a faire un "ping" si ta pas de réponse verifier avec "ifconfig" (UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST)

Voila un exemple "eth0" :
Code:
eth0      Link encap:Ethernet  HWaddr ****** 
          inet adr:*.*.*.*  Bcast:*.*.*.*  Masque:255.255.255.224
          adr inet6: *************/64 Scope:Lien
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:5523465 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2462193 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 lg file transmission:0
          RX bytes:3079879916 (2.8 GiB)  TX bytes:461055564 (439.6 MiB)


Si tout est bon alors il reste a voir :
iptable -L voir si tu na pas fail2ban ou autre filtre sur ta machine
tu peut aussi utiliser nmap pour scanner les ports

_________________
Code toujours multi-OS
OSX 10.6.8 - Xcode Version 3.2.2 - GCC 4.2.1 / PureBasic 5.30 (MacOS X - x64) Full version / Parallels Windows XP PureBasic 5.30 (Windows - x86) Full version / Debian PureBasic 5.30


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: packet UDP sur broadcast
MessagePosté: Jeu 30/Mai/2013 8:34 
Hors ligne

Inscription: Jeu 07/Mar/2013 19:02
Messages: 188
Localisation: France Alsace / Espagne Girona
ah je viens de pensé à un truc ta un routeur ? si oui un routeur ne transmettent pas les paquets broadcast

_________________
Code toujours multi-OS
OSX 10.6.8 - Xcode Version 3.2.2 - GCC 4.2.1 / PureBasic 5.30 (MacOS X - x64) Full version / Parallels Windows XP PureBasic 5.30 (Windows - x86) Full version / Debian PureBasic 5.30


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: packet UDP sur broadcast
MessagePosté: Jeu 30/Mai/2013 8:48 
Hors ligne

Inscription: Lun 11/Déc/2006 16:11
Messages: 40
alors oui j'ai un routeur !
mais alors pourquoi sous Windows ça fonctionne et pas sur une machine en linux dans le même réseau ?


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: packet UDP sur broadcast
MessagePosté: Jeu 30/Mai/2013 8:57 
Hors ligne

Inscription: Jeu 07/Mar/2013 19:02
Messages: 188
Localisation: France Alsace / Espagne Girona
je connait pas ta configuration réseau !!!

Tu peux avoir un routeur entre X et Y ou meme une machine peut faire router, je parle d'un routeur pas d'un switch

_________________
Code toujours multi-OS
OSX 10.6.8 - Xcode Version 3.2.2 - GCC 4.2.1 / PureBasic 5.30 (MacOS X - x64) Full version / Parallels Windows XP PureBasic 5.30 (Windows - x86) Full version / Debian PureBasic 5.30


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: packet UDP sur broadcast
MessagePosté: Jeu 30/Mai/2013 10:16 
Hors ligne

Inscription: Lun 11/Déc/2006 16:11
Messages: 40
Pour le réseau il n'y a rien de très compliqué !
_______________
PC & VMs=====>|
NAS=========>| => Switch => Freebox (en mode routeur évidement)
Serv Linux====>|
______________|
les VMs sont en mode pont sur ma carte réseau filaire (pas de WIFI pour ces machines)
si je lance le code depuis mon pc (win7 64) la trame part, mon Serv Linux me répond car il intercepte la trame du broadcast.
si je lance le même code depuis mes VMs(linux) ou mon NAS(debian) la trame ne part pas ... mais si je met l'ip direct de mon Serv linux, ça fonctionne !
mais le but d'envoyer cette trame, c'est de découvrir mon Serv Linux qui en théorie peut se trouver n'importe ou sur le réseau ...


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: packet UDP sur broadcast
MessagePosté: Jeu 30/Mai/2013 10:25 
Hors ligne

Inscription: Jeu 07/Mar/2013 19:02
Messages: 188
Localisation: France Alsace / Espagne Girona
tu peut sender un ifconfig de la VM et du serv linux

_________________
Code toujours multi-OS
OSX 10.6.8 - Xcode Version 3.2.2 - GCC 4.2.1 / PureBasic 5.30 (MacOS X - x64) Full version / Parallels Windows XP PureBasic 5.30 (Windows - x86) Full version / Debian PureBasic 5.30


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: packet UDP sur broadcast
MessagePosté: Jeu 30/Mai/2013 10:35 
Hors ligne

Inscription: Lun 11/Déc/2006 16:11
Messages: 40
je tien à préciser qu'une VM Win XP sp3 32 bit lance mon code et ça part parfaitement ....
donc cela ne vient pas de la virtualisation ...

pour if config du srv linux je ne peut rien faire je n'ai pas la main dessus (Boitier domo non ouvert) je sait qu'il intercepte les trame UDP de broadcast (quand elle parte bien sur :p ^^)


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: packet UDP sur broadcast
MessagePosté: Jeu 30/Mai/2013 10:36 
Hors ligne

Inscription: Lun 11/Déc/2006 16:11
Messages: 40
voila pour mon NAS par exemple

DiskStation> ifconfig
eth0 Link encap:Ethernet HWaddr 00:48:9D:B3:CC:60
inet addr:192.168.0.250 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::248:9dff:feb3:cc60/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:536013 errors:0 dropped:0 overruns:0 frame:0
TX packets:3429478 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:82053508 (78.2 MiB) TX bytes:4906414603 (4.5 GiB)
Interrupt:18

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:3395424 errors:0 dropped:0 overruns:0 frame:0
TX packets:3395424 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:38359798572 (35.7 GiB) TX bytes:38359798572 (35.7 GiB)


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: packet UDP sur broadcast
MessagePosté: Jeu 30/Mai/2013 10:58 
Hors ligne

Inscription: Lun 11/Déc/2006 16:11
Messages: 40
@doudouvs => tu as les même symptôme de ton coté non ? sans parler de mon réseau perso...
si tu compile toi même sur windows tu vera que cela fonctionne sous windows
si tu compile sous linux tu verras que la requête ne part pas si tu es sous linux ...

Âpres ça, si cela fonctionne chez toi, c'est qu'il y a un souci réseau effectivement sur 2 sites différent ici


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: packet UDP sur broadcast
MessagePosté: Jeu 30/Mai/2013 14:11 
Hors ligne

Inscription: Lun 11/Déc/2006 16:11
Messages: 40
je test sur d'autre version ... compilé sur ubuntu 32 et 64 bit voire si ça change quelque chose sachant que c'est un autre site également ...

donc je confirme :
sur 2 autre machine linux dans un autre réseau j'ai toujours un refus d'envoi en UDP sur broadcast.
j'ai donc compilé un bout de code en C pour voir si il y a avait du changement et ...... oui il y en a
mon code en C refuse d'envoyer sur le broadcast également ^^

voici son code :

Code:
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <time.h>
#include <string.h>
#include <stdio.h>
#include <unistd.h>
#define HELLO_PORT [color=#BF0000]49999[/color]
#define HELLO_GROUP "[color=#BF0000]192.168.0.255[/color]"

int main(int argc, char *argv[])
{
    struct sockaddr_in addr;
    int fd;
    char *message = "Hello, World!";
    if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0)
    {
        perror("socket");
        exit(1);
    }
    /* set up destination address */
    memset(&addr,0,sizeof(addr));
    addr.sin_family = AF_INET;
    addr.sin_addr.s_addr = inet_addr(HELLO_GROUP);
    addr.sin_port=htons(HELLO_PORT);
    while (1)
    {
        if (sendto(fd, message, strlen(message), 0,(struct sockaddr *) &addr, sizeof(addr)) < 0)
        {
            perror("sendto");
            exit(1);
        }
        sleep(3);
    }
}


Si on change l'ip ça part ...
mais en 255 => sendto: Permission denied

que faut-il comprendre ? linux nous briderai ?


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: packet UDP sur broadcast
MessagePosté: Jeu 30/Mai/2013 15:39 
Hors ligne

Inscription: Lun 11/Déc/2006 16:11
Messages: 40
YEEEEPPEEEEEEEEEEEEE !! :P

bon ça y est j'ai trouvé la cause ...
donc sous linux un envoi sur broadcast est refusé par défaut !
donc vu aussi avec mon code en C mais la qui renvoi une erreur plus parlante => "sendto: Permission denied" (inutile de dire que je suis en ROOT :p)

en creusant un peu on se rend compte qu'il faut "une permission spécial" ... donc voila mon code C qui fonctionne :

Code:
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <time.h>
#include <string.h>
#include <stdio.h>
#include <unistd.h>

int main(int argc, char *argv[])
{
    char *dstIP = "192.168.0.255";
   char *localIP = "192.168.0.250";
   int BroadcastPort = 49999;
   int sock;                         /* Socket */
/-------------------------------Permission Broadcast------------------------------------/
    struct sockaddr_in broadcastAddr; /* Broadcast address */
    int broadcastPermission;          /* Socket opt to set permission to broadcast */
    unsigned int localIPLen;       /* Length of string to broadcast */
/---------------------------------------------------------------------------------------/
    /* Create socket for sending/receiving datagrams */
    if ((sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0)
        perror("socket() failed");
    /* Set socket to allow broadcast */
    broadcastPermission = 1;
    if (setsockopt(sock, SOL_SOCKET, SO_BROADCAST, (void *) &broadcastPermission,
          sizeof(broadcastPermission)) < 0)
        perror("setsockopt() failed");
    /* Construct local address structure */
    memset(&broadcastAddr, 0, sizeof(broadcastAddr));   /* Zero out structure */
    broadcastAddr.sin_family = AF_INET;                 /* Internet address family */
    broadcastAddr.sin_addr.s_addr = inet_addr(dstIP);   /* Broadcast IP address */
    broadcastAddr.sin_port = htons(BroadcastPort);      /* Broadcast port */
    localIPLen = strlen(localIP);  /* Find length of localIP */
    int j;
    for (j=0; j<1; j++) //doesnt mean anything so far, not important
    {
         /* Broadcast localIP in datagram to clients */
         if (sendto(sock, localIP, localIPLen, 0, (struct sockaddr *)
               &broadcastAddr, sizeof(broadcastAddr)) != localIPLen)
             perror("sendto() sent a different number of bytes than expected");
    }
}


Voila avec ceci on a bien la trame en UDP qui part sur le broadcast ...
la structure de la socket est différente, elle inclu une "permission spéciale".

maintenant la question qui tue, comment je fait pour faire la même chose avec mon purebasic adoré ? :mrgreen:


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: packet UDP sur broadcast
MessagePosté: Jeu 30/Mai/2013 16:06 
Hors ligne

Inscription: Lun 11/Déc/2006 16:11
Messages: 40
bon j'ai trouvé un bout de code Pure de ... 2006 !!!
mais il ne fonctionne pas sur LINUX, mais sur Windows :(
si quelqu'un peut le traduire, le voici ...

Code:
Procedure.l SendUDPBroadcastL (port, message.s)
  Protected sock,one,bytes,remote.sockaddr_in

  sock = SOCKET_(#AF_INET,#SOCK_DGRAM,#IPPROTO_IP)
  If ( sock = -1) : ProcedureReturn 1 : EndIf
  one = 1
  If (setsockopt_(sock,#SOL_SOCKET,#SO_BROADCAST,@one,SizeOf(one)) = -1)
    ProcedureReturn 1
  EndIf
  remote\sin_family = #AF_INET
  remote\sin_port = htons_(port)
  remote\sin_addr = #INADDR_BROADCAST
  if (sendto_(sock,message,Len(message),0,@remote,SizeOf(remote)) = -1)
    ProcedureReturn 1
  EndIf
  closesocket_(sock)
  ProcedureReturn 0
EndProcedure


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: packet UDP sur broadcast
MessagePosté: Jeu 30/Mai/2013 16:53 
Hors ligne

Inscription: Lun 26/Avr/2004 0:40
Messages: 14535
vas voir là :

http://forums.purebasic.com/english/vie ... 9c89cd0433

et là

http://www.purebasic.fr/english/viewtop ... st#p365942

c'est pour Mac Osx mais ça devrai le faire avec Linux , puisque pas d'API ;)


Haut
 Profil  
Répondre en citant le message  
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 31 messages ]  Aller à la page Précédente  1, 2, 3  Suivante

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages

Rechercher:
Aller à:  

 


Powered by phpBB © 2008 phpBB Group | Traduction par: phpBB-fr.com
subSilver+ theme by Canver Software, sponsor Sanal Modifiye