wie starte ich nen broadcast



  • Hast du den Socket schon initilisiert?

    Für ein Broadcast must du die Broadcast IP benutzen.
    zb.: 255.255.255.255

    Broadcast IP sind IP bei welchen der Host Anteil komplett
    aus Binären Einsen besteht.



  • Hast du den Socket schon initilisiert?

    SOCKET s;
    s=socket(AF_INET,SOCK_STREAM,0);
    

    Falls du das meinst, ja.

    Für ein Broadcast must du die Broadcast IP benutzen.
    zb.: 255.255.255.255

    Broadcast IP sind IP bei welchen der Host Anteil komplett
    aus Binären Einsen besteht

    So etwa??

    SOCKADDR_IN addr;
    	addr.sin_family = AF_INET;
    	addr.sin_port = htons(135);
    	addr.sin_addr.S_un.S_addr = (unsigned long)inet_addr("192.168.255.255");
    

    Dann wär aber die Frage, was ich danach mach 😕
    Vor allem wie ich das hinkrieg, dass er mir alle Clients/server im Netzwerk anzeigt ??



  • Probier mal:

    int sock = socket(PF_INET, SOCK_RAW, IPPROTO_ICMP);
    
        int on = 1;
        setsockopt(SOL_SOCKET, SO_BROADCAST, &on, sizeof(on));
    
        struct sockaddr_in peer;
        peer.sin_family = AF_INET;
        peer.sin_addr   = <ip-addr>;
    
        #define SIZE 64
        char packet[SIZE];
        struct icmp *icmp = (struct icmp*)packet;
        int my_id = getpid();
    
        for (i = 0; i < SIZE; i++)
            packet[i] = i;
    
        icmp->icmp_type  = ICMP_ECHO;
        icmp->icmp_code  = 0;
        icmp->icmp_cksum = 0;
        icmp->icmp_seq   = 0;
        icmp->icmp_id    = my_id;
    
        icmp->icmp_cksum = cksum(packet, sizeof(packet));
    
        sendto(sock, packet, sizeof(packet), 
               0,(struct sockaddr*)&peer, sizeof(peer));
    
        while (1) {
            struct sockaddr_in from;
            int len = sizeof(from);
            recvfrom(sock, packet, sizeof(packet), 0,
                    (struct sockaddr*)&from, &len);
    
            struct ip *ip = (struct ip*)packet;
            struct icmp *icmp;
            int header_len = ip->ip_hl * 4;
    
            icmp = (struct icmp*)(packet + header_len);
    
            if (icmp->type == ECHOREPLY || icmp->id == my_id) {
    			cout << "Cool, eine Echo!" << endl;
            }
        }
    

    Konnte es leider nicht ausprobieren hab leider keinen Compiler C++
    auf Arbeit ...



  • ehrlich gesagt, hab ich so meine Probleme das Teil zum laufen zu bringen.

    Ich vermute mal, dass ich icmp.h includieren muss !?
    Aber wo gibts die???
    Dummerweise hab ich unter google nix passendes gefunden 😞

    War glaub ich alles für linux...

    ...aber schon mal Danke 😃



  • Der verdammte Alkohol auf dem Abiball 😃

    Vergess das alles, hast dir die Frage schon beantwortet:

    SOCKADDR_IN addr;
        addr.sin_family = AF_INET;
        addr.sin_port = htons(135);
        addr.sin_addr.S_un.S_addr = (unsigned long)inet_addr("192.168.255.255");
    

    so wirds gemacht. Den Code kannste Ingnorieren der ist völliger
    Unsinn 😃



  • Ausser das hier:

    int on = 1; 
    setsockopt(sock, SOL_SOCKET, SO_BROADCAST, &on, sizeof(on));
    

    das brauchste.



  • OK, aber was mach ich dann mit dem socket??

    connect oder send ?
    Oder muss ich noch nen listen-socket initialisieren damit ich die Antworten auswerten kann?

    Fragen über Fragen 🙂



  • ...Vor allem wie ich das hinkrieg, dass er mir alle Clients/server im Netzwerk anzeigt ?? ...

    Falls Du nur die Clients/Server in Deiner Domäne sehen möchtest, dann brauchst Du doch keinen Broadcast dafür.

    Seh Dir bitte in der MSDN die NetServerEnum funktion an. Habe sie ausprobiert - funktioniert ganz gut. Falls gewünscht kann ich Dir auch den Quellcode (in diesem Fall in VB) posten.

    chris



  • ...Vor allem wie ich das hinkrieg, dass er mir alle Clients/server im Netzwerk anzeigt ?? ...

    Falls Du nur die Clients/Server in Deiner Domäne sehen möchtest, dann brauchst Du doch keinen Broadcast dafür.

    Seh Dir bitte in der MSDN die NetServerEnum funktion an. Habe sie ausprobiert - funktioniert ganz gut. Falls gewünscht kann ich Dir auch den Quellcode (in diesem Fall in VB) posten.

    chris



  • ...Vor allem wie ich das hinkrieg, dass er mir alle Clients/server im Netzwerk anzeigt ?? ...

    Falls Du nur die Clients/Server in Deiner Domäne sehen möchtest, dann brauchst Du doch keinen Broadcast dafür.

    Seh Dir bitte in der MSDN die NetServerEnum funktion an. Habe sie ausprobiert - funktioniert ganz gut. Falls gewünscht kann ich Dir auch den Quellcode (in diesem Fall in VB) posten.

    chris



  • ...Vor allem wie ich das hinkrieg, dass er mir alle Clients/server im Netzwerk anzeigt ?? ...

    Falls Du nur die Clients/Server in Deiner Domäne sehen möchtest, dann brauchst Du doch keinen Broadcast dafür.

    Seh Dir bitte in der MSDN die NetServerEnum funktion an. Habe sie ausprobiert - funktioniert ganz gut. Falls gewünscht kann ich Dir auch den Quellcode (in diesem Fall in VB) posten.

    chris


Anmelden zum Antworten