Beispiel #1
0
        bool PcapInitIO(string adapter)
        {
            StringBuilder errbuf = new StringBuilder(PCAP_ERRBUF_SIZE);

            //Set PS2 MAC Based on Adapter MAC
            if ((adHandle = NativeMethods.pcap_open_live(adapter,
                                                         65536,
                                                         switched ? 1 : 0,
                                                         1,
                                                         errbuf)) == IntPtr.Zero)
            {
                Log_Error(errbuf.ToString());
                Log_Error("Unable to open the adapter. " + adapter + "is not supported by WinPcap");
                return(false);
            }

            if (!PcapIsValid(adHandle, true))
            {
                return(false);
            }

            if (NativeMethods.pcap_setnonblock(adHandle, 1, errbuf) == -1)
            {
                Log_Error("WARNING: Error setting non-blocking mode. Default mode will be used");
            }

            //Don't bother with pcap logs yet

            if (switched)
            {
                //Setup Filter
                string filter_mac = "{0:x2}:{1:x2}:{2:x2}:{3:x2}:{4:x2}:{5:x2}";
                string filter     = "(ether broadcast or ether multicast or ether dst {0}) and not ether src {0}";

                filter_mac = string.Format(filter_mac, ps2MAC[0], ps2MAC[1], ps2MAC[2], ps2MAC[3], ps2MAC[4], ps2MAC[5]);
                filter     = string.Format(filter, filter_mac);

                bpf_program program = new bpf_program();
                if (NativeMethods.pcap_compile(adHandle, ref program, filter, 1, PCAP_NETMASK_UNKNOWN) == -1)
                {
                    Log_Error("Error calling pcap_compile: " + NativeMethods.pcap_geterr(adHandle));
                    return(false);
                }

                if (NativeMethods.pcap_setfilter(adHandle, ref program) == -1)
                {
                    Log_Error("Error setting filter: " + NativeMethods.pcap_geterr(adHandle));
                    return(false);
                }

                NativeMethods.pcap_freecode(ref program);
            }

            pcapRunning = true;

            return(true);
        }
Beispiel #2
0
 public static extern int PacketSetBpf(IntPtr AdapterObject, bpf_program fp);
Beispiel #3
0
 public static extern int pcap_setfilter(IntPtr p, ref bpf_program ptr_bpf_program);
Beispiel #4
0
 public static extern void pcap_freecode(ref bpf_program ptr_bpf_program);
Beispiel #5
0
 public static extern int pcap_compile(IntPtr p, ref bpf_program ptr_bpf_program, string str, int optimize, int netmask);