[asterisk-ss7] using dahdi as an E1 sniffer

Horacio J. Peña horape at compendium.com.ar
Fri Apr 30 19:02:14 CDT 2010


Answering myself, hope it is useful for somebody:

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include "dahdi-user.h"

main()
{
int fds[62];
char fn[1024];
int i;
int BS=160;
char buf[BS];

for (i=0;i<62;++i) {
  int c = i+1;
  if( (fds[i] = open("/dev/dahdi/channel", O_RDWR)) < 0) {
    printf("Error abriendo %s: %s\n", fn, strerror(errno));
    exit(1);
    }
  if (ioctl(fds[i], DAHDI_SPECIFY, &c) == -1) {
    printf("Error ioctl SPE %d: %s\n", i, strerror(errno));
    exit(1);
    }
  if (ioctl(fds[i], DAHDI_SET_BLOCKSIZE, &BS) == -1) {
    printf("Error ioctl BS %d: %s\n", i, strerror(errno));
    exit(1);
    }
  }

while (read (fds[0], buf, BS)) {
  write (fds[31], buf, BS);
  for (i=1;i<62;++i) {
    read (fds[i], buf, BS);
    write (fds[(i+31)%62], buf, BS);
    }
  }
}




On Fri, Apr 30, 2010 at 12:58:02PM -0300, Horacio J. Peña wrote:
> Hola!
> 
> Is there any app that would allow two E1s to be "bridged" so I can
> intercept a link and use dahdi pcap to analyze the traffic? (does dahdi
> pcap work for audio/pri channels or only ss7?)
> 
> If there isn't, would something like this work?
> 
> main()
> {
> int fds[64];
> 
> // open channels as rw, E1 1 in fds[0..31], E1 2 in fds[32..63]
> 
> int BS = 1;
> char buf[BS];
> 
> while (read (fds[0], buf, BS) {
>   write (fds[32], buf, BS);
>   for (i=1;i<64;++i) {
>     read (fds[i], buf, BS);
>     write (fds[(i+32)%64], buf, BS);
>     }
>   }
> }
> 
> (this uses fds[0] as clocking)
> 
> How many bytes at once (BS) should I read/write? Should I do something
> very different? (It has been a long time since I worked with zap cards)
> 
> Thanks!
> -- 
> Horacio J. Peña
> horape at compendium.com.ar
> horape at uninet.edu

-- 
Horacio J. Peña
horape at compendium.com.ar
horape at uninet.edu



More information about the asterisk-ss7 mailing list