Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [c] [linux] socket raw a pacchetti

    Sto facendo degli esercizi con la programmazione dei socket in linux, e vorrei fare qualche prova anche con i socket PF_PACKET in modalità RAW, cioè dovendo costruire manualmente anche l'header ethernet del pacchetto.

    Purtroppo in rete sono riuscito a trovare granché in proposito, quindi volevo chiedervi: una volta apertoil socket, come uso le primitive per inviare il frame ethernet? la sendto prende come parametri anche una struct sockaddr *to ed un int tolen, devo impostarli rispettivamente a NULL ed a 0 oppure devo fare in un altro modo?

    socket(PF_PACKET, SOCK_RAW, 0)

    Grazie
    GreyFox (Linux registered user #435102)
    greyfox.imente.org - GreyFox's shots (photo gallery)
    $ cd /pub
    $ more beer

  2. #2
    Cosa devi fare di preciso? Lavorare a layer ethernet non è conveniente a meno che tu non voglia espressamente farlo (es: hack applicato al protocollo ARP?).
    Tramite socket_raw puoi lavorare a livelli superiori a ethernet (esempio IP) e delegare il compito di compilare tali trame interamente a socket_raw (cosa che ti risparmia sforzo, linee di codice e sopratutto conoscenza necessaria).
    Su come programmare con raw_socket vi sono numerose guide su internet. Di italiano le uniche fonti che posso indicarti sono gli articoli, redatti prevalentemente da fusys, presenti su bfi:
    http://bfi.freaknet.org/
    ...e qualche paper su mojodo (se non ricordo male vi è un articolo che tratta i socket_raw applicati ad ICMP):
    http://www.mojodo.it/

    Per tutto il resto:
    www.google.it

    Ovviamente, ripeto, prima di avventurarsi ci vogliono determinate skill.
    Rilasciata Python FTP Server library 0.5.1
    http://code.google.com/p/pyftpdlib/

    We'll be those who'll make the italian folks know how difficult can be defecating in Southern California without having the crap flying all around the house.

  3. #3
    Sto facendo degli esperimenti a livello ethernet per inviare semplici pacchetti ARP, per questo non lavoro a livello più alto.
    Grazie per i link, alcune questioni le ho chiarite, altre no.
    Ora che ho fatto il mio programmino, come faccio a debuggarlo? Insomma, come faccio a vedere le trame che vengono inviate e soprattutto, sapere se sono ricevute?
    GreyFox (Linux registered user #435102)
    greyfox.imente.org - GreyFox's shots (photo gallery)
    $ cd /pub
    $ more beer

  4. #4
    Sto facendo degli esperimenti a livello ethernet per inviare semplici pacchetti ARP, per questo non lavoro a livello più alto.
    In tal caso...
    Grazie per i link, alcune questioni le ho chiarite, altre no.
    Ora che ho fatto il mio programmino, come faccio a debuggarlo? Insomma, come faccio a vedere le trame che vengono inviate e soprattutto, sapere se sono ricevute?
    Ti serve uno sniffer:
    http://www.wireshark.org/
    ...da usare eventualmente anche sulla macchina destinatario.
    Rilasciata Python FTP Server library 0.5.1
    http://code.google.com/p/pyftpdlib/

    We'll be those who'll make the italian folks know how difficult can be defecating in Southern California without having the crap flying all around the house.

  5. #5
    Ok i pacchetti escono, ed i mac della trama ethernet coincidono, solo che (sempre nell'header ethernet) il tipo di protocollo non viene specificato correttamente. anzichè essere ETH_P_ARP (0x0806) risuta essere 0x0608, in pratica come se non facessi la conversione htons. Ho una struttura per la trama ethernet con un campo

    uint16_t eth_type;

    che completo con:

    eth.eth_type = htons(ETH_P_ARP);

    Dove sbaglio?
    GreyFox (Linux registered user #435102)
    greyfox.imente.org - GreyFox's shots (photo gallery)
    $ cd /pub
    $ more beer

  6. #6
    Accidenti che scemo c'era più sotto un'istruzione che avevo dimenticato di cancellare che lo sovrascriveva :rollo:

    per il resto i pacchetti vengono inviati correttamente, solo che da qualche parte vengono invertiti all'interno dell'arp source eth con destination eth... ormai è solo questione di trovare dove sia questo errore

    Grazie per l'aiuto
    GreyFox (Linux registered user #435102)
    greyfox.imente.org - GreyFox's shots (photo gallery)
    $ cd /pub
    $ more beer

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.