Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import pcap;
- import std.stdio;
- import std.c.stdio;
- import std.string;
- import std.conv;
- import std.c.time;
- import std.socket;
- void main()
- {
- //pointer containing all the devs
- pcap_if_t *alldevs;
- pcap_if_t *d;
- //our error buffer
- char [PCAP_ERRBUF_SIZE] errbuf;
- // Retrieve the device list from the local machine
- if (pcap_findalldevs(&alldevs, cast(char*)(toStringz(errbuf))) == -1)
- {
- writeln("Error in pcap_findalldevs: ", errbuf);
- return;
- }
- //building a loop of all devs and letting the user chose one
- pcap_if_t * [] listDevs=[];
- pcap_if_t * chosenDev;
- int i=0;
- d=alldevs;
- for(i=0;d!=null;i++){
- listDevs~=d;
- printf("%i - (%s) \n",i,d.description);
- d=d.next;
- }
- writeln("what interface should we use?");
- string chosenstring=readln();
- //readline ads an /n, strip it
- chosenstring=chosenstring[0..$-1];
- //some basic checks
- if(!chosenstring.isNumeric()){
- writeln("not a number");
- return;
- }
- //converting it to an integer
- int chosenindex=to!(int)(chosenstring);
- //bounds checking
- if(chosenindex < 0 || chosenindex >= i){
- writeln("invalid index");
- return;
- }
- chosenDev=listDevs[chosenindex];
- pcap_t * handle;
- //our wanted name, 65536 garantuees a whole package and 1000 is the read timeout
- handle=pcap_open_live(chosenDev.name, 65536, PCAP_OPENFLAG_PROMISCUOUS, 1000, cast(char *)toStringz(errbuf));
- if(handle==null){
- writeln("could not open a handle to the chosen device");
- return;
- }
- writeln("listening...");
- pcap_loop(handle, 0, &packet_handler, null);
- writeln("^pff, I quit it");
- scope(exit){
- pcap_freealldevs(alldevs);
- }
- }
- /* Callback function invoked by libpcap for every incoming packet */
- void packet_handler(ubyte *param, const pcap_pkthdr *header, const ubyte *pkt_data)
- {
- writeln("let's try some timeval parsing shall we?");
- timeval * time=cast(timeval *)&header.ts;
- writeln(time);
- writeln("and here we are with our acces violation");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement