» »

[c]recvmsg loopback

[c]recvmsg loopback

slovencl ::

Zdeavo,

Imam socket(AF_PACKET, SOCK_DGRAM, htons(0x1234)), ki pošilja pakete na multicast/broadcast mac. Problem je, da ko sprejemam pakete na tem socketu z recvmsg(), da dobivam tudi vse poslane pakete, te pa hočem izločit.

Ali se da dobiti sourceMAC, ni mi uspelo, če prav razumem se ne da?
Ali se da detektirat, da so šli ti paketi preko loopback?

LP

Randomness ::

Ne vem sicer kaj delaš, ampak zakaj imaš htons(0x1234) v argumentu?

slovencl ::

Ethertype paketov je pač 0x1234, a je to problem?

slovencl ::

Pošiljam pa na:
struct sockaddr_ll l2_addr;
static uint8_t l2_dest_mac_addr[ETH_ALEN] = {0x01, 0x80, 0xC2, 0x00, 0x00, 0x0E};
memcpy(&l2_addr.sll_addr, l2_dest_mac_addr, ETH_ALEN);

Randomness ::

Ne vem kaj želiš doseči. Želiš pošiljati UDP ali "surove" Ethernet pakete? Če še ne poznaš, si za začetek poglej libpcap.

slovencl ::

Želim pošiljat surove ethernet pakete. Te tudi pošiljam. To ni problem.

Problem je, da ker so poslani na multicast, in jih dobivam nazaj na recvmsg() ko berem druge prejete pakete. Problem je, da jih ne morem ločit od ostalih.

Rad bi: ali izključil loopback za te pakete, ali prebral sourceMAC teh paketov. Nič od tega mi ne rata.

Randomness ::

Zakaj imaš potem SOCK_DGRAM? Tole ne gre skupaj.

slovencl ::

To sem pobral iz tega primera l2_tai_c vrstica 129
Glede na to da je to od intela, sem smatral da je ok.

Milsiš da bi moral biti SOCK_RAW? Sem preizkusil in mi dela, na loopback mi pa ti paketi ne letijo več :)
Samo ne štekam zakaj je pa zdej tako?

LP,

Randomness ::

Intelov primer zna biti že ok. Ampak ti si ga verjetno spreminjal na način, da ni več ok. Sem na hitro pogledal link. On preverja le POLLERR event (l2_tai.c, vrstica 297), ostalo (vključno z vsebino paketa) pa kar preskoči. Ti pa želiš nekaj drugega - še vedno nisi povedal kaj - in seveda potem stvar ne dela. Ponavadi se izkaže, da ti ljudje lažje pomagajo, če poveš, kaj je tvoj cilj. Ker mogoče se stvari lotevaš na napačen način.

slovencl ::

Ampak to bi tudi tam verjetno lahko naredili s SOCK_RAW, zakaj potem taka rešitev, če nima logike?

Moj cilj je pošiljat in sprejemat raw pakete. Master pišilja pakete na broadcast MAC, tako da ga dobijo vsi, slejvi pa potem odgovarjajo na to. Te pakete pa potem sprejemam.

Zgodovina sprememb…

  • spremenil: slovencl ()

Randomness ::

Zakaj ne uporabiš knjižnice libpcap? Je odlična za te stvari.

slovencl ::

Hvala za odgovore in predlog. Sem pogledal, mogoče naslednjič uporabim. Zdej mi začuda kar dela, ko sem zamenjal DGRAM za RAW :)


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[c]recvmsg

Oddelek: Programiranje
13407 (128) slovencl
»

[c] ne sprejme UDP paketa

Oddelek: Programiranje
7646 (234) slovencl
»

Nova resna ranljivost v Linux jedrih 2.4 in 2.6 (strani: 1 2 )

Oddelek: Novice / Varnost
738390 (5788) karafeka
»

MAC adresa

Oddelek: Omrežja in internet
152184 (1814) Self-Defence
»

Microsoft meni, da bi bila polna podpora TCP/IP v Windows preveč nevarna

Oddelek: Novice / Operacijski sistemi
373298 (2367) Jst

Več podobnih tem