Portál AbcLinuxu, 26. dubna 2024 02:00


Dotaz: scapy-rewrite headers

15.6.2016 11:34 marian34
scapy-rewrite headers
Přečteno: 419×
Odpovědět | Admin
Zdravím vospolok,viete tu niekto scapy?Je možné pomocou tohto nástroja prepísať headers-konkrétne radiotap header(ieee802.11,logical link) -> ethernet?
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

15.6.2016 12:01 NN
Rozbalit Rozbalit vše Re: scapy-rewrite headers
Odpovědět | | Sbalit | Link | Blokovat | Admin
Chces prepisovat 802.11 ramce na Ethernetove ramce? Nebyl by jednoduzsi socat? Mohl by jsi popsat o co se konkretne pokousis? Forwarding?
15.6.2016 12:08 marian34
Rozbalit Rozbalit vše Re: scapy-rewrite headers
Pokúšam sa spracovať multicast(udp) stream zachytený wifi klientom v monitor mode.Sniff je robený tcpdumpom(no môže to robiť aj iný sniffer,napr. aj scapy).S radiotap headers to neviem nijako-tcrpreplay,videosnarf-spracovať.
Jendа avatar 16.6.2016 10:03 Jendа | skóre: 78 | blog: Jenda | JO70FB
Rozbalit Rozbalit vše Re: scapy-rewrite headers
Odpovědět | | Sbalit | Link | Blokovat | Admin
Scapy neznám, ale psal jsem přebalování GSMTAP rámců v PCAP souborech a ten formát byl fakt triviální. Takže bych napsal věc, která vždycky přečte paket, přeplácne hlavičku a vypíše ho.
Já to s tou denacifikací Slovenska myslel vážně.
16.6.2016 17:25 marian34
Rozbalit Rozbalit vše Re: scapy-rewrite headers
Dík za inšpiráciu,ale na takéto niečo nie som dosť erudovaný.

Inak na tento účel existuje originál nástroj tcprewrite,no bohužiaľ mi to nefunguje.Tu som to prebelal s autorom(je tam aj súbor s radiotap headers).

Jendа avatar 16.6.2016 17:56 Jendа | skóre: 78 | blog: Jenda | JO70FB
Rozbalit Rozbalit vše Re: scapy-rewrite headers
#include <stdlib.h>
#include <stdio.h>
#include <inttypes.h>
#include <string.h>

#include <unistd.h>

#include <stdarg.h>
#include <limits.h>
#include <assert.h>

typedef struct pcaprec_hdr_s {
        uint32_t ts_sec;         /* timestamp seconds */
        uint32_t ts_usec;        /* timestamp microseconds */
        uint32_t incl_len;       /* number of octets of packet saved in file */
        uint32_t orig_len;       /* actual length of packet */
} pcaprec_hdr_t;

int main(int argc, char **argv) {

  char c;

  // header
  for(int i = 0; i<24; i++) {
    fread(&c, 1, 1, stdin);
  }

  // https://github.com/itds-consulting/tetra-multiframe-sds/blob/master/pcap.py
  unsigned char _tmp_pcap[] = {
    0xd4, 0xc3, 0xb2, 0xa1, 0x02, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00
  };
  unsigned int _tmp_pcap_len = 24;
  fwrite(_tmp_pcap, _tmp_pcap_len, 1, stdout);

  // individual packets

  struct pcaprec_hdr_s h;
  size_t alloc = 0;
  char * packet = NULL;

  char * eh = malloc(6+6+2);

  while(!feof(stdin)) {
    // read packet header
    fread(&h, sizeof(struct pcaprec_hdr_s), 1, stdin);

    // read packet
    size_t len = h.incl_len;
    if(alloc < len) {
      packet = (char*)realloc((void*)packet, len);
      alloc = len;
    }
    fread(packet, len, 1, stdin);

    assert(len > 68);

    // patch with ethernet header
    // dst
    memcpy(eh, packet+40, 6);
    // src
    memcpy(eh+6, packet+52, 6);
    // ipv4
    //eh[12] = 0x08;
    //eh[13] = 0x00;
    // copy
    memcpy(packet+66-12, eh, 12);

    // set size
    // strip checksums
    size_t diff = 66-12+4;
    h.incl_len -= diff;
    h.orig_len -= diff;

    // write header
    fwrite(&h, sizeof(struct pcaprec_hdr_s), 1, stdout);
    // write packet
    fwrite(packet+diff-4, len-diff, 1, stdout);

  }

}

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.