From 0b0e159fe0cab820e28909901443214e54912e0a Mon Sep 17 00:00:00 2001 From: Marcus Birkin Date: Sat, 25 May 2024 19:09:35 +0100 Subject: [PATCH 1/4] Replace WinPcap with WinPcap 4.1.2 Developer's Pack Replaces full WinPcap distribution with Developer's Pack --- libs/WinPcap-413-173-b4.7z | Bin 604648 -> 0 bytes libs/WinPcap-413-173-b4/Bin/Packet.dll | Bin 117248 -> 0 bytes libs/WinPcap-413-173-b4/Bin/wpcap.dll | Bin 307712 -> 0 bytes libs/WinPcap-413-173-b4/Bin/x64/Packet.dll | Bin 139776 -> 0 bytes libs/WinPcap-413-173-b4/Bin/x64/wpcap.dll | Bin 348672 -> 0 bytes libs/WinPcap-413-173-b4/Include/Packet32.h | 361 --- libs/WinPcap-413-173-b4/Include/pcap/ipnet.h | 43 - libs/WinPcap-413-173-b4/Include/pcap/nflog.h | 92 - libs/WinPcap-413-173-b4/Include/pcap/pcap.h | 485 ---- libs/WinPcap-413-173-b4/Lib/Packet.lib | Bin 8446 -> 0 bytes libs/WinPcap-413-173-b4/Lib/wpcap.lib | Bin 19144 -> 0 bytes libs/WinPcap-413-173-b4/Lib/x64/Packet.lib | Bin 8286 -> 0 bytes libs/WinPcap-413-173-b4/Lib/x64/wpcap.lib | Bin 18726 -> 0 bytes .../docs/html/Packet_8h.html | 333 --- .../docs/html/Packet_8h_source.html | 727 ----- .../docs/html/Win32-Extensions_8h.html | 736 ----- .../docs/html/Win32-Extensions_8h_source.html | 188 -- .../docs/html/annotated.html | 91 - libs/WinPcap-413-173-b4/docs/html/bc_s.png | Bin 676 -> 0 bytes libs/WinPcap-413-173-b4/docs/html/bdwn.png | Bin 147 -> 0 bytes .../WinPcap-413-173-b4/docs/html/classes.html | 81 - libs/WinPcap-413-173-b4/docs/html/closed.png | Bin 132 -> 0 bytes .../docs/html/deprecated.html | 59 - .../dir_1d0b26b30525be7735e8363d5b4dcb01.html | 63 - .../dir_4ee79fd2d246ba2ad1fa267b628a7962.html | 63 - .../dir_727ab9403fd1ff980053b79c3716665a.html | 61 - .../dir_9a2aa2d3a350e553d14931ec4e0c1514.html | 61 - .../dir_9a623c46ccb35c88e86317a093d60fd6.html | 61 - .../dir_a1b0b199cde94c7dd9a3a0ee49bcda2f.html | 63 - .../dir_bfdf43d97a736b6e7ff8b75a9a91328c.html | 61 - .../dir_c57c37b343d3a4fff0db7d2b1fca2561.html | 61 - .../dir_dea2d635c47186b23668f72adc643e04.html | 61 - .../dir_ec5e29f73a75356204c75c00d090044c.html | 61 - libs/WinPcap-413-173-b4/docs/html/doxygen.png | Bin 3779 -> 0 bytes .../docs/html/doxygen__groups_8txt.html | 57 - .../docs/html/dynsections.js | 104 - libs/WinPcap-413-173-b4/docs/html/files.html | 69 - .../docs/html/ftv2blank.png | Bin 86 -> 0 bytes libs/WinPcap-413-173-b4/docs/html/ftv2doc.png | Bin 746 -> 0 bytes .../docs/html/ftv2folderclosed.png | Bin 616 -> 0 bytes .../docs/html/ftv2folderopen.png | Bin 597 -> 0 bytes .../docs/html/ftv2lastnode.png | Bin 86 -> 0 bytes .../WinPcap-413-173-b4/docs/html/ftv2link.png | Bin 746 -> 0 bytes .../docs/html/ftv2mlastnode.png | Bin 246 -> 0 bytes .../docs/html/ftv2mnode.png | Bin 246 -> 0 bytes .../WinPcap-413-173-b4/docs/html/ftv2node.png | Bin 86 -> 0 bytes .../docs/html/ftv2plastnode.png | Bin 229 -> 0 bytes .../docs/html/ftv2pnode.png | Bin 229 -> 0 bytes .../docs/html/ftv2splitbar.png | Bin 314 -> 0 bytes .../docs/html/ftv2vertline.png | Bin 86 -> 0 bytes .../docs/html/funcs_2pcap_8h.html | 270 -- .../docs/html/funcs_2pcap_8h_source.html | 308 --- .../docs/html/globals_c.html | 110 - .../docs/html/globals_d.html | 107 - .../docs/html/globals_e.html | 122 - .../docs/html/globals_g.html | 110 - .../docs/html/globals_i.html | 98 - .../docs/html/globals_j.html | 128 - .../docs/html/globals_k.html | 92 - .../docs/html/globals_m.html | 128 - .../docs/html/globals_o.html | 98 - .../docs/html/globals_s.html | 116 - .../docs/html/globals_t.html | 95 - .../docs/html/globals_u.html | 98 - .../docs/html/group__NPF__code.html | 1671 ----------- .../docs/html/group__NPF__include.html | 796 ------ .../docs/html/group__NPF__ioctl.html | 400 --- .../docs/html/group__NPF__jitter.html | 1864 ------------- .../html/group__remote__auth__methods.html | 51 - .../docs/html/group__remote__open__flags.html | 51 - .../docs/html/group__remote__pri__func.html | 51 - .../docs/html/group__remote__pri__struct.html | 1075 -------- .../html/group__remote__samp__methods.html | 51 - .../docs/html/group__remote__source__ID.html | 51 - .../html/group__remote__source__string.html | 51 - .../docs/html/group__remote__struct.html | 68 - .../docs/html/group__remotefunc.html | 51 - .../docs/html/group__wpcap.html | 113 - .../docs/html/group__wpcap__def.html | 275 -- .../docs/html/group__wpcap__tut.html | 80 - .../docs/html/group__wpcap__tut1.html | 102 - .../docs/html/group__wpcap__tut2.html | 236 -- .../docs/html/group__wpcap__tut3.html | 161 -- .../docs/html/group__wpcap__tut4.html | 158 -- .../docs/html/group__wpcap__tut5.html | 83 - .../docs/html/group__wpcap__tut6.html | 302 -- .../docs/html/group__wpcap__tut7.html | 458 --- .../docs/html/group__wpcap__tut8.html | 313 --- .../docs/html/group__wpcap__tut9.html | 227 -- .../docs/html/group__wpcapfunc.html | 2427 ---------------- .../docs/html/group__wpcapsamps.html | 518 ---- .../docs/html/incs_2pcap_8h.html | 125 - .../docs/html/incs_2pcap_8h_source.html | 216 -- libs/WinPcap-413-173-b4/docs/html/index.hhc | 1353 --------- .../docs/html/ioctls_8h.html | 120 - .../docs/html/ioctls_8h_source.html | 134 - .../docs/html/jitter_8h.html | 283 -- .../docs/html/jitter_8h_source.html | 377 --- libs/WinPcap-413-173-b4/docs/html/jquery.js | 39 - .../docs/html/main_8txt.html | 57 - .../WinPcap-413-173-b4/docs/html/modules.html | 88 - libs/WinPcap-413-173-b4/docs/html/nav_f.png | Bin 153 -> 0 bytes libs/WinPcap-413-173-b4/docs/html/nav_g.png | Bin 95 -> 0 bytes libs/WinPcap-413-173-b4/docs/html/nav_h.png | Bin 98 -> 0 bytes libs/WinPcap-413-173-b4/docs/html/open.png | Bin 123 -> 0 bytes libs/WinPcap-413-173-b4/docs/html/pages.html | 56 - .../docs/html/pcap-remote_8h.html | 730 ----- .../docs/html/pcap-remote_8h_source.html | 422 --- .../docs/html/structJIT__BPF__Filter.html | 111 - .../docs/html/structPacketHeader.html | 115 - .../docs/html/struct__DEVICE__EXTENSION.html | 113 - .../docs/html/struct__INTERNAL__REQUEST.html | 147 - .../docs/html/struct__OPEN__INSTANCE.html | 1001 ------- .../docs/html/struct__PACKET__OID__DATA.html | 130 - .../docs/html/struct__PACKET__RESERVED.html | 170 -- .../html/struct____CPU__Private__Data.html | 280 -- .../docs/html/structactivehosts.html | 125 - .../docs/html/structbinary__stream.html | 152 - .../docs/html/structpacket__file__header.html | 210 -- .../docs/html/structpcap__addr.html | 171 -- .../docs/html/structpcap__file__header.html | 215 -- .../docs/html/structpcap__if.html | 171 -- .../docs/html/structpcap__pkthdr.html | 134 - .../docs/html/structpcap__send__queue.html | 133 - .../docs/html/structpcap__stat.html | 134 - .../docs/html/structrpcap__auth.html | 152 - .../docs/html/structrpcap__filter.html | 133 - .../html/structrpcap__filterbpf__insn.html | 152 - .../html/structrpcap__findalldevs__if.html | 171 -- .../structrpcap__findalldevs__ifaddr.html | 152 - .../docs/html/structrpcap__header.html | 152 - .../docs/html/structrpcap__openreply.html | 115 - .../docs/html/structrpcap__pkthdr.html | 172 -- .../docs/html/structrpcap__sampling.html | 152 - .../docs/html/structrpcap__startcapreply.html | 133 - .../docs/html/structrpcap__startcapreq.html | 152 - .../docs/html/structrpcap__stats.html | 152 - .../docs/html/structsf__pkthdr.html | 131 - .../WinPcap-413-173-b4/docs/html/sync_off.png | Bin 853 -> 0 bytes libs/WinPcap-413-173-b4/docs/html/sync_on.png | Bin 845 -> 0 bytes libs/WinPcap-413-173-b4/docs/html/tab_a.png | Bin 142 -> 0 bytes libs/WinPcap-413-173-b4/docs/html/tab_b.png | Bin 169 -> 0 bytes libs/WinPcap-413-173-b4/docs/html/tab_h.png | Bin 177 -> 0 bytes libs/WinPcap-413-173-b4/docs/html/tab_s.png | Bin 184 -> 0 bytes libs/WinPcap-413-173-b4/docs/html/tabs.css | 60 - .../docs/html/wpcap__remote_8htm.html | 59 - .../docs/html/wpcap__remote_8htm_source.html | 407 --- .../docs/html/wpcap__tut1_8txt.html | 57 - .../docs/html/wpcap__tut2_8txt.html | 57 - .../docs/html/wpcap__tut3_8txt.html | 57 - .../docs/html/wpcap__tut4_8txt.html | 57 - .../docs/html/wpcap__tut5_8txt.html | 57 - .../docs/html/wpcap__tut6_8txt.html | 57 - .../docs/html/wpcap__tut7_8txt.html | 57 - .../docs/html/wpcap__tut8_8txt.html | 57 - .../docs/html/wpcap__tut9_8txt.html | 57 - .../docs/html/wpcap__tut_8txt.html | 57 - .../Examples-pcap/GNUmakefile | 20 +- .../Examples-pcap/MakeaAll.dsw | 274 +- .../Examples-pcap/MakeaAll.sln | 232 +- .../Examples-pcap/UDPdump/GNUmakefile | 34 +- .../Examples-pcap/UDPdump/UDPdump.dsp | 220 +- .../Examples-pcap}/UDPdump/UDPdump.dsw | 58 +- .../Examples-pcap/UDPdump/UDPdump.vcproj | 728 ++--- .../Examples-pcap/UDPdump/udpdump.c | 484 ++-- .../Examples-pcap/basic_dump/GNUmakefile | 34 +- .../Examples-pcap/basic_dump/basic_dump.c | 218 +- .../Examples-pcap/basic_dump}/basic_dump.dsp | 220 +- .../Examples-pcap/basic_dump/basic_dump.dsw | 58 +- .../basic_dump/basic_dump.vcproj | 728 ++--- .../Examples-pcap/basic_dump_ex/GNUmakefile | 34 +- .../basic_dump_ex/basic_dump_ex.c | 212 +- .../basic_dump_ex/basic_dump_ex.dsp | 220 +- .../basic_dump_ex/basic_dump_ex.dsw | 58 +- .../basic_dump_ex/basic_dump_ex.vcproj | 728 ++--- .../Examples-pcap/iflist/GNUmakefile | 34 +- .../Examples-pcap/iflist/iflist.c | 344 +-- .../Examples-pcap/iflist/iflist.dsp | 220 +- .../Examples-pcap/iflist/iflist.dsw | 58 +- .../Examples-pcap/iflist/iflist.vcproj | 728 ++--- .../Examples-pcap/pcap_filter/GNUmakefile | 34 +- .../Examples-pcap/pcap_filter/Makefile.unix | 9 + .../Examples-pcap/pcap_filter/pcap_filter.c | 358 +-- .../pcap_filter/pcap_filter.dsp | 220 +- .../Examples-pcap/pcap_filter/pcap_filter.dsw | 58 +- .../pcap_filter/pcap_filter.vcproj | 728 ++--- .../Examples-pcap/pktdump_ex/GNUmakefile | 28 +- .../Examples-pcap/pktdump_ex/pktdump_ex.c | 332 +-- .../Examples-pcap/pktdump_ex/pktdump_ex.dsp | 220 +- .../Examples-pcap}/pktdump_ex/pktdump_ex.dsw | 58 +- .../pktdump_ex/pktdump_ex.vcproj | 728 ++--- .../Examples-pcap/readfile/GNUmakefile | 34 +- .../Examples-pcap/readfile/readfile.c | 122 +- .../Examples-pcap/readfile}/readfile.dsp | 220 +- .../Examples-pcap/readfile/readfile.dsw | 58 +- .../Examples-pcap/readfile/readfile.vcproj | 728 ++--- .../Examples-pcap/readfile_ex/GNUmakefile | 34 +- .../Examples-pcap/readfile_ex/readfile_ex.c | 112 +- .../readfile_ex}/readfile_ex.dsp | 220 +- .../Examples-pcap/readfile_ex/readfile_ex.dsw | 58 +- .../readfile_ex/readfile_ex.vcproj | 728 ++--- .../Examples-pcap/savedump/GNUmakefile | 34 +- .../Examples-pcap/savedump/savedump.c | 222 +- .../Examples-pcap/savedump}/savedump.dsp | 220 +- .../Examples-pcap/savedump/savedump.dsw | 58 +- .../Examples-pcap/savedump/savedump.vcproj | 728 ++--- .../Examples-pcap/sendpack/GNUmakefile | 34 +- .../Examples-pcap/sendpack/sendpack.c | 136 +- .../Examples-pcap/sendpack}/sendpack.dsp | 220 +- .../Examples-pcap/sendpack/sendpack.dsw | 58 +- .../Examples-pcap/sendpack/sendpack.vcproj | 728 ++--- .../Examples-remote/MakeAll.sln | 392 +-- .../Examples-remote/MakeaAll.dsw | 442 +-- .../GetMacAddress/GetMacAddress.c | 304 +- .../GetMacAddress/GetMacAddress.dsp | 210 +- .../GetMacAddress/GetMacAddress.vcproj | 728 ++--- .../TestPacketCapture/TestPacketCapture.c | 486 ++-- .../TestPacketCapture/TestPacketCapture.dsp | 210 +- .../TestPacketCapture.vcproj | 728 ++--- .../TestPacketSend/TestPacketSend.c | 470 ++-- .../TestPacketSend/TestPacketSend.dsp | 214 +- .../TestPacketSend/TestPacketSend.vcproj | 728 ++--- .../Examples-remote/PacketDriver/readme.txt | 4 +- .../Examples-remote/UDPdump/UDPdump.dsp | 220 +- .../Examples-remote}/UDPdump/UDPdump.dsw | 58 +- .../Examples-remote/UDPdump/UDPdump.vcproj | 728 ++--- .../Examples-remote/UDPdump/udpdump.c | 458 +-- .../UserLevelBridge/UserBridge.c | 932 +++---- .../UserLevelBridge/UserBridge.dsp | 212 +- .../UserLevelBridge/UserBridge.dsw | 58 +- .../UserLevelBridge/UserBridge.vcproj | 728 ++--- .../Examples-remote/iflist/iflist.c | 352 +-- .../Examples-remote/iflist/iflist.dsp | 220 +- .../Examples-remote/iflist/iflist.dsw | 58 +- .../Examples-remote/iflist/iflist.vcproj | 728 ++--- .../Examples-remote/misc/MakeAll.sln | 152 +- .../Examples-remote/misc/MakeaAll.dsw | 178 +- .../Examples-remote/misc/basic_dump.c | 200 +- .../Examples-remote/misc}/basic_dump.dsp | 220 +- .../Examples-remote/misc/basic_dump.vcproj | 728 ++--- .../Examples-remote/misc/basic_dump_ex.c | 196 +- .../Examples-remote/misc/basic_dump_ex.dsp | 220 +- .../Examples-remote/misc/basic_dump_ex.vcproj | 728 ++--- .../Examples-remote/misc/readfile.c | 156 +- .../Examples-remote/misc}/readfile.dsp | 220 +- .../Examples-remote/misc/readfile.vcproj | 728 ++--- .../Examples-remote/misc/readfile_ex.c | 146 +- .../Examples-remote/misc}/readfile_ex.dsp | 220 +- .../Examples-remote/misc/readfile_ex.vcproj | 728 ++--- .../Examples-remote/misc/savedump.c | 208 +- .../Examples-remote/misc}/savedump.dsp | 220 +- .../Examples-remote/misc/savedump.vcproj | 728 ++--- .../Examples-remote/misc/sendpack.c | 128 +- .../Examples-remote/misc}/sendpack.dsp | 220 +- .../Examples-remote/misc/sendpack.vcproj | 728 ++--- .../Examples-remote/pcap_filter/pcap_filter.c | 336 +-- .../pcap_filter/pcap_filter.dsp | 220 +- .../pcap_filter/pcap_filter.dsw | 58 +- .../pcap_filter/pcap_filter.vcproj | 728 ++--- .../Examples-remote/pcap_fopen/pcap_fopen.cpp | 188 +- .../pcap_fopen/pcap_fopen.vcproj | 728 ++--- .../Examples-remote/pktdump_ex/pktdump_ex.c | 326 +-- .../Examples-remote/pktdump_ex/pktdump_ex.dsp | 220 +- .../pktdump_ex/pktdump_ex.dsw | 58 +- .../pktdump_ex/pktdump_ex.vcproj | 728 ++--- .../Examples-remote/sendcap/sencap.dsw | 58 +- .../Examples-remote/sendcap/sendcap.c | 366 +-- .../Examples-remote/sendcap/sendcap.dsp | 220 +- .../Examples-remote/sendcap/sendcap.vcproj | 728 ++--- .../Examples-remote/smp_1/smp_1.c | 268 +- .../Examples-remote/smp_1/smp_1.dsp | 204 +- .../Examples-remote/smp_1/smp_1.dsw | 58 +- .../Examples-remote/smp_1/smp_1.vcproj | 728 ++--- .../Examples-remote/tcptop/tcptop.c | 314 +-- .../Examples-remote/tcptop/tcptop.dsp | 220 +- .../Examples-remote/tcptop/tcptop.dsw | 58 +- .../Examples-remote/tcptop/tcptop.vcproj | 728 ++--- libs/WpdPack_4_1_2/Include/Packet32.h | 359 +++ .../Include/Win32-Extensions.h | 226 +- .../Include/bittypes.h | 64 +- .../Include/ip6_misc.h | 2 + .../Include/pcap-bpf.h | 4 +- .../Include/pcap-namedb.h | 2 + .../Include/pcap-stdinc.h | 66 +- .../Include/pcap.h | 2 + .../Include/pcap/bluetooth.h | 19 +- .../Include/pcap/bpf.h | 684 +---- .../Include/pcap/namedb.h | 2 + libs/WpdPack_4_1_2/Include/pcap/pcap.h | 407 +++ .../Include/pcap/sll.h | 2 + .../Include/pcap/usb.h | 65 +- .../Include/pcap/vlan.h | 2 + libs/WpdPack_4_1_2/Include/remote-ext.h | 444 +++ libs/WpdPack_4_1_2/Lib/Packet.lib | Bin 0 -> 8450 bytes libs/WpdPack_4_1_2/Lib/libpacket.a | Bin 0 -> 20814 bytes libs/WpdPack_4_1_2/Lib/libwpcap.a | Bin 0 -> 54276 bytes libs/WpdPack_4_1_2/Lib/wpcap.lib | Bin 0 -> 19320 bytes libs/WpdPack_4_1_2/Lib/x64/Packet.lib | Bin 0 -> 8290 bytes libs/WpdPack_4_1_2/Lib/x64/wpcap.lib | Bin 0 -> 18892 bytes .../docs/WinPcap_docs.html | 18 +- libs/WpdPack_4_1_2/docs/html/Packet_8h.html | 201 ++ .../docs/html/Packet_8h_source.html | 572 ++++ .../docs/html/Win32-Extensions_8h.html | 700 +++++ .../docs/html/Win32-Extensions_8h_source.html | 139 + libs/WpdPack_4_1_2/docs/html/annotated.html | 70 + libs/WpdPack_4_1_2/docs/html/classes.html | 45 + libs/WpdPack_4_1_2/docs/html/daemon_8h.html | 81 + .../docs/html/daemon_8h_source.html | 82 + libs/WpdPack_4_1_2/docs/html/deprecated.html | 51 + libs/WpdPack_4_1_2/docs/html/doxygen.png | Bin 0 -> 1281 bytes .../docs/html/doxygen__groups_8txt.html | 36 + .../docs/html/dump.gif | Bin .../docs/html/encoding.gif | Bin libs/WpdPack_4_1_2/docs/html/fileconf_8h.html | 78 + .../docs/html/fileconf_8h_source.html | 74 + libs/WpdPack_4_1_2/docs/html/files.html | 50 + libs/WpdPack_4_1_2/docs/html/ftv2blank.png | Bin 0 -> 174 bytes libs/WpdPack_4_1_2/docs/html/ftv2doc.png | Bin 0 -> 255 bytes .../docs/html/ftv2folderclosed.png | Bin 0 -> 259 bytes .../docs/html/ftv2folderopen.png | Bin 0 -> 261 bytes libs/WpdPack_4_1_2/docs/html/ftv2lastnode.png | Bin 0 -> 233 bytes libs/WpdPack_4_1_2/docs/html/ftv2link.png | Bin 0 -> 358 bytes .../WpdPack_4_1_2/docs/html/ftv2mlastnode.png | Bin 0 -> 160 bytes libs/WpdPack_4_1_2/docs/html/ftv2mnode.png | Bin 0 -> 194 bytes libs/WpdPack_4_1_2/docs/html/ftv2node.png | Bin 0 -> 235 bytes .../WpdPack_4_1_2/docs/html/ftv2plastnode.png | Bin 0 -> 165 bytes libs/WpdPack_4_1_2/docs/html/ftv2pnode.png | Bin 0 -> 200 bytes libs/WpdPack_4_1_2/docs/html/ftv2vertline.png | Bin 0 -> 229 bytes .../docs/html/funcs_2pcap_8h.html | 176 ++ .../docs/html/funcs_2pcap_8h_source.html | 206 ++ .../docs/html/functions.html | 185 +- .../docs/html/functions_vars.html | 185 +- .../docs/html/globals.html | 99 +- .../docs/html/globals_0x62.html} | 102 +- .../WpdPack_4_1_2/docs/html/globals_0x63.html | 99 + .../WpdPack_4_1_2/docs/html/globals_0x64.html | 96 + .../WpdPack_4_1_2/docs/html/globals_0x65.html | 105 + .../WpdPack_4_1_2/docs/html/globals_0x66.html | 78 + .../WpdPack_4_1_2/docs/html/globals_0x67.html | 96 + .../WpdPack_4_1_2/docs/html/globals_0x68.html | 75 + .../WpdPack_4_1_2/docs/html/globals_0x69.html | 81 + .../WpdPack_4_1_2/docs/html/globals_0x6a.html | 99 + .../WpdPack_4_1_2/docs/html/globals_0x6b.html | 75 + .../WpdPack_4_1_2/docs/html/globals_0x6d.html | 128 + .../docs/html/globals_0x6e.html} | 99 +- .../WpdPack_4_1_2/docs/html/globals_0x6f.html | 81 + .../docs/html/globals_0x70.html} | 182 +- .../docs/html/globals_0x72.html} | 108 +- .../WpdPack_4_1_2/docs/html/globals_0x73.html | 105 + .../WpdPack_4_1_2/docs/html/globals_0x74.html | 81 + .../WpdPack_4_1_2/docs/html/globals_0x75.html | 81 + .../docs/html/globals_defs.html | 172 +- .../docs/html/globals_enum.html | 59 +- .../docs/html/globals_eval.html | 59 +- .../docs/html/globals_func.html | 144 +- .../docs/html/globals_type.html | 65 +- .../docs/html/globals_vars.html | 71 +- .../docs/html/group__NPF.html | 71 +- .../docs/html/group__NPF__code.html | 1667 +++++++++++ .../docs/html/group__NPF__include.html | 756 +++++ .../docs/html/group__NPF__ioctl.html | 376 +++ .../docs/html/group__NPF__jitter.html | 1652 +++++++++++ .../docs/html/group__compilation.html | 56 +- .../docs/html/group__internals.html | 65 +- .../docs/html/group__language.html | 52 +- .../docs/html/group__packetapi.html | 52 +- .../docs/html/group__remote.html | 68 +- .../html/group__remote__auth__methods.html | 76 + .../docs/html/group__remote__open__flags.html | 135 + .../docs/html/group__remote__pri__func.html | 33 + .../docs/html/group__remote__pri__struct.html | 1033 +++++++ .../html/group__remote__samp__methods.html | 95 + .../docs/html/group__remote__source__ID.html | 95 + .../html/group__remote__source__string.html | 112 + .../docs/html/group__remote__struct.html | 85 + .../docs/html/group__remotefunc.html | 33 + .../WpdPack_4_1_2/docs/html/group__wpcap.html | 81 + .../docs/html/group__wpcap__def.html | 279 ++ .../docs/html/group__wpcap__tut.html | 34 + .../docs/html/group__wpcap__tut1.html | 81 + .../docs/html/group__wpcap__tut2.html | 216 ++ .../docs/html/group__wpcap__tut3.html | 140 + .../docs/html/group__wpcap__tut4.html | 137 + .../docs/html/group__wpcap__tut5.html | 62 + .../docs/html/group__wpcap__tut6.html | 279 ++ .../docs/html/group__wpcap__tut7.html | 438 +++ .../docs/html/group__wpcap__tut8.html | 292 ++ .../docs/html/group__wpcap__tut9.html | 206 ++ .../docs/html/group__wpcapfunc.html | 2452 +++++++++++++++++ .../docs/html/group__wpcapsamps.html | 500 ++++ .../docs/html/incs_2pcap_8h.html | 78 + .../docs/html/incs_2pcap_8h_source.html | 155 ++ libs/WpdPack_4_1_2/docs/html/index.hhc | 171 ++ .../docs/html/index.hhk | 345 ++- .../docs/html/index.hhp | 110 +- libs/WpdPack_4_1_2/docs/html/index.html | 16 + .../docs/html/internals-arch.gif | Bin libs/WpdPack_4_1_2/docs/html/ioctls_8h.html | 73 + .../docs/html/ioctls_8h_source.html | 105 + libs/WpdPack_4_1_2/docs/html/jitter_8h.html | 160 ++ .../docs/html/jitter_8h_source.html | 321 +++ .../docs/html/main.html} | 52 +- libs/WpdPack_4_1_2/docs/html/main_8txt.html | 36 + libs/WpdPack_4_1_2/docs/html/modules.html | 73 + .../docs/html/npf-dump.gif | Bin .../docs/html/npf-ndis.gif | Bin .../docs/html/npf-npf.gif | Bin libs/WpdPack_4_1_2/docs/html/pages.html | 32 + .../docs/html/pcap-remote_8h.html | 626 +++++ .../docs/html/pcap-remote_8h_source.html | 307 +++ .../docs/html/remote-ext_8h.html | 444 +++ .../docs/html/remote-ext_8h_source.html | 171 ++ libs/WpdPack_4_1_2/docs/html/rpcapd_8h.html | 162 ++ .../docs/html/rpcapd_8h_source.html | 88 + .../docs/html/stats.gif | Bin .../docs/html/stats_wpcap.gif | Bin .../docs/html/structJIT__BPF__Filter.html | 88 + .../docs/html/structPacketHeader.html | 92 + .../docs/html/struct__DEVICE__EXTENSION.html | 90 + .../docs/html/struct__INTERNAL__REQUEST.html | 124 + .../docs/html/struct__OPEN__INSTANCE.html | 978 +++++++ .../docs/html/struct__PACKET__OID__DATA.html | 107 + .../docs/html/struct__PACKET__RESERVED.html | 147 + .../html/struct____CPU__Private__Data.html | 257 ++ .../docs/html/structactive__pars.html | 94 + .../docs/html/structactivehosts.html | 102 + .../docs/html/structbinary__stream.html | 129 + .../docs/html/structdaemon__slpars.html | 126 + .../docs/html/structpacket__file__header.html | 187 ++ .../docs/html/structpcap__addr.html | 148 + .../docs/html/structpcap__file__header.html | 192 ++ .../docs/html/structpcap__if.html | 148 + .../docs/html/structpcap__pkthdr.html | 111 + .../docs/html/structpcap__rmtauth.html | 115 + .../docs/html/structpcap__samp.html | 89 + .../docs/html/structpcap__send__queue.html | 107 + .../docs/html/structpcap__stat.html | 130 + .../docs/html/structrpcap__auth.html | 129 + .../docs/html/structrpcap__filter.html | 110 + .../html/structrpcap__filterbpf__insn.html | 129 + .../html/structrpcap__findalldevs__if.html | 148 + .../structrpcap__findalldevs__ifaddr.html | 129 + .../docs/html/structrpcap__header.html | 129 + .../docs/html/structrpcap__openreply.html | 92 + .../docs/html/structrpcap__pkthdr.html | 149 + .../docs/html/structrpcap__sampling.html | 129 + .../docs/html/structrpcap__startcapreply.html | 110 + .../docs/html/structrpcap__startcapreq.html | 129 + .../docs/html/structrpcap__stats.html | 129 + .../docs/html/structsf__pkthdr.html | 108 + .../docs/html/style.css | 0 libs/WpdPack_4_1_2/docs/html/tab_b.gif | Bin 0 -> 35 bytes libs/WpdPack_4_1_2/docs/html/tab_l.gif | Bin 0 -> 706 bytes libs/WpdPack_4_1_2/docs/html/tab_r.gif | Bin 0 -> 2585 bytes libs/WpdPack_4_1_2/docs/html/tabs.css | 105 + libs/WpdPack_4_1_2/docs/html/tree.html | 175 ++ libs/WpdPack_4_1_2/docs/html/utils_8h.html | 74 + .../docs/html/utils_8h_source.html | 77 + .../WpdPack_4_1_2/docs/html/win32-svc_8h.html | 59 + .../docs/html/win32-svc_8h_source.html | 65 + .../docs/html/winpcap.gif | Bin .../docs/html/winpcap_small.gif | Bin .../docs/html/wpcap__remote_8htm.html | 180 ++ .../docs/html/wpcap__remote_8htm_source.html | 382 +++ .../docs/html/wpcap__tut1_8txt.html | 36 + .../docs/html/wpcap__tut2_8txt.html | 36 + .../docs/html/wpcap__tut3_8txt.html | 36 + .../docs/html/wpcap__tut4_8txt.html | 36 + .../docs/html/wpcap__tut5_8txt.html | 36 + .../docs/html/wpcap__tut6_8txt.html | 36 + .../docs/html/wpcap__tut7_8txt.html | 36 + .../docs/html/wpcap__tut8_8txt.html | 36 + .../docs/html/wpcap__tut9_8txt.html | 36 + .../docs/html/wpcap__tut_8txt.html | 36 + libs/libs.cmake | 6 +- 475 files changed, 46459 insertions(+), 49040 deletions(-) delete mode 100644 libs/WinPcap-413-173-b4.7z delete mode 100644 libs/WinPcap-413-173-b4/Bin/Packet.dll delete mode 100644 libs/WinPcap-413-173-b4/Bin/wpcap.dll delete mode 100644 libs/WinPcap-413-173-b4/Bin/x64/Packet.dll delete mode 100644 libs/WinPcap-413-173-b4/Bin/x64/wpcap.dll delete mode 100644 libs/WinPcap-413-173-b4/Include/Packet32.h delete mode 100644 libs/WinPcap-413-173-b4/Include/pcap/ipnet.h delete mode 100644 libs/WinPcap-413-173-b4/Include/pcap/nflog.h delete mode 100644 libs/WinPcap-413-173-b4/Include/pcap/pcap.h delete mode 100644 libs/WinPcap-413-173-b4/Lib/Packet.lib delete mode 100644 libs/WinPcap-413-173-b4/Lib/wpcap.lib delete mode 100644 libs/WinPcap-413-173-b4/Lib/x64/Packet.lib delete mode 100644 libs/WinPcap-413-173-b4/Lib/x64/wpcap.lib delete mode 100644 libs/WinPcap-413-173-b4/docs/html/Packet_8h.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/Packet_8h_source.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/Win32-Extensions_8h.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/Win32-Extensions_8h_source.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/annotated.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/bc_s.png delete mode 100644 libs/WinPcap-413-173-b4/docs/html/bdwn.png delete mode 100644 libs/WinPcap-413-173-b4/docs/html/classes.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/closed.png delete mode 100644 libs/WinPcap-413-173-b4/docs/html/deprecated.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/dir_1d0b26b30525be7735e8363d5b4dcb01.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/dir_4ee79fd2d246ba2ad1fa267b628a7962.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/dir_727ab9403fd1ff980053b79c3716665a.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/dir_9a2aa2d3a350e553d14931ec4e0c1514.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/dir_9a623c46ccb35c88e86317a093d60fd6.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/dir_a1b0b199cde94c7dd9a3a0ee49bcda2f.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/dir_bfdf43d97a736b6e7ff8b75a9a91328c.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/dir_c57c37b343d3a4fff0db7d2b1fca2561.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/dir_dea2d635c47186b23668f72adc643e04.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/dir_ec5e29f73a75356204c75c00d090044c.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/doxygen.png delete mode 100644 libs/WinPcap-413-173-b4/docs/html/doxygen__groups_8txt.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/dynsections.js delete mode 100644 libs/WinPcap-413-173-b4/docs/html/files.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/ftv2blank.png delete mode 100644 libs/WinPcap-413-173-b4/docs/html/ftv2doc.png delete mode 100644 libs/WinPcap-413-173-b4/docs/html/ftv2folderclosed.png delete mode 100644 libs/WinPcap-413-173-b4/docs/html/ftv2folderopen.png delete mode 100644 libs/WinPcap-413-173-b4/docs/html/ftv2lastnode.png delete mode 100644 libs/WinPcap-413-173-b4/docs/html/ftv2link.png delete mode 100644 libs/WinPcap-413-173-b4/docs/html/ftv2mlastnode.png delete mode 100644 libs/WinPcap-413-173-b4/docs/html/ftv2mnode.png delete mode 100644 libs/WinPcap-413-173-b4/docs/html/ftv2node.png delete mode 100644 libs/WinPcap-413-173-b4/docs/html/ftv2plastnode.png delete mode 100644 libs/WinPcap-413-173-b4/docs/html/ftv2pnode.png delete mode 100644 libs/WinPcap-413-173-b4/docs/html/ftv2splitbar.png delete mode 100644 libs/WinPcap-413-173-b4/docs/html/ftv2vertline.png delete mode 100644 libs/WinPcap-413-173-b4/docs/html/funcs_2pcap_8h.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/funcs_2pcap_8h_source.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/globals_c.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/globals_d.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/globals_e.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/globals_g.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/globals_i.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/globals_j.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/globals_k.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/globals_m.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/globals_o.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/globals_s.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/globals_t.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/globals_u.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/group__NPF__code.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/group__NPF__include.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/group__NPF__ioctl.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/group__NPF__jitter.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/group__remote__auth__methods.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/group__remote__open__flags.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/group__remote__pri__func.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/group__remote__pri__struct.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/group__remote__samp__methods.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/group__remote__source__ID.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/group__remote__source__string.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/group__remote__struct.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/group__remotefunc.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/group__wpcap.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/group__wpcap__def.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/group__wpcap__tut.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/group__wpcap__tut1.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/group__wpcap__tut2.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/group__wpcap__tut3.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/group__wpcap__tut4.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/group__wpcap__tut5.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/group__wpcap__tut6.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/group__wpcap__tut7.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/group__wpcap__tut8.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/group__wpcap__tut9.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/group__wpcapfunc.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/group__wpcapsamps.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/incs_2pcap_8h.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/incs_2pcap_8h_source.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/index.hhc delete mode 100644 libs/WinPcap-413-173-b4/docs/html/ioctls_8h.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/ioctls_8h_source.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/jitter_8h.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/jitter_8h_source.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/jquery.js delete mode 100644 libs/WinPcap-413-173-b4/docs/html/main_8txt.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/modules.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/nav_f.png delete mode 100644 libs/WinPcap-413-173-b4/docs/html/nav_g.png delete mode 100644 libs/WinPcap-413-173-b4/docs/html/nav_h.png delete mode 100644 libs/WinPcap-413-173-b4/docs/html/open.png delete mode 100644 libs/WinPcap-413-173-b4/docs/html/pages.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/pcap-remote_8h.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/pcap-remote_8h_source.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/structJIT__BPF__Filter.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/structPacketHeader.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/struct__DEVICE__EXTENSION.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/struct__INTERNAL__REQUEST.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/struct__OPEN__INSTANCE.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/struct__PACKET__OID__DATA.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/struct__PACKET__RESERVED.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/struct____CPU__Private__Data.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/structactivehosts.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/structbinary__stream.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/structpacket__file__header.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/structpcap__addr.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/structpcap__file__header.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/structpcap__if.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/structpcap__pkthdr.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/structpcap__send__queue.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/structpcap__stat.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/structrpcap__auth.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/structrpcap__filter.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/structrpcap__filterbpf__insn.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/structrpcap__findalldevs__if.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/structrpcap__findalldevs__ifaddr.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/structrpcap__header.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/structrpcap__openreply.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/structrpcap__pkthdr.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/structrpcap__sampling.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/structrpcap__startcapreply.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/structrpcap__startcapreq.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/structrpcap__stats.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/structsf__pkthdr.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/sync_off.png delete mode 100644 libs/WinPcap-413-173-b4/docs/html/sync_on.png delete mode 100644 libs/WinPcap-413-173-b4/docs/html/tab_a.png delete mode 100644 libs/WinPcap-413-173-b4/docs/html/tab_b.png delete mode 100644 libs/WinPcap-413-173-b4/docs/html/tab_h.png delete mode 100644 libs/WinPcap-413-173-b4/docs/html/tab_s.png delete mode 100644 libs/WinPcap-413-173-b4/docs/html/tabs.css delete mode 100644 libs/WinPcap-413-173-b4/docs/html/wpcap__remote_8htm.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/wpcap__remote_8htm_source.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/wpcap__tut1_8txt.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/wpcap__tut2_8txt.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/wpcap__tut3_8txt.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/wpcap__tut4_8txt.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/wpcap__tut5_8txt.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/wpcap__tut6_8txt.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/wpcap__tut7_8txt.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/wpcap__tut8_8txt.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/wpcap__tut9_8txt.html delete mode 100644 libs/WinPcap-413-173-b4/docs/html/wpcap__tut_8txt.html rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-pcap/GNUmakefile (96%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-pcap/MakeaAll.dsw (94%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-pcap/MakeaAll.sln (98%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-pcap/UDPdump/GNUmakefile (94%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-pcap/UDPdump/UDPdump.dsp (97%) rename libs/{WinPcap-413-173-b4/Examples-remote => WpdPack_4_1_2/Examples-pcap}/UDPdump/UDPdump.dsw (94%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-pcap/UDPdump/UDPdump.vcproj (95%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-pcap/UDPdump/udpdump.c (96%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-pcap/basic_dump/GNUmakefile (94%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-pcap/basic_dump/basic_dump.c (96%) rename libs/{WinPcap-413-173-b4/Examples-remote/misc => WpdPack_4_1_2/Examples-pcap/basic_dump}/basic_dump.dsp (97%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-pcap/basic_dump/basic_dump.dsw (94%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-pcap/basic_dump/basic_dump.vcproj (95%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-pcap/basic_dump_ex/GNUmakefile (95%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-pcap/basic_dump_ex/basic_dump_ex.c (96%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-pcap/basic_dump_ex/basic_dump_ex.dsp (97%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-pcap/basic_dump_ex/basic_dump_ex.dsw (94%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-pcap/basic_dump_ex/basic_dump_ex.vcproj (95%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-pcap/iflist/GNUmakefile (94%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-pcap/iflist/iflist.c (72%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-pcap/iflist/iflist.dsp (97%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-pcap/iflist/iflist.dsw (94%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-pcap/iflist/iflist.vcproj (95%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-pcap/pcap_filter/GNUmakefile (94%) create mode 100644 libs/WpdPack_4_1_2/Examples-pcap/pcap_filter/Makefile.unix rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-pcap/pcap_filter/pcap_filter.c (95%) rename libs/{WinPcap-413-173-b4/Examples-remote => WpdPack_4_1_2/Examples-pcap}/pcap_filter/pcap_filter.dsp (97%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-pcap/pcap_filter/pcap_filter.dsw (94%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-pcap/pcap_filter/pcap_filter.vcproj (95%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-pcap/pktdump_ex/GNUmakefile (94%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-pcap/pktdump_ex/pktdump_ex.c (96%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-pcap/pktdump_ex/pktdump_ex.dsp (97%) rename libs/{WinPcap-413-173-b4/Examples-remote => WpdPack_4_1_2/Examples-pcap}/pktdump_ex/pktdump_ex.dsw (94%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-pcap/pktdump_ex/pktdump_ex.vcproj (95%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-pcap/readfile/GNUmakefile (94%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-pcap/readfile/readfile.c (94%) rename libs/{WinPcap-413-173-b4/Examples-remote/misc => WpdPack_4_1_2/Examples-pcap/readfile}/readfile.dsp (97%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-pcap/readfile/readfile.dsw (94%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-pcap/readfile/readfile.vcproj (95%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-pcap/readfile_ex/GNUmakefile (95%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-pcap/readfile_ex/readfile_ex.c (94%) rename libs/{WinPcap-413-173-b4/Examples-remote/misc => WpdPack_4_1_2/Examples-pcap/readfile_ex}/readfile_ex.dsp (97%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-pcap/readfile_ex/readfile_ex.dsw (94%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-pcap/readfile_ex/readfile_ex.vcproj (95%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-pcap/savedump/GNUmakefile (94%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-pcap/savedump/savedump.c (96%) rename libs/{WinPcap-413-173-b4/Examples-remote/misc => WpdPack_4_1_2/Examples-pcap/savedump}/savedump.dsp (97%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-pcap/savedump/savedump.dsw (94%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-pcap/savedump/savedump.vcproj (95%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-pcap/sendpack/GNUmakefile (94%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-pcap/sendpack/sendpack.c (95%) rename libs/{WinPcap-413-173-b4/Examples-remote/misc => WpdPack_4_1_2/Examples-pcap/sendpack}/sendpack.dsp (97%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-pcap/sendpack/sendpack.dsw (94%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-pcap/sendpack/sendpack.vcproj (95%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-remote/MakeAll.sln (98%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-remote/MakeaAll.dsw (94%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-remote/PacketDriver/GetMacAddress/GetMacAddress.c (96%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-remote/PacketDriver/GetMacAddress/GetMacAddress.dsp (97%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-remote/PacketDriver/GetMacAddress/GetMacAddress.vcproj (95%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-remote/PacketDriver/TestPacketCapture/TestPacketCapture.c (96%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-remote/PacketDriver/TestPacketCapture/TestPacketCapture.dsp (97%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-remote/PacketDriver/TestPacketCapture/TestPacketCapture.vcproj (95%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-remote/PacketDriver/TestPacketSend/TestPacketSend.c (96%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-remote/PacketDriver/TestPacketSend/TestPacketSend.dsp (97%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-remote/PacketDriver/TestPacketSend/TestPacketSend.vcproj (95%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-remote/PacketDriver/readme.txt (98%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-remote/UDPdump/UDPdump.dsp (97%) rename libs/{WinPcap-413-173-b4/Examples-pcap => WpdPack_4_1_2/Examples-remote}/UDPdump/UDPdump.dsw (94%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-remote/UDPdump/UDPdump.vcproj (95%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-remote/UDPdump/udpdump.c (96%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-remote/UserLevelBridge/UserBridge.c (96%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-remote/UserLevelBridge/UserBridge.dsp (97%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-remote/UserLevelBridge/UserBridge.dsw (94%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-remote/UserLevelBridge/UserBridge.vcproj (95%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-remote/iflist/iflist.c (73%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-remote/iflist/iflist.dsp (97%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-remote/iflist/iflist.dsw (94%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-remote/iflist/iflist.vcproj (95%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-remote/misc/MakeAll.sln (98%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-remote/misc/MakeaAll.dsw (94%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-remote/misc/basic_dump.c (96%) rename libs/{WinPcap-413-173-b4/Examples-pcap/basic_dump => WpdPack_4_1_2/Examples-remote/misc}/basic_dump.dsp (97%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-remote/misc/basic_dump.vcproj (95%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-remote/misc/basic_dump_ex.c (96%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-remote/misc/basic_dump_ex.dsp (97%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-remote/misc/basic_dump_ex.vcproj (95%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-remote/misc/readfile.c (95%) rename libs/{WinPcap-413-173-b4/Examples-pcap/readfile => WpdPack_4_1_2/Examples-remote/misc}/readfile.dsp (97%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-remote/misc/readfile.vcproj (95%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-remote/misc/readfile_ex.c (96%) rename libs/{WinPcap-413-173-b4/Examples-pcap/readfile_ex => WpdPack_4_1_2/Examples-remote/misc}/readfile_ex.dsp (97%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-remote/misc/readfile_ex.vcproj (95%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-remote/misc/savedump.c (96%) rename libs/{WinPcap-413-173-b4/Examples-pcap/savedump => WpdPack_4_1_2/Examples-remote/misc}/savedump.dsp (97%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-remote/misc/savedump.vcproj (95%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-remote/misc/sendpack.c (95%) rename libs/{WinPcap-413-173-b4/Examples-pcap/sendpack => WpdPack_4_1_2/Examples-remote/misc}/sendpack.dsp (97%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-remote/misc/sendpack.vcproj (95%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-remote/pcap_filter/pcap_filter.c (95%) rename libs/{WinPcap-413-173-b4/Examples-pcap => WpdPack_4_1_2/Examples-remote}/pcap_filter/pcap_filter.dsp (97%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-remote/pcap_filter/pcap_filter.dsw (94%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-remote/pcap_filter/pcap_filter.vcproj (95%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-remote/pcap_fopen/pcap_fopen.cpp (97%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-remote/pcap_fopen/pcap_fopen.vcproj (95%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-remote/pktdump_ex/pktdump_ex.c (96%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-remote/pktdump_ex/pktdump_ex.dsp (97%) rename libs/{WinPcap-413-173-b4/Examples-pcap => WpdPack_4_1_2/Examples-remote}/pktdump_ex/pktdump_ex.dsw (94%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-remote/pktdump_ex/pktdump_ex.vcproj (95%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-remote/sendcap/sencap.dsw (94%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-remote/sendcap/sendcap.c (96%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-remote/sendcap/sendcap.dsp (97%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-remote/sendcap/sendcap.vcproj (95%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-remote/smp_1/smp_1.c (96%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-remote/smp_1/smp_1.dsp (97%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-remote/smp_1/smp_1.dsw (94%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-remote/smp_1/smp_1.vcproj (95%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-remote/tcptop/tcptop.c (96%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-remote/tcptop/tcptop.dsp (97%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-remote/tcptop/tcptop.dsw (94%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Examples-remote/tcptop/tcptop.vcproj (95%) create mode 100644 libs/WpdPack_4_1_2/Include/Packet32.h rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Include/Win32-Extensions.h (94%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Include/bittypes.h (69%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Include/ip6_misc.h (97%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Include/pcap-bpf.h (95%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Include/pcap-namedb.h (95%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Include/pcap-stdinc.h (71%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Include/pcap.h (95%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Include/pcap/bluetooth.h (85%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Include/pcap/bpf.h (57%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Include/pcap/namedb.h (97%) create mode 100644 libs/WpdPack_4_1_2/Include/pcap/pcap.h rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Include/pcap/sll.h (98%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Include/pcap/usb.h (60%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/Include/pcap/vlan.h (95%) create mode 100644 libs/WpdPack_4_1_2/Include/remote-ext.h create mode 100644 libs/WpdPack_4_1_2/Lib/Packet.lib create mode 100644 libs/WpdPack_4_1_2/Lib/libpacket.a create mode 100644 libs/WpdPack_4_1_2/Lib/libwpcap.a create mode 100644 libs/WpdPack_4_1_2/Lib/wpcap.lib create mode 100644 libs/WpdPack_4_1_2/Lib/x64/Packet.lib create mode 100644 libs/WpdPack_4_1_2/Lib/x64/wpcap.lib rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/docs/WinPcap_docs.html (95%) create mode 100644 libs/WpdPack_4_1_2/docs/html/Packet_8h.html create mode 100644 libs/WpdPack_4_1_2/docs/html/Packet_8h_source.html create mode 100644 libs/WpdPack_4_1_2/docs/html/Win32-Extensions_8h.html create mode 100644 libs/WpdPack_4_1_2/docs/html/Win32-Extensions_8h_source.html create mode 100644 libs/WpdPack_4_1_2/docs/html/annotated.html create mode 100644 libs/WpdPack_4_1_2/docs/html/classes.html create mode 100644 libs/WpdPack_4_1_2/docs/html/daemon_8h.html create mode 100644 libs/WpdPack_4_1_2/docs/html/daemon_8h_source.html create mode 100644 libs/WpdPack_4_1_2/docs/html/deprecated.html create mode 100644 libs/WpdPack_4_1_2/docs/html/doxygen.png create mode 100644 libs/WpdPack_4_1_2/docs/html/doxygen__groups_8txt.html rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/docs/html/dump.gif (100%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/docs/html/encoding.gif (100%) create mode 100644 libs/WpdPack_4_1_2/docs/html/fileconf_8h.html create mode 100644 libs/WpdPack_4_1_2/docs/html/fileconf_8h_source.html create mode 100644 libs/WpdPack_4_1_2/docs/html/files.html create mode 100644 libs/WpdPack_4_1_2/docs/html/ftv2blank.png create mode 100644 libs/WpdPack_4_1_2/docs/html/ftv2doc.png create mode 100644 libs/WpdPack_4_1_2/docs/html/ftv2folderclosed.png create mode 100644 libs/WpdPack_4_1_2/docs/html/ftv2folderopen.png create mode 100644 libs/WpdPack_4_1_2/docs/html/ftv2lastnode.png create mode 100644 libs/WpdPack_4_1_2/docs/html/ftv2link.png create mode 100644 libs/WpdPack_4_1_2/docs/html/ftv2mlastnode.png create mode 100644 libs/WpdPack_4_1_2/docs/html/ftv2mnode.png create mode 100644 libs/WpdPack_4_1_2/docs/html/ftv2node.png create mode 100644 libs/WpdPack_4_1_2/docs/html/ftv2plastnode.png create mode 100644 libs/WpdPack_4_1_2/docs/html/ftv2pnode.png create mode 100644 libs/WpdPack_4_1_2/docs/html/ftv2vertline.png create mode 100644 libs/WpdPack_4_1_2/docs/html/funcs_2pcap_8h.html create mode 100644 libs/WpdPack_4_1_2/docs/html/funcs_2pcap_8h_source.html rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/docs/html/functions.html (81%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/docs/html/functions_vars.html (81%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/docs/html/globals.html (53%) rename libs/{WinPcap-413-173-b4/docs/html/globals_b.html => WpdPack_4_1_2/docs/html/globals_0x62.html} (70%) create mode 100644 libs/WpdPack_4_1_2/docs/html/globals_0x63.html create mode 100644 libs/WpdPack_4_1_2/docs/html/globals_0x64.html create mode 100644 libs/WpdPack_4_1_2/docs/html/globals_0x65.html create mode 100644 libs/WpdPack_4_1_2/docs/html/globals_0x66.html create mode 100644 libs/WpdPack_4_1_2/docs/html/globals_0x67.html create mode 100644 libs/WpdPack_4_1_2/docs/html/globals_0x68.html create mode 100644 libs/WpdPack_4_1_2/docs/html/globals_0x69.html create mode 100644 libs/WpdPack_4_1_2/docs/html/globals_0x6a.html create mode 100644 libs/WpdPack_4_1_2/docs/html/globals_0x6b.html create mode 100644 libs/WpdPack_4_1_2/docs/html/globals_0x6d.html rename libs/{WinPcap-413-173-b4/docs/html/globals_n.html => WpdPack_4_1_2/docs/html/globals_0x6e.html} (70%) create mode 100644 libs/WpdPack_4_1_2/docs/html/globals_0x6f.html rename libs/{WinPcap-413-173-b4/docs/html/globals_p.html => WpdPack_4_1_2/docs/html/globals_0x70.html} (73%) rename libs/{WinPcap-413-173-b4/docs/html/globals_r.html => WpdPack_4_1_2/docs/html/globals_0x72.html} (72%) create mode 100644 libs/WpdPack_4_1_2/docs/html/globals_0x73.html create mode 100644 libs/WpdPack_4_1_2/docs/html/globals_0x74.html create mode 100644 libs/WpdPack_4_1_2/docs/html/globals_0x75.html rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/docs/html/globals_defs.html (83%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/docs/html/globals_enum.html (50%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/docs/html/globals_eval.html (55%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/docs/html/globals_func.html (82%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/docs/html/globals_type.html (73%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/docs/html/globals_vars.html (55%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/docs/html/group__NPF.html (85%) create mode 100644 libs/WpdPack_4_1_2/docs/html/group__NPF__code.html create mode 100644 libs/WpdPack_4_1_2/docs/html/group__NPF__include.html create mode 100644 libs/WpdPack_4_1_2/docs/html/group__NPF__ioctl.html create mode 100644 libs/WpdPack_4_1_2/docs/html/group__NPF__jitter.html rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/docs/html/group__compilation.html (89%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/docs/html/group__internals.html (63%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/docs/html/group__language.html (93%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/docs/html/group__packetapi.html (73%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/docs/html/group__remote.html (84%) create mode 100644 libs/WpdPack_4_1_2/docs/html/group__remote__auth__methods.html create mode 100644 libs/WpdPack_4_1_2/docs/html/group__remote__open__flags.html create mode 100644 libs/WpdPack_4_1_2/docs/html/group__remote__pri__func.html create mode 100644 libs/WpdPack_4_1_2/docs/html/group__remote__pri__struct.html create mode 100644 libs/WpdPack_4_1_2/docs/html/group__remote__samp__methods.html create mode 100644 libs/WpdPack_4_1_2/docs/html/group__remote__source__ID.html create mode 100644 libs/WpdPack_4_1_2/docs/html/group__remote__source__string.html create mode 100644 libs/WpdPack_4_1_2/docs/html/group__remote__struct.html create mode 100644 libs/WpdPack_4_1_2/docs/html/group__remotefunc.html create mode 100644 libs/WpdPack_4_1_2/docs/html/group__wpcap.html create mode 100644 libs/WpdPack_4_1_2/docs/html/group__wpcap__def.html create mode 100644 libs/WpdPack_4_1_2/docs/html/group__wpcap__tut.html create mode 100644 libs/WpdPack_4_1_2/docs/html/group__wpcap__tut1.html create mode 100644 libs/WpdPack_4_1_2/docs/html/group__wpcap__tut2.html create mode 100644 libs/WpdPack_4_1_2/docs/html/group__wpcap__tut3.html create mode 100644 libs/WpdPack_4_1_2/docs/html/group__wpcap__tut4.html create mode 100644 libs/WpdPack_4_1_2/docs/html/group__wpcap__tut5.html create mode 100644 libs/WpdPack_4_1_2/docs/html/group__wpcap__tut6.html create mode 100644 libs/WpdPack_4_1_2/docs/html/group__wpcap__tut7.html create mode 100644 libs/WpdPack_4_1_2/docs/html/group__wpcap__tut8.html create mode 100644 libs/WpdPack_4_1_2/docs/html/group__wpcap__tut9.html create mode 100644 libs/WpdPack_4_1_2/docs/html/group__wpcapfunc.html create mode 100644 libs/WpdPack_4_1_2/docs/html/group__wpcapsamps.html create mode 100644 libs/WpdPack_4_1_2/docs/html/incs_2pcap_8h.html create mode 100644 libs/WpdPack_4_1_2/docs/html/incs_2pcap_8h_source.html create mode 100644 libs/WpdPack_4_1_2/docs/html/index.hhc rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/docs/html/index.hhk (91%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/docs/html/index.hhp (70%) create mode 100644 libs/WpdPack_4_1_2/docs/html/index.html rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/docs/html/internals-arch.gif (100%) create mode 100644 libs/WpdPack_4_1_2/docs/html/ioctls_8h.html create mode 100644 libs/WpdPack_4_1_2/docs/html/ioctls_8h_source.html create mode 100644 libs/WpdPack_4_1_2/docs/html/jitter_8h.html create mode 100644 libs/WpdPack_4_1_2/docs/html/jitter_8h_source.html rename libs/{WinPcap-413-173-b4/docs/html/index.html => WpdPack_4_1_2/docs/html/main.html} (89%) create mode 100644 libs/WpdPack_4_1_2/docs/html/main_8txt.html create mode 100644 libs/WpdPack_4_1_2/docs/html/modules.html rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/docs/html/npf-dump.gif (100%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/docs/html/npf-ndis.gif (100%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/docs/html/npf-npf.gif (100%) create mode 100644 libs/WpdPack_4_1_2/docs/html/pages.html create mode 100644 libs/WpdPack_4_1_2/docs/html/pcap-remote_8h.html create mode 100644 libs/WpdPack_4_1_2/docs/html/pcap-remote_8h_source.html create mode 100644 libs/WpdPack_4_1_2/docs/html/remote-ext_8h.html create mode 100644 libs/WpdPack_4_1_2/docs/html/remote-ext_8h_source.html create mode 100644 libs/WpdPack_4_1_2/docs/html/rpcapd_8h.html create mode 100644 libs/WpdPack_4_1_2/docs/html/rpcapd_8h_source.html rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/docs/html/stats.gif (100%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/docs/html/stats_wpcap.gif (100%) create mode 100644 libs/WpdPack_4_1_2/docs/html/structJIT__BPF__Filter.html create mode 100644 libs/WpdPack_4_1_2/docs/html/structPacketHeader.html create mode 100644 libs/WpdPack_4_1_2/docs/html/struct__DEVICE__EXTENSION.html create mode 100644 libs/WpdPack_4_1_2/docs/html/struct__INTERNAL__REQUEST.html create mode 100644 libs/WpdPack_4_1_2/docs/html/struct__OPEN__INSTANCE.html create mode 100644 libs/WpdPack_4_1_2/docs/html/struct__PACKET__OID__DATA.html create mode 100644 libs/WpdPack_4_1_2/docs/html/struct__PACKET__RESERVED.html create mode 100644 libs/WpdPack_4_1_2/docs/html/struct____CPU__Private__Data.html create mode 100644 libs/WpdPack_4_1_2/docs/html/structactive__pars.html create mode 100644 libs/WpdPack_4_1_2/docs/html/structactivehosts.html create mode 100644 libs/WpdPack_4_1_2/docs/html/structbinary__stream.html create mode 100644 libs/WpdPack_4_1_2/docs/html/structdaemon__slpars.html create mode 100644 libs/WpdPack_4_1_2/docs/html/structpacket__file__header.html create mode 100644 libs/WpdPack_4_1_2/docs/html/structpcap__addr.html create mode 100644 libs/WpdPack_4_1_2/docs/html/structpcap__file__header.html create mode 100644 libs/WpdPack_4_1_2/docs/html/structpcap__if.html create mode 100644 libs/WpdPack_4_1_2/docs/html/structpcap__pkthdr.html create mode 100644 libs/WpdPack_4_1_2/docs/html/structpcap__rmtauth.html create mode 100644 libs/WpdPack_4_1_2/docs/html/structpcap__samp.html create mode 100644 libs/WpdPack_4_1_2/docs/html/structpcap__send__queue.html create mode 100644 libs/WpdPack_4_1_2/docs/html/structpcap__stat.html create mode 100644 libs/WpdPack_4_1_2/docs/html/structrpcap__auth.html create mode 100644 libs/WpdPack_4_1_2/docs/html/structrpcap__filter.html create mode 100644 libs/WpdPack_4_1_2/docs/html/structrpcap__filterbpf__insn.html create mode 100644 libs/WpdPack_4_1_2/docs/html/structrpcap__findalldevs__if.html create mode 100644 libs/WpdPack_4_1_2/docs/html/structrpcap__findalldevs__ifaddr.html create mode 100644 libs/WpdPack_4_1_2/docs/html/structrpcap__header.html create mode 100644 libs/WpdPack_4_1_2/docs/html/structrpcap__openreply.html create mode 100644 libs/WpdPack_4_1_2/docs/html/structrpcap__pkthdr.html create mode 100644 libs/WpdPack_4_1_2/docs/html/structrpcap__sampling.html create mode 100644 libs/WpdPack_4_1_2/docs/html/structrpcap__startcapreply.html create mode 100644 libs/WpdPack_4_1_2/docs/html/structrpcap__startcapreq.html create mode 100644 libs/WpdPack_4_1_2/docs/html/structrpcap__stats.html create mode 100644 libs/WpdPack_4_1_2/docs/html/structsf__pkthdr.html rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/docs/html/style.css (100%) create mode 100644 libs/WpdPack_4_1_2/docs/html/tab_b.gif create mode 100644 libs/WpdPack_4_1_2/docs/html/tab_l.gif create mode 100644 libs/WpdPack_4_1_2/docs/html/tab_r.gif create mode 100644 libs/WpdPack_4_1_2/docs/html/tabs.css create mode 100644 libs/WpdPack_4_1_2/docs/html/tree.html create mode 100644 libs/WpdPack_4_1_2/docs/html/utils_8h.html create mode 100644 libs/WpdPack_4_1_2/docs/html/utils_8h_source.html create mode 100644 libs/WpdPack_4_1_2/docs/html/win32-svc_8h.html create mode 100644 libs/WpdPack_4_1_2/docs/html/win32-svc_8h_source.html rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/docs/html/winpcap.gif (100%) rename libs/{WinPcap-413-173-b4 => WpdPack_4_1_2}/docs/html/winpcap_small.gif (100%) create mode 100644 libs/WpdPack_4_1_2/docs/html/wpcap__remote_8htm.html create mode 100644 libs/WpdPack_4_1_2/docs/html/wpcap__remote_8htm_source.html create mode 100644 libs/WpdPack_4_1_2/docs/html/wpcap__tut1_8txt.html create mode 100644 libs/WpdPack_4_1_2/docs/html/wpcap__tut2_8txt.html create mode 100644 libs/WpdPack_4_1_2/docs/html/wpcap__tut3_8txt.html create mode 100644 libs/WpdPack_4_1_2/docs/html/wpcap__tut4_8txt.html create mode 100644 libs/WpdPack_4_1_2/docs/html/wpcap__tut5_8txt.html create mode 100644 libs/WpdPack_4_1_2/docs/html/wpcap__tut6_8txt.html create mode 100644 libs/WpdPack_4_1_2/docs/html/wpcap__tut7_8txt.html create mode 100644 libs/WpdPack_4_1_2/docs/html/wpcap__tut8_8txt.html create mode 100644 libs/WpdPack_4_1_2/docs/html/wpcap__tut9_8txt.html create mode 100644 libs/WpdPack_4_1_2/docs/html/wpcap__tut_8txt.html diff --git a/libs/WinPcap-413-173-b4.7z b/libs/WinPcap-413-173-b4.7z deleted file mode 100644 index dec658b4cdb9b14c8379c50d0fc699b1a2edad29..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 604648 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

Nr*iE|qm1 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

5c@))b=p}8zlWutWTIsU+>IQpI2e& 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 diff --git a/libs/WinPcap-413-173-b4/Bin/Packet.dll b/libs/WinPcap-413-173-b4/Bin/Packet.dll deleted file mode 100644 index 6b15cfa131b1e1b24567d0beca4016cb1a028309..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 117248 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 z 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 F{y&DrSUdm# diff --git a/libs/WinPcap-413-173-b4/Bin/wpcap.dll b/libs/WinPcap-413-173-b4/Bin/wpcap.dll deleted file mode 100644 index 0668eab63863bd3742644d817f2f38f8287c17aa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 307712 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

0cJ4Xt)${0ym&(mh-wFHvkr3Ah~ z$do4=!p|KVaV(2sUl^Gt;m@g4)IIt^|0~o3@ zDt8LdH_%tGWSu}x&^oW7y^URM2EyK!=Is zV43n&D$lrqO3vq-)Bw{$V5De&%s;VTEDzY@7}HX2=2>r3FbYKNfG7?{#4BIsS$ip` z`}J>lO@1wPo>eAT=_IMT&rKqqa+vXF@gAp)xxDADWS;e36yn@P-4gte3P1aZw0YL! zQWEyQ$$H$U&2)7ePI6VI)@W(~Rx!N_!h#y+Lx&XTE@cZ6QJ z@G_gNn}DRCI)Gc>l%Uk6wRc8q3+}2;r)u>S}Vp^r7pW;m znHBQ8>1KWx-Ldu&b&1`hF84>(rFOBpJbI(LJXy)*zB_C0<6?&WM(y3)#N_4yZdz0e zgc&poj#WjB+Pl=(btMsNE)5|AZD|Rw8_K4(CH#a?MkD-meCUgCwI#6y@y>m*@H!Fs zsB%u<$69#2$>E0y%me!?3^Al|0KOI?i#R7)I_cPe>Z9e}(-a^5B81W9=PR#`c{8qy zW2`~#(??|xpCu#4e@+_)7Hat!7e1Eva>Tga5;x!QF?XgZu~Wx&4@-n8HRnc!t{K`YiHbWg^vWwfm`7xq*3b?u^|`Ak+s>%nE{4Mc z2F-9})vbnNoI7_JieYxRhRO~=5g)pja+=h=brIl)VS3^x2pebm^?=`)>9_temqC=L zB%Yc!UI&t~b=~{`6#fPI34OdYtJJ&{a@G&2*2BUhyorz^^zo7p0D~l5CrRa}Z_=Aj zObW1suAPZ!p{%^U85YkOAbpBVB=3@i!41<#1W>xzOtt+XV=HUAM{@o{BZZ8V00J%uPzGOT;F_UWGlyoCo75D&1P0)PNq>u;UvnV(E_w-G4dvCFyh`EK4*Mq+3sv&i)Z^l95S#j$ zb2%m#1u$gQqDb(U&MR?27rb>l(+=#Nqe*x&7GV|p$e+qp-mk5wp-X&oncfJQ;1X^ZFPrI z8WCU|^~MbQWlHt!@x4l`DKujeCOqE)4H-2$VgF{PxOcI=;kSCCC)#Nqb=v%vTTKep zcF$<3-Cc%Vi}d56NqeH$?|JQa z=q8!JUC@!f{7*|w=_)qUW`~pOFK&ewIFE^Lo-WJb*o zLx0%OkLf*#=Dcdw+GDHY_1{bap~lFoq)A(~&Gm)iUXfM5C{8%TNn4|TwI5eNtKZUY z!D7W`#07$8i~L&sVPUM_p?b64hh?M!*)3Wz=RVaM$PUE*hgHD@l6~E0Y9AnL6CCpM zJiy!wZL}gJP@99nRtb{&rnKy2sRk(Zut z?f56e3Ok+I>FOCVQ~Qg&>XY5kSBwzz*^<)cFy0c=0xwz`;^wMVr4+d)|JzHy*QQO-r`!l_^+aX3BCf^=&+NnuPS^&93aoF@3}N>b(MXFy9^<3snex-fq@xda|`+aeYNen^OdTd1v2IbXo|acwPg6wYpzlZ# zWvYlV3!Ol3w;rU6j>P2)+or;7eSX`vQeoe=jZ$sfSbb94{;Xd0Zdz` z&cLC=dD0Gb%5IiJwhj8=*W3M_jhG?h+@9#cFZk+V+rp8=Edjkf;C$Eq;TGy}Eb*aj zg5{jSR$}Hxtg{|tGB%g7>-xyiL6Ax(K;bt=Eocd^KM#V}5*F%#uaF31xV-3G8sriS zuQzkdrCHa76h9gr3=@xa{#idI-htKsN-u|p=*Kx#EH*7WVoiicN^2m>;k4{2x#Opm z!1PTU#f!o7;ydjD=Cl!!5^I_WgSMh#HK%1-@9}`1@M^#L!+^O&>pCWnUnvXRI%An$v$1j$5W|#H2$_v1vX?(JTuWh!cR$-K4Jx#S{ z2a=5=(ZMB725SS!m8>I?IxlV~Zq4I)M@p>wenSdTEj3lH0dCeC(3OX!vNDky$x2lz z{fbyOB#KJ4WJ6{Dou#I`cl7E_GU@|V(`Chib4u#9my!(~;~OnzKq{8v{Ji-Gg*DK0sytFiRXh?S&#w z1dq~+jD0(ecMS0sw^BQ84@1INqXsr&%F51bhl3JdFr?mxG#8(TMpauQ=JN z29#7<6kT~he&i0u;bmEsSQrJ)!%^m#h&vMUlE5Kw@eSKoHGYA!;1DNUvUbUj+<|Yk zz4D)qXj$?rjgTX95fji8ipcblJ41ft4u{&Qy^0tFn5Bq-WuBaKjAR-mKXO;)Q_{0U z@&FR`#C3JOv?QoA&jjeb|4<~|WTN?@j>W2Za$xtGWI&<>{* z#a@&ulzvHO6?mQ3kdU`m^(*`M@r5$?6i<47$!5W8k%saUj|SqGI4G!}=V4B*IW7fg zZFEePno!8}l=tvr5;Up!02tjvY%^Jkv*yo@;E{dpJ>4<~hvnIdxl!OcG3kKhVI^rU z5Tm29d8e6+)Ai%Wqan7W6ZB7xNByBg%f1quuq^hCr!vemV`jRzpK7nEb9`ZCtt5!n zbFA;e*IJo8*z2#mQ^*^XDoeKH6zlIS^ut*@j%U$4>JxorUaR%vzs2M8&B`nsS>lT` z;)^q_OBsGhT)9d^H#o`$qKAADW2Jz#_(A#Vr^tYLLHwo>@td;ZH;u9SxtV0aC@Gz1 zqFu_{m$y6bNM1a?OR09v55%E?DJQWZ)z@u&kH_Bw`Vc*$qE!yQmpDY$Fv4NdYMJpj zjtb13L$#Tf_*+P$wgepidUDKHeB4a(Fy2-ho~`9B6MIsB$E%^3iO9tI<-4lCD7VJU zH6x?uTA2z?fs?vR4dlw0AE`QC8KDwaUgVBl1e-FyBMBna7#TYmwRm(AcDG~W(Ueeh z)YxSgF=}S|Q+NcV%do9@ig6q6jNA050@f_5Hsxj^H}4qRTtb*7Rqt+~Z7 zZ2;Zz7?_(raZW%>R+f=X^X9y8EenL5=H5_9y2vf@eYzoi{+!5yvhuQP7?t==k(B3( zr2I43TqP;TMud?lu(M9B-@$((oDecw0|_@zG1h-SqBJ~#s$td#+?E|lUQG2#(Q}YI zmP~V%&Z#J!tGtyW(1XlPc~GsH-2K>K&+y=SCP_(^uY#p2b)!gD?UYdS%2c!YVfj*p zjm7^wAZy3NPxELsD2q8Z0rKS0a;p5;^GHIgu2-u6?wcx^#iXK%U;~?PrgiS>9V>!^ z`V0o+K`F|76O&3~!bY=2Z@cV<)?CxSw(U_~PY+;?j%-WznFJ}4Gg31^KDOccGu9l> z{s|P|cgpt1WZoRSAson0mO3yR!CJWnLkz3ww;=ctRY`n8iuLu!-5SeGe~R9a%`z-J z00c!pp04eUU#za5CyxI^+ zfga(zq%SKYR1C|%gf+J=c~V}eBgwjJ5Lv3I5{Z9uE{wBh7;U$nW!xFx_Gfs&a?x7K z@RZ5^ab|jBd-{<^jyUCvkCjxrb8{}^RVLx9P7_L+$xxfG+|ZEQcr?Z5kI8u3NoI5P z%@=sIb0yVqNj2EqqQ86D4To|YyHb1;Y9-Z?qKmxIp;q-d-HjOUG{PQ_*1jh;Bf?pt zN{2b#6DvzZwS;X3d=hwEPRzD`DJ?Biu7-@FOxZ;srWgEjE$4lR?dx4tsVwHwbgY9Byd2gLs?ySuYtnO#795TqOFm&ERBll}gP zSZoD}t&1p3;IQc~o}lf!ALkG8=q4#jZ%abaz)ji~LnScozndpxtsF6}^{-odA6N8b zsm--=hsYy4Rx1TLEs51ua}NZwVyb0e;+#k<_6RSnY8EE59Owe7T2Yx#$pGg znq5>=y{V2{527d4W&J^sWPPRr21$_kYpn2oXJ&}3RF0EvN|dB+s5)Lzcjeh}d%gag zA4qw$6h-!$%rzb!cUkUi0>XK_Wrx*y1Pg)V=25*XX=%_(J6py9-vAG01@q9w`HoEd zm6U@}`M4CYED(BDuFL)GK*p6=t^X~Os$-(fKOKaO#O{>T)@T}xF5@Y$p;AYzMWidM z$2?3B658$(n9P}?AODK{jMlAw=*(AU4v3yrAI_Nk?Py@~Qp_8+*-5|m<~7u81E11WvP)e6llBrDFp35eE_%mNQ#Y|t9 zv1$TdBOLoKVRCZu&u{9~(q~m~$u(w=G51z~GI7azG zWyEJsuwUjbha&O|aP^%410i!nXr_>~qsLeNNgrEY!uv3@;AmxV#wn;o*c=m}wMd8HI#W$uGtlXoDZj{wXFfGyD&ZQrCbzo%3A(z?3ib8>w?+m}Snq(&%r_oEb3& zS|wt~9{-y4Be7u*>RU6+H8Mpj)+K2J^wuOpJyDq#Ie~-ibU402A?r7O&M5p^Zas;` zS3X{1P2+=vEjSPHLK2{8*3ackro>!XbC9Tey{M>QnVDkdms-y}%3`R<84kx~v6#>f z*1}`~Z;C^)fU%-ygg(P9M$w`OPNyuK*qSc(%R8Z-5$hM=sY~Q=SA^aPO)@)FP@w8f zLP`}?k}6!PR2qLqD5-UTR+N=FhU|HNtgs$>lZ=VsmUEGcQGR*M>N@&udg`<6WRy>- zh4o&<`~RyBjf;-4`%S(+nl?F{c>j^PYgYBd+~_Cyr)l0<^+|m>OR_;rN|^(+I0 zZIiEF9t>`73~s3F=nt#&PLNIhHfjuRsAX6b4}Z-lbX{+! z7X>%)xPG{Bnq}HY>f>%cBF(v3Bg|70CDjk?)pAc=N>P1E-N5?R`jjH2{77&pGV^1_ zoZ-Sz2FqhgGG4o}0F2e#zCSZ-3eISy-q zQB6&yAY@TSy{E2d9M82k@JyrPx5=c{H_LBQu=aA5D(jkxrr0dc7#cE;|04dc;(r1E z<@_(={|Ef5RltSK2WNgBY%amV%4O%QpZzl5s(RNZcV^u5S+w+2%G6Nq?rG2@qYvVQT}h?|5pA@{)3wf$LUsf^djBzMbFi( zKytfR2OF7O^-D{KKv zaFb)#C7<8!`FuzBXNCod@JH56r;sGZvM4Je80U;t#5#YVXx?O@c2chX+?11gQbO@w z@>Da8iURes$2AvCMxnZkndwj0?vy`$X^iF9E%rM4t!fzYpmi_*e=!nz*MilTM!%+a6(*ji30_WLb*A1mBlzQLm1Le4gl@hKw#m}L77%CTfDkBdYRt!omEu+UBRI5 z3kLl_+dvxesF=8s^GeV;x%J7Z2&f1a00DR*#FEv4w(TuRdR<*ZV=wKQ1s9c~m^ z-3eI@*2?3Y_V4mry($;m!1|{4F*MRF$Q>b0_(VL^m)kha-{UlFvO_P>1eqZ&`Z$|r7A1zcy;Lx!e zcA#je&u^YS`+mfj+S$t7TsM8nXL?JLSurZ7B0uM^N4BJE!-RUyiz!aL3enZG zL>Pgu#d$_Pl(Mx;knV}hX>)dVY*m(o9q_I5M$c$$PZCMUkkUi}C@PmZ1+Wfmw>APY zSeq4uNXu@tlE~7Nl)A2Pk_sJG=7#^*(B*Lk@5`dgC$c09x=auu;TNFG8G;ppF295> z^+p%j<|uTTBc%ws1WEe;eRO#m4bZ94zL{~g^Vf@5)!DG#d<^-}CFVkrE_^km z#PWQofMrxn06Cvcji&9gjG}z_8LvH@8=Kh86K-VV(o&QU@_2;NSy-{&i*Ch{Fv!+V zD3nDXAl%xz8+f(Y|=*`u;GPC{ypeW~nYkaf^META&YLd1<-X5le& z2UN|vlU$|}6rrTuN0z_h<|cGr^*Fw4Ok@sa&%jzL!u6Y^jv%m{7qP}YDecMDw~m3T zT_co1U&UDn1H?;i*#v6_YSpr`o-Pbm6eM|_w>!msU<3Qkq6yXc7h$tEJG-EOR+=Rf zU`DiK;)OVQ5XeBresGzA6 z-Ep1g^fLHt!7-lP z(N%-tf;pOGib$%P8AXO8_(YSeB9Xb8d(Bs|Es5SNKP9u|HxHYV=y0nPM#|+l`_-#; zF-Zm%pfXe}H0#)JW|}j*%*Zi&f%Dp*c#YRW!7=+X6Lr;YJ9Og5l;BHzJx4lA5D8Ua zPtKI!W?uV=Wp(UcvlTbpY>C@LZPDSiyH^icfho|^0iAE@yFHz6>pKdJRoODK3s(w~ zO2_R%`l9SkC7hgCG-ee65XYE}XOR`pKTB+1@ zy1ptO0~PYH`odEx)#%=z8~Ju0uqPq1+m&_CP|sWi8?+xxOf?E>*@`#;?ho zldV>1TG(&RE7f$?n3F95maS3jwwokMLQCNo2%|92w8CSh%li{3$SO2_#~>0qlI!G` zU@2Dj#n0zHQ1}UQV#XG6VY(i`$BJv*(=GHN2wi{ToDdX@_gZH4 zE$N=9KkgxjcOY&i)fc4O!?4p#iWdaTBr{MS4sdipQk)$^cM1Bzj2``kBJJ1^!>ST<)r7o#%=qh}=CRdD`t=>SQm2RxD;DmESOp^S!)l~KJCCC{qvyCx6{jGn zB#vn3UC>}!s3Ko`!9Gi$ofWsU63Le3JFJ%spBQr?V-qYBJ;0Q$O30Rw5&oYw^InmS zd{HxB{!+~p{=8Q+f7aBenaIeACG6`S(ZQxqMpWxBkygX$UN8ERusA@f=wZGVVVegc z7DcN?w9E0xh><0vny*HzHYg*HdVX9RtY3PeHY8GY89_w1Ij?7gRvy#v1nQFb%5o${ zlA%r`>5-DpQAc5C64;fsEGY6iDmi8@_D@_KU?Y1oh|<%j%cUl;E1a_!QD!;E`YuT_ zKgMKL)S%aM&Ysjn98#}0m;c4!sT4q_sNb7qr-eSoC5!Ay-ds8B*Aewen}Uu`#1-7* z0)@z1LRuAPN(dE1;j~Rud=^0A@Ka6z5`*8}+EA+;?$ezz!5RjyHEw@}ZoUt-@80+>0bgIPSEO!>@-gjoD2O!0Q zco9O(UudUW*ZoGOk37vB8BR|?zgW&;8K$V8chx`+o>rzv6{NL^2H-pqBv9JrW`Q2? zo>p63?}?Ap;YgKV>{p&}QdO@!rtrJN73Ft}>wEGwB=U)erWO6t`RWq+2xWmo^_R{U zar0GH13<~@{erBn{w6xmapDxEhd65ky$359bOE8>#%b;f*e4{;IA!9bQzt&-l!bHuxS6W!{83ck=A3Mh4z;YCRj|_DnxGCRUtIfRqE!P)7Y6 z)V}OLb8$>wfg|v!Rp(i`l1eKDM};Ki?}CeXgAk4jm@3hZ#i2q~gA{(!O^X&;nWZuEl%)L&9+y_n?UNjMXLUV`-pc+xd$)mSS)@aR)L2W{dfTUOg!};nn=Hm)SF5(QRw!LRI-b*~{ z@auCTRq?90!TdRoQ=E+A{Wwb*(+SMFw8pLUHY|^mG-S#y5Cf08vmFH*yKC z+yPdu>>whVHNlze;ANimF7W{zyp;6#oZ>Yg$T@l)q%f~RR87^kc*AZM1U0+t^dsS} zq-aX#Ux$3$36{R*xh7ciYsIHGB(PM}t%}sg`>_c#`%zJ5zBig-X{s_bcOL8fTUbQd z@8}af>|4Ll^I;$#9Oa}cf*_Kp;pdoJ6<-jsUQqE2(y`)yP2DM1l*GESW)@V_Q*C9#2;sAzHwrpM&No!9(OVln3@geq9ua@8l8KW61IgNu&2aBznUJ~C+kF)Z2lZW2+>(g6IJ7)Wn40Lj_|jM=6orLED|VGp9-LB4hjd; zvpdJ&NvQo$s{m&!myR7;=4_5uiRoeV@3OPRe42Hs6VG7BisNVw7DbpCijji#%08J9 z*)jj6#3kU?s9nKtthgptd!szAtaeNU<(tEJW9vHzbD82AYta;-xk)%>PlXupNr4Ie zT8#G=T6Ir@=81h5C@K__5R+o}8bA+(pDHW~BF)cF;!-hV4oX{bsR$>25G^= z61khF#C;R7t^`-GJU8c$s^BmJcG)A+inFz(I_`jy_3fv60qKjXp5Ie->M5%p*Qe@t z{&m&XA9_{ISzI#N&F!VuJ=0~$)B*(WXfI?^W6Q!}er(H&GUu@)x2~PUyK)x9qegKX zr;Zrfexvw+GJy&6XbMZ}r7T;lrwrUW9V4?$!Vh=3X>?IZ~;W zPR9Dyy5ghNM`s0Vo>iZ}8>|t&ruyh?^rhk$&ww~DiIxP#j04y`iES+I}Cei)E4 zvzo)lAqAGIvVxiN*N~t>vpRj6;h3Yg8c|sSLL~;#~f=?AXqB|fP`)NJqcq| zIT%G7B@O3juftB;udp_e#06(=^q)=_Vch<+2A_LUgK5Myy&7TvCU0N$N{)ma6)WCv zjlz&cOnqK}n-H1@%o^C6eyTU5wtvLCxOSBM&lb{&9>fy73Q#1tQ~xT4af2{)31B4G zZ}MVz>f*SaTD>xkb!a2zu{8rIg(CKTO*#o0F-XC?!=Hgmf>0MJgnB`J89u z>%)onyo`SM9{@z}>c4c<4g2~_c|HO*L^3^|)dOkHtVGH7V=v6%<$qYV6m=YW<>0~d z)hj>q!13;@56kh3!vw%h?7v_cDoFSz5&|*@q}LSy77T1l0-;Z$*H*9QaL(kbLZ4{= z%i|okp`+J)x*i{e6&C?h*VdS^@f8Gr7e1Wm&8k3EKl|LORQoI^@k&3+!oi&1cNV=FecKjU1-ujY#|vv^uuX&bp4oMLZs3;S3CSSq{X> z-E1~ib}$DG?O1)T_ysxb&np50W;gOdb=xAXa?XdJmvMJ;n1=Z~IK<%w1G2UtZ%&Rcd=R zj}*Lb0-m!abtx96yDXyMgTE@-4wjZ!-$}d}T$K{sFwER>&0K4iRNG|FtiJSuXhD4n zsnIF4#tL`pUHz7w7AyRf-gVltL9xP@CZCuS>PX9jx8F-&QExZwOoa5Z?&Mr85sYDJ4##3O^Jsr4JN#|=bwYNDdDi&O z*|2~v<9FhhHQR(qwEuEamNnbx`f3c~PtJiI`)d0M%50%I4RQO|-0IoF8PHKlUX^rG z<;ZcIPrlxt+}i()NodCo`ow=aeLIi;%lKcw|4sa_;Qx01AL8HP?Ok~M#DT}wUET0_ z2$rE2Jl^6_!2|dNH&hEmB33ykCJ_-%_+a!&y*_-5!HWI&6JE;6K=#fPUe1u0FOb)| zOY;1IJGLNxw_pbjy-WUp^krqxkdx|MO@6-k>;q=pLqCH2kKq4e{x9c$A^%bSSMh%* z|BvzS&P;d9zc=J=`B#ob{xZ5-G<1eF6iv6wy0zROtCP9Y>}dZwB7(#Yf8$Qs;lsy4 zn`Dzef=#{|&SuYReHZ4c9yP<(NEN3QygJ9ul%3?fK5v_pu;^lOKT^V?Kj(*Ym9Xe= zkFe;lBP<#qxreIU2#k=k7{%ggqr^o&I$^(m?g`?e!6%4|lFUX|T2v^~qRCS9^SQD# zSg=D`utNyRTzQctA1A_Y*@InSk-WG=rIu!xE%%CRtr6a9%-?SnamEZ>UOlc5Fovf>2r9|L_^ZM%~ zifcQq+o2_{=*BKES90X+JnKqULdFSdm}h;0lDS9zB!2TE4zkY^fm50&I-Q+pU>?0q<~%Llnuj$%N2IQ~>~OG2QOSW4ddC;Oq2h<-2|?i5Sn zSU7IJ_EtGtq-7IgxGXHoC5-4yW(1yo@nx0PHR^VZ@IqqPhY3RUs;{8r#i~9?Nn+>z zeWtXS*t_N)NMu=arJjxx>-lqeN1uAy6t}MG`ToDGr$g$Qa*BFJh{~ANAiv@(+9bW` zMh+Xj(JT`KlHu09ObU1IT~Vp5H?oC|LxJVRxL3j*5RUvt%!%NWcZiqMIr7b)*21UR z0c-SEV3~c`|Epp|0&Tx2UW{f@uE^txCJ1J7w(ZJe3>U#iQi!y~qKr2*E)pGSeB_+T z`G=$ZL-RY7>@s@26ubQ*2q61W+29PfeDMX%VR%GUBQ|~U|xF#KP05oxz_3Mf+EEt>6SE3^ccuD$LF%U`hlu@V%J>L zfz(n}8I&|poP(@p*0rL=qW%_fb;7GdKlra8{57i^!tIL`gwfUhD+rHFKzM+FqG_zm zkVS^i`se#nkb?2^C&L&S;^E#fKHM9|#}N7Ug7FPfa1{k7U~E};@dS(uREN)!1C*oZ z!9b$41FHxG6=7nQ!Pb)Id}P+5L3TiWp91wl0rh--BoBqJhkJ68Ign1_%jZMdNpg4- z!niuS?&?v-)nj_R`GlYPCSggxndw0$NI@K^3X4=oqs8ToY2a)2c+JLcw>t?3&yh%o z3^@NCr@KsJNbE=AARoIT>(R*EM<2DWW+0HS>EB-L(Z3z_7}F|QO&1!|ZZw<3U`c%3 zAQpIXnFE6xU_yQkf#wOsm(XJamA96)iwP;t6AoROSdku0#T>eypmkBesK{7kRAkmw z43oI`6(exlsjC=;e@=duhVhk(25j$Cg%4rK#C3BNuUYLeiHTDQ2NFolN6-ODh?j%w zz3u>!iQi zt=X(cTwY{7<#LH4D8ZT;e7s@y7!E+p&cDx_Asp^cKezcUMd`z+t9>w;s24ix5&sU( zFriuV*i9D_4sScPTV86xxT*RUzbEQ5B~EzduYgVE#$m+v$R5tm3Vtm6TSN$uM4FrE z(e6a|NTS1%s96#@XjPo9N*ruGObcY@S|31lRc!DLyn&TQXRr8ZhhH@kqBA+rU8G3P zh9LCu@?p%`<%5EoT8#4j(d5`nubpYWYG(vDHS>Z;Yz5IXWrG=cyXy)=+COcCnxh2l4{F;tt=I&bMUAP^X|9gZb3CmlE}^f}q|Z13weLVK{he z6mio?kNit-U`1)ek9{ZViUSy%I0<|t7}?Ss{>(e_4b1v{b>*Kyz|G0dv0fd0-lS+m`^-XWd|mJ77Ajz@$k#yTLT%kN~LWJOR*> z0yxpGWs`UV?^fOwe4^94>z~u|3;n&ZF0^;m8FSj}(crAYa_KN(`&ulolzE6!%UP~Q zSl`bklxNq-Lt@_4T8+V1bcj_38b;tb1y%24d9?>wH}raSC9h!ddT*;)>+^OaE6E~c z%F6Wod9-4SGb@Jc@q*ElW0U@=LHMeWI89Spo40tzMbw5jr6u*4cFBHTat6 z!mP}Rw4cK$V!irdGGTVaLTdSO=pNRljqfD;Ucv0i%zU1myl?ume&z-itx^(WPSthu zCBoHdVjgjsC$?H(a_&xvw8bXrARp;j2X(=zAGUvvR75-0c>S?tv(+0uHqDDAS9#Z- z>$~E`T~!6nX$$aDdSjdU_4R(!zY*;pDD=DpGZq$$h|U3Heg_(-=^Op<>LXjMU-He% zhZg2l=gvX$aU>$c->58yeMpBoFc}-NMKw4KhgZAuU=+`hy7DfXeYOCr(GR?0vsBCX z@?IMM4;jKR4JSNQ7tLq?0K=WD^nViNr&~9HAj74JccNAUssZbK)@nr)AL30fn%GSZ z*Bl&+6seaYp%^tI5pcjLfD8bQP3zf?&opA|xae(X;z`?Zno;`%Pqq7QNy2gg=j~TR zdojOj#mXaA8t}FFb{Vx>Ns#ka&KBeT*Cb<0z^HBGhV9MT*X4S|sI}y}&8QvAG&Y_& zz>~3QKfj0r2bg=?Z%6?TR3iOozhLdxWRkOniI zx1dFl`AXMQlGrAvnychpJ-=WT)00(+eP=!>YSJh9paF8ZU=EP~NQ zVk&LrYt$dH9(!CGC7%!)nogrt8zr**twL;e3qPLM;C*_nR57GsDqD1?iz;1cr}i$R zeYLb>gz>b~j{Bv+X@=^Rp&snZzD#S*kk+X5w8qI!sB=|}>4G_LTjC97nl~Kj@9QX> z(HGdk+MiLoSUr6#ij>B@-Bta|IzKXMTNw*f>9LJm1@fz9P3t;unXl@+1;Gs*z%|r| zd}cyzCs*^RQ7cNP#`lv-WBzeQt$@;jqy!24_LCIV+}M^BF;y~5!DWzIZ{D^%D(!q^lMIBQhPnYYW`G)>au~q2=vD4m_C|`tV91!**b+N!Gwzoj&2zEA z86+1c);uybux?{E1 z@|4qIJo7a9V*br$O|rZ(Y9HYl3VvqjXs~ua;5esdlYEF><#kF>j;yl&8f*8G)a<15 zl7&v)LvsE2(&#me>~Q^&XC$Ae03+mDsTwqq^f76)>0i_NsMO@El|mR~Z;eWxNF*6} zTi{eu57}L0x2ilFWq1{&Ox5oh zp-+OfaS#V9=9nOmGt|=Vh{6_!m_)2^{zklBPnf&#SK~}I?Q+yCai$>FHPTsU8Zt|t zl{zQK?tp&=SFZdrbmHS*lO;j59KvhgBA6{x$GBf+Q~Nn$@ZpeKPSFsbnNq|Od;c{? zIfXKjehWPd>Wjgz6KSiUkxOAyobt`JLhA)_Zlx=E+k{}63dXS>syt-3)6PPKZtpTi zF2TI}|BPUM@MvNRolG!mWuX!}Hv}?R)jw~yB7zDfdlA7Wzkmn|N`4LztiT{RK?Eh) z=M%w4K9%tj63{~g@0MZTq=;Z#n?^L?-c-;T$-XFd{1HV_5+uo)zRu#%-YDehsOGP4 zwEqFA?D|5=0lIn;Bin~S{#vNqo2qRxcwa!}s+>0cD=Iey96E{0g?T9iK|X#_TV*9n zl|meZ2QP1xjaPz@_mFUbuS3Eea&Eo$un=-t*i{$Xx6vWUrJ{`vxlD1$p`kF?xrZR~ z)*+v=VnROq<2|O>4m)6eYTPgM$t9b_MKsnbvWY}4Rp@!G%!OD?C`3-9;XL`*cN0$s zCn27Pg0-zc`5cF;#Y((RIqkAG5_pR#Cd;q6U7&Oq@ARWfqw_+q2-#GHLpGZeWK*SF ztCn~Ft(}ib9ljPtGF4J%i56m6=$874sTvKrT!*xH0%Zqlj!_BaLoS{2kwUoTx8%jW zHBLz?+mLu69o-B*)DQ94xLRL71 zAPo}ybqRGhV`*Q`_nO`tlhr!*bvO0or;7 z09=nhvyPi?J=-sF3w2}^KORJ?8Z{Gig(IHeCS+^{?A{t;SHxvI)@mxI-iQe~3&oz0 zg7gc>CuH;-$-hZ4`};uq`(?mk_wT=ht%&iAOp4H^t&*c=3Y@;;@sUy}X67~p=FP&} z!@|{Ux{EBG?z-tUp%})J?v)jGUx0RZVc!^1;sSHR$r9oBxueE?i#w zl{@H?z-cSI=DZ`Ibx+AdjueJo)htq6sedY)il^`I`IxBo#7%{i>})D} z)%$hoby_PN;1Pl{^kUToP=*4d3$EH-kR=D4Lh3#_HPbF!n2f^rzF@tQ_3d-ktN(cr zD7Z|!B>VjJ>hNJfsJ`o!V%ihyRWGJpAOKbh=h1$rrqIT1wM+0l^aIf z-Oo8pyA<;IW8KZP3$2&z4)dO%^^)0YyI(Qwr%|l~dYJa1(wuIlT{61MndIohw97Y` z_Fqtl3|U{MT~c>5?Y{-3oeE&uWeNz>{s$M&Tp*b znM6jdOf*)RfN{Uv!MJs=H51iV&{=O>Hl6ipBdKEkXHQ&dM$1aGllgbjN+U+@v9(gM zZT@E~jx^N#&sUrwKBp!MVC2|VA1bY>y4Up%*l5pRf0ti)_^5)v|O;}6>emK-oo{Z#$D#N+C6p? zwlZkGG_NmVTiRacF2tBfuu^S9*Rz3^-k9pQ{X?kN zL`4$d>$lkL&THu9AqmE9DybI25Ge>&(Ak8mmGlrhfwuOSXbSQu`Ro*5=s?N7$0-Om zkK5ZxW2$ZSOO7-{+Sx-Gjc0_F1ofm4d=yr&e|N|uVw-N6hSN7;m?Nd_BZaF`y(w@y z6Y2=ooglk^PRCR; zXfM-54mS%mCIls0YIbY4#8kgyYOoB&xH!Bf-vUNVXaPr;64%^VdyxByN|q6<84b;H z22w;L4$T$Oh|E#L-EnH8MQZR*V2fx(KEz7l?xmFWw|E&-LuQ-$qe8#nJB?c53CvCb z5mF;pLUKq+NF=)>A(8x?$t=HX`x0KYR50?$G$gr`i06VLM>cD!x}91=joJgc;yygl z0wwZ5K8GSgiAhvtN=)KZChb$A68V6T#3`?=Tv z*Rk<(wk@&Rz1;V$^o6y(rkhh``%&ss^zvV4t#-14OIIk8E2%yDqtZnoxl1vOads~< zitvA)JY?dC?$q>bL5!^?qQVfx{Ct9Fs;w4gS=l@$5F8Qmi+!hT4|%ia3aa$9lCGWH z!?zGCeBM^zHz<6Ro~;8*8<(08)GF_Yoz1>LmWz}31xw?N?@XW%eRMI(<>ZJX{ zoOt8A$-bTDmYn9$p{n>9M@BL|1b-F=Z+lY4N+BtPyzT79e*aHo33Q0R`%)==X6 zI<;IvH3o_G>7*G^!G@-;(=t&PwF6Tyd|uP-K(c8J3VnQnbt(h$|p4=7vp zym)L$Ab%#52Tzolv-Ee))El#Wjj_v#TGC}s_4`_hsuKDrda>BOe+9`)=eaq#F2&Hx&l-Q=GuC)t ztk&Y{h{)$y@5B_EBGlQ`1* zUg2)HgEAoxl}I?ndkK40j?0zP#-7$iVoUu_ z+f+MCEFUd2F%)8_F#i}0Y&9-5reQ7Db;h>Nw<-z~tqe6UpJBd%i4#P-xYgVqI<#WE z*;tgbMVdGHcI+t3)KH2xV3z)&U;n2+^vcQ)Iiw5MrN*2s=JebAq3Nc7sdp;IglQE$ zgJQ14(jndCfR*VR34PNhhE&>X(SFaJ4Ipw_?d0dOx!EW`cx5B>4sT_Xa)DSK6>nwf zE8f57`nEmqr4dQsHSFS-1*OK~t>*O2U3;v4;kLXZ?s0nh7O`;()=4;AMmm=M6U@_N z{zOk2w z|Ja@nX@a%uFMzOkf7+q6F0NVPZjyr-}1@<|Tu;1UdPTYVfOF7483S6T;_xO@-~ z=hukn^9MYQjB?SQ?KQN$Ft@~8z~JhrQU0P4ZUC*5G1y#op-QedaV}q+L*>t;PG;R9 z{Z*0TYI`M$eGLXH zSc8W5n&F1d>-R$U!Y^|5?ZSG?XYRl>iDURejZ2dWgEHg@W9ieIFz-A_X8n7Iy%eBf zrUdG?LS4bOCCL+4?p#_xEf>qE;%?bN&=Pa6dkUl3Keo&d>oV8xn|*9ZgYQ-2@?&yj z;a>eiul6nl(Jg(x6$g`NiV2Rk5i6+q2YiH>c^cCuWpJ;5ufu;i(}Z|@GmVv)?Hm9N zzy~o9`zI6tOuz*C@Kl%+-_j8ve=Oa!Q(_2wn5|F{aA}smAmm$e$QXjmB50=RlTDA7 zsyD`sH0>iXrgABUUYOxE=LE1K!pNWgjS`b7tDYGeGSY-=io*a5k_hPyIC za^@F~qL>25j?*RMXDc$!mUOpk{u-+Y5b^8Ge$oOkoDf*wEtS}`JFM4Kt2BaKmkrtn`l_hMT(wvmMiKj1Zsi2Wq_nOGk3S%Hw-x>nbJ-|_?&+3I z6e}awdN7}l95f;}ruZ57B(!K@MouAwQcO?Ir8T@DMoquvh4^7Tlbj@OKN}cog8$h^ z@Ebftd;*WPf?<+yfc*(PN_ar~pKQ|(ahG8qXwT(a`~7U>h-z>%1yu82$Nx|HzlZ-{ z^8XP3>-ewX|4IIp?XdMT>WR(HvLOHT$R8afuy!zGdqulv2MamZyS8(c0iH7lgJbKP zWMW0d)1n!d3kLA}d&h4<~e*?LBdEhxu zwfF$;SyY=I(PYzfQHdPOK}bkS4Q?pCD8$j!QuWi6L_itw#(0cd5LY4za;~E?5LedK zV^mm2qT=H!B0mZ`)+_)9hWu~5C|c1}(LNpESG3QhISNjg#(T-EC0p3mD*&HM#l4HL zPgl_4iN_r# zgemd3M-z`bSR=~D?wH&mGEkDo{v$WcCXc<9n^d`Zp`|EW-tY|IJoe+n;f_vG<4MF$ zU-bRFeXgZAmgM7c+&GmfynQy=lga-7aCR>6QB~LepI4G04<=~!EZ8NgctgOg|`$7#K{wbiy>^;%o4^%mQT&{mren(!)uSc~EV zTdX@Cs!?MI5HtVp+GifY(%$~BAIY4@KKs4bUVA-$OJj9Y?^RTfN762;Z((EV#UZ`z zbGL)rzs~|H0$6IFc{aYG7A_IDPnu(K5l!A&Fh$})DwDLX&YuY$U+JNm#cY4-z&yHX z2i{d#y8`*}x87^rft*NX0fJTEv+3B6I3_~yEob#X1@-z!=IQ1T12 z_{GU#S(n_%_~{$YMeXB5CrZKZU+cJ3GI8>p6fzFWxpDV1h8r(&G~AgIWkl9W75ksi`3Erixy5?Dm25Fr-_G94ltPsAK^xAbzW%)9eRPJ zuf$`bGOw+2JR?ECk4R-GHJjNZaa`CBk#ib7+(J9JfJU`1WLJ%Od-<3GpS6DVt6YY)X5 z1DCWfjm>&%b$WYO`&;dU!#!<{CuhACI1h}eSnwos{yIt=?$S@O_zm_6!0s-EOSFxO zTaF-7;=}mF-#{VDLo;pShZvuQy`N*jQn?Jic@}qKYuO}^h|EoVU|#8b&*|Ch%G~%@ zhAwnx+O^@mgO#4A`r2HX7D1d_2=tWhK8TVtkSY5WKveFLJ?h!K1gMb@ja?fBxr1D; z4(}YCTiQY1)YaL#4|WkgMeS0 z!|wbKK)}cI?hO7F@=vad;{W7Y{!NSj%5!Uzn423*FladPXa+4C25rrm@S(N2YsQ0Y z#1`Y39fJ`WMP!Z|9UOW@-2tk#2Rwk)2GiMbVgXpnxo+7!!gms!aGYv-Ch0;o2_C`1 zJhI@Bs#C9G_}lO*d?$c6?`rmhF5&A7Qb}I7l2FnbmB2;^nzbF%dgDWUZ*kqQsaKgK z?76AsqrDD)jstUB#i#zOmJ-uo(5P&xF>H7yLFaH)8>~?inM9y#a2Q+xqMG4Yb_332 z_)LWzju zil+K7qORa8VjGW#U^W0uz%$E@z%y64S8$Ogn7-+(;AEJ#)5D!U^_*}uz@36qx=CyVSw6r`F;JefHi0SDtyafjj|5x7&iAn7R>cQ&^b_ZEIpivs3{a0WKnaCMixCx zr;Q@L`nKdL7xV6gudsLte>n`DnB-q1TkCdEK?wx8Pulfwe68_UkEHNd$E(rFimDDA zwA4LPhEH7#IX4D<>SaSX7JL{QhkWY#GbsFce<~{nP-K+O#8I}v3fSon^yE`+q`K;x)lr}-9IEB*CD@o4026Pg%3~n=PvCV zm7Zv~>=AmimPR&8Rjfuf_WlhLz9;z~46P5DVf;T1FJK0=J2C+c#9z|$l&i@6ke1`n z>?4=ui4px83uYt7z5xMrU|?;j*10L_|q^PHh9buE_1P&@$@+W7-9Ylf_&X$Itx0 z$k6bZad1pz85T6AG8PVz?Ch2!fr2ODFK}Vv2Oj%H&X{IS_yY$>X&*Ro@cqD*LjMeo zvfwyxG|y=VX48(~aZVdJoErOc`l+~|GjSJtTaZ5`p-x2V41hI*e{1t3Ks?(fB=9to zaGpE{w7j_TEh=sLxGD@D`~oR|}?*czrpe&+AP6!SWjb36lxTD_c`5e`@qc z_3F-gnI}LO2Gfkna`Tls`AhM#^wEsz3Ic3%o*sUJbN2khp!X7B| zsmmq-d1VZ$=S%rj@4(B{s8zb^z$xCDMpBb_2a}1ZM?^L??|iaZG1=DOQ`>7~d2zzj zw5U(k>@Qcv*X-fcn$1_&r)nXrjMM@ce?dt0Q3bd9hGb+a!BAG?+E_Ib#=)m9fg+q1 zvH07Rl0Ymzc29DZ!PMZRgNVadA8qb?DjMt~=IY7EAAkJOLEAv{#0%EDW4z zPcPj`K#D1|R}#``4d)EF%^s&6#>^ZO$?BOe7I!u?r^hM&s@w_#+P=T7`qTE_w(6nE zwk5-Dx5b`eWs0ixZC>j5RdpLy1{#TH=4si&qp->f%#$tPval);c|@kf|8Wt3hdkSF zi=iQ(63)ssXKc(0k^C8Z?_K=hK}}(1;8{B*T)NW?$c9y?{>;M$bD8y-3TGAm!cHaH zcbV6P)pe+#)o9Ksl*Mr|i^DW$qgK&K*QqxpxAUSEpOVQpYqM%O9fvpt&^xTmo)17FjEi#>R>a3Dw3(-&<%$lMGyAGQU)q_^DsYFSSeN9eX3 zb)GIx@3{+PImFVoNQ~}kTr{)$M!}~Xi7d?>x$p4A#GCerdZ$HJgnH*E(r~G-`rdg$ zCe)3%Az1s7c1nMuTqFvhqVFh=5E3FzI(YSKTP|&}w{ElEXKg$6wPAnK)`5$w{y4`L z;%GAB^NMUZaO)je;ds7D16FcOOB8Ur6kl}3j>Tf9OR+@qFdPIe?K7@{#0>-58-5$G z6Ia9$xrW1Q;-hN(>`$p!`6(4^?9D`QViD46H|mmn)%D}#)Ciu->>UrF&7(t%W`t0_ z(6oZ45}6@yeU0y$vo~TtLaR&orOAP5{4&`Bh4PD=Xo37XYyg3NHJNSiRvR73Mm{VP z=sNvePoN+39B!>m?AW|BtO<0Nq}>Zc0%QweRe^@zR|1NQVMXO;8s+L~w9Kc9VKW+# zg@fuMGeZ;vE)5CK>=pX&CxJva$aK2AvsS*Jty^*Uqe)X=!>c?k#JzF_>c_8Z4f_iWy=@$C>f zYrRbN#^burYWU@0pqyXnvm*JWuO`bcp6&CpLv3VWxO86K3v#F1&5Qr;nZuk^v_aCD zW8?3#<={3tmU z{8M$SnO5ZqNN$3zi)(ytJ>u0f3I1$DutQ=*kfMjG)WhvtCK z$d}vr(z|WVSI}z?)vBjhUkxBKXx0JR?`gS*GS_~MM8#4-F`Byqb9$|svQX%p2>t`t z^Acsk`6!9n+~vIg0(vAGB5iI(i#6zJolG@2m1)y6>A%tRpJulL`n;e%{cjn%b116! zPHNz%O??ee$l_y`E;6_GEArTFzN<$ZCvNR4ob3mN#I4V@@M!wfQ6sDUL!O7_Fn6gQ z=nH|Ag_F8SP|gLHGF!mM)z4r+7&^64mpz`cRq5H9#t!m%mlX`+>J9XV=46s(%C|oi zc`Q2X!ASF|Yq7`dq%fnIwRnzv8eej?b@l!df4O?#RSZpI$IE6Ob8DQZ7A9Oti^ZrrG&`IR*kb~h%BH-DzT40n`2COIrL ze?vG6a{jsG9N+Q4YThAK>v(!9?|?yv~lx`TTm-v6R*{a}cx#&k4V83*_OJj&um$^l|n6e$!p=|HO3G`v+qA zxprKEtqhQ-M#un4VUAbjk0i*nI)}?}p)kj%(x=l_`(9mb|Kz6oq{rtp(Z3mLE!Am& zU1wtH18}7A<&7sp^iOkjqVg37>A^bn-^{^?RUOF1=fY{yZRN(v&Ue%6)gD>L#-D_h z>5*+nnts1Dy<7H{5wrGgvIapRjnccKZ8Aq>>+18DECp2-ONyHYkW~jK`K(@+o4^=u zr0zgRkj&X<{;?P>aQB1$l7?f)JO7d%z08R?j*|C=-@fYBovD)T)9mqDNaq>Dy{!J& z{N9N|9GYdUyC6I9vDV`VtzP?Y@qt{(8e7asK|B)oT0A5V-?x56LP&f#KVwW0F~g5<>xUcnGN}|{1!%}My)6F2Bu%{ zw-{Fuc&3GRmviU`vXgJz>YGd&E#(nd>U`Bo@*bNosOsOWYMI-*E8dL@hfp5<1e4B& zhR|-iHKLlONzSFV8}01(@o8nBE;gt##X>jRFB%qHm3I^CTPumX)g!kE4-!1wUhytE z(TS(aGIX)jE^FMU-DdW>BMb{o56`M;&pV+WcJ@|I}UF?%qp=?K@#1|8FdlINJF zqoitjoj>XkHkXEmrha+QCl9`*ABec3J58!5)fr|LD9AlLW$;323Wsdi!lTGLOVmfa z4R3dK8Mi3)F(1=(8u=X&#dWEBpBE*t=#bPG*+S`x!kZs0k*~{}I+YvDd~2?3k{J@q z{}n%y{})JsAdg8@K%MrmA?I(GRlNhg+KEJWOZD|O+ln%K@MB}{Y-i`jnKc!F;rw-L z79F>utg0Y*D7-c>8Xf!=MNZ&)b|f~t6yk=2a}+sk(_~J1Qo>}4f?7@WHC@IN!TiW~ z^GIYjh$i4-_r|;Tm1P*D*kn*i;*um9t^3(}=5N9{3`X`b86u_yI&QSwZ!){t(ye;% zM8^`67+pN%SRg~6e5d)3rxWjbr3nZv2W4{o;!6}FL8C?pEkTg^J_LHaY=GGl>DzA8 z?^72bxYQ%=f43o8nca6bOQs3Iu>^?=T+A8Tx*iUk<5M+U8-sA%K2;%)8!Wo)v>0G4 zhb)ohToGB$otBspoQCDtcMDY#X^BtmUY%STjlEAUrY72UqS`IgDM$VC!2}gEXF`>V z;#6t!-&3Xdp|%{7v_AQfDuEd2gHv`>!EN-#kH1LoA=9C+nTNBaaD86EzK*gHx{cVz zbL2s{+R7)}h(`uKNkuLnO-$7o@Ln>C60D*E#NK|H8u~=tU!xGTrbbp<3e+3v#>{$k z6)ZW1ct(1x1bLJEp(Y4~$(fa41N&@<;5vJS7tO}mTGj}sjHU`=hTRQ>q3B*d0yd-nACZrJu}roUJ%y3O0Y zCsy8J<&j^fzMRhL6vMxVBxlaWl+**4Jz5xdE{nHOi0OopWU8%9r@q|R)Yhq9KqTSd z+kDa=BHza52_VG%-p(}+W1oGAyZD5+bLCtsOLIE*Ir#cre1lLZNqmXCs4JNJ1*$~r zT3_0bUi#8Jxx$xWl8jMBZtp(G5!QbG+>tzbcJEesEVB_Io`e~~>_(XI@xp`$$E$+x zCA)kVloDkI3ponD9Z_*mqsVlirwLF1n*5N&GZd_*-?Ks+8qAkjn=@rTj$dwxdcZ#u zOS62n?Yqfb1LR6am>0=}6%uE_;_K-uH$q!aD~TLMmX;*at!|SqEE*x-z^*e2FRh!f zA!810->`bLTAVD8qT;-PZZA5sN$RrXTlLpGU7M_ZyLW+>hvY6D+=sMkuDe;3 z+nfySH8nnUW;x^hnjGgiR1CHr+A!L4?@@}U-|srYFYAUlhEKpd>nrzzOrD-IUNa8# zYFGR2@Lx64u@^MX{ypt>3MVqlN1&VJD78|ZWf)?rZtbXkA!JYufI z>K@Dy0>9X&ezcj|^*N7?JHX)g}r0S@bfnnj>8Rc;I^*%q_JdT>du z#$?kCuQLS7j+iBV#%t`=4?3}wRO4O~hA-r4>82>Zqn=vyt1FS-Ft}dgf|h%iZRQ5=TN{eEBAT(Sb9q1HKpF4sbh>g};zqcFbTr*>nY4+)C}3L9 zglb53pOLMVXfn>CB9}@)W5w**r>=Nb)Ja3e38PPTW`XU>Q|IuoxciJhIV-ZqEy-PW z!}8<~y`=zghx!HYQ#^qnJ*)ZRi7zYRpjI{~I#%Q2$wc+l`)v<0yfy0gzhZcIM_LCN zMg|S&9xjZJZ#`bpIh^jd8QISY&lwAp74fgIPW^E<>8*!!OQf}5l5aEamtRmt`0Kr{ ztkBc?HiP3`P*&t=6(TKm$9=r3X%YcVv~@_X$*>@nAA%_oLC7YZ%)u8)drgYgR>{mt0F9P|1I~a-BQk%gOt!{&t7=KybTN-{KvFhjQu$ zkGo$QYKoO&);@Mb;hk{tWiG2 zoJ9=+d$b;!DyX2^n({2IP0C`Hj`gXjlu@I;v_!Tg$oyM6ijUu}Wc4<5ab{jCo583C zi#ZA3^18%4o_#ehHFq-OSFn1IZsJeWbvM}IC;-rGd;0?#bZ#7>kN(&6+eS<)wzHX)TCx2hj$oE%8`1kC(wLiJ*#+!3I7#yac`El? z33{)#!7?)4?zEIQ4~bdBVY$xLyL;ee{l%Li2oXaC^_yF13|0Yhy{DCH&N`pdociI? z*uqHj>)z(Nstnq%c0lkQrXn5t1Z2f=`lMq@Y+Ii zD}r>%;mcB%)p3ozC5(YyDqG|vifGHS^r7==6cS!0X+r)~n<8{R^@k$L;ArD%na@^Y zj5l@(Sa9^N`}hQF)X@l_%gV49=*$KP>Jwu(oM(n{rwFApN;`Tb%1Stv7R9MH@wER?s*Xhj1~J+UC48sL?P=Z4)9AdSXw6s6^vF^-Dke6B0b`ka%YP6Qq0GMK z3xNe2%OFvpt#2$tYta!nXJZ+1f)3(CmQkgS;MaR9-5bfqT*1ZNa?!{|ST3&P;x4)P zJQpo;F>hlTK65&=Z^twHmBY#mkh+fGIV2Q0Il@Cz^6(mNN9+@A6v6kK6&hA{;1C*?JA9NZoCxD7P|0a`4L^XHSCxup(bf| zBZ5BGo?#Zuo)fUoGxkOs?Ctis2r!Np@2+%yDB5G9_sz5WT{UVqIfxG!1pPMVskzvA zFOe+~x>M*_JZs@Oc(pJ7YMJ$_X{gkZtH(!ugC|WBF5`BOj1)vH7Mr05?NWUyU#j!D zY-s4}{e&|D=YtNRHUo=Co>woJPmd(dtCSrh!6 zAk^iq(p{iG6We$1f$G5nJ2<6!IgezKwU^-ak8m#zI)n)8GY*>H6pOE%dUX%v*2=Cy zVD%DBKd=kn+EU#V!;Vu=uKru&vVPpl;UD5m(5i|N-6!2luMGOAQ3--K-79B7cXh8B zJL-(H!f#K(mdI6l&{*v*9W3pmQ}!O%?H%^C!kF5MKi(qyXy>rQ+sFC3J36}r>h1Iw zF82lHJ`=>^}*HwXX+oG;#43M&i zqL*#8YSlcHXtfN0@uD^2a=z&12xZwWuCXv9h`E?G}hBf&th!;*ybuJGr>gG*6OSg5+Ev| zfI%r>mlje>0ZkH$duu;(c=a^|C>WbswPW(cdR#?XN{h%Y*1#JT1!b6DUA7Ms7eZ_f zfQ@`$Z|MxZB-H)PHJ_?xddBBy6v7fKc z)9DVLp>JO(`7ZL~?m$kB+Q*z~h|G{gu^C6CelPGOHbZfV4$XS>lz!CoBnm41LVaI9 z_^N&&k5z;R3`AsxJd^U9ZkmKpSs_bRf7Hx!ms*N4fx`&mSoP2uRv)Ail_C~`WNKbU z&S9^Un9fL0{1My>tcBLW6n8VF>Ps;-bCd25v3O*pb){2H6c3 z3iPaO2g~HV;hr~Qsg1~5WNs*d06pq zP>$2oTH-7j-IQN%oGAXN-E}3Q58n&BzgwNAm{+ej(VV1WzyU9Xp+Cv+nttGPK^GNZ? zN`S*TkTs;VUIOsKHL%EueRiMxeSQyrSKNF5p#F&-)jtpI&_Au) z_0QuS`seB2^7F%Qwf6C2RJcHIu@@`m>{4 zuwEESBo`<)e#RBZB|Jqj^Mo~T#<78Tv_ZbsXysl*H|V`I^V8|h=#O0gxc;dEo2`cldky({Gj4|iR>2no@u$smb>d8IR? zB(_4nJ-`DwGcx`!s4=XMJ&9Ez93FJB%RfP#&BCGVG=EydAEx{K_7^6&Y#lymbvmb3 z78Fe62z3;6G`p!>R`(Tf_9=D4t!1nOy};vDp$4ThhN#Mcy??KFn9H|uwyQcfc8Lng z*Z(Wq#i~#BDIAox^vCGm6&M#*qYz=M^gyl{Wopu~MG9~1+A?VU*dEt+{rXO?7NRHt z`9V}JC(f>&?>W4k*iY=6x{V0EOWc*#CfpYsNV#F$nsX59EpB+u9o|k{a+kQvYFr!& zIlpxV*|`%#i^F7%->EK??JE_tS7w0}uVpE6BQ;alLyBe0R;jJJIesIRRUCJbTC1Pu zL)SXoUH%K33Z>s;jF%jc2poh;HvawxJ*}Lyq)xz&W~W&X>QzMJ9ob zvjUUC!yb$!hV#~Y!^7h@T<%lP>hX1%6>1+vh_Tws32yU0Wj8DJsWhs&2i*uN} zWP;=#*hM1KVGwtRa2PO&z!3q)v1CWvl0Ub+6ea!6V z#2cO5x|ErM3%q8hu|+Xd(^8%A%m#YTqE@#Nk>HRwo z9$$Zp{dh-Ux=2YzsCmcvRLsi^xW|dCMJF>~jSt^8&4mdM_G0OYd%RjH7oYyrtv))t z)h#sxC_}=P*(FBj)K0U$&Y0XPERL^<80zrab+P>HxKcTIzP0;?2kV15K40<;j`9N# zF!A-i2bO_@ZTCGHR5k;`q_xf6h_MqZZv;_oa!rBXvdJI0g8kbjlS0ra=oSJgCr&*k zGKq3cwwEbe*$5Idk`HQ{EE(m=p9M~GbE?3I+^|#|p$|9HWBL8;5b->JHdE)BIBTDh zYmsEAvtBB>y3|?ZN)1J357|DYn&fIrXxEo1-#^LqLdjKU-6XlDDcLChajt`@y4wCp zu9r!!I_q_kYr0yQ%GKIsK3mtf`}KVCg2+kAW~oF5BLlM;$f>j0K4vrvcq z5iN?fD~mwZtwc7-lKEQc_fc#>H z?h30KArUN}?|VV$LikE7x5HP)0`A!5)+!F4XM-SZ9G12O4=qgBz0E!3lfdaMXHzi0Eb+^-8eDtav0 z{W#f`M3=gvu2OjJEw)1TvA%T<0}%;|CNZ2;jt>XC z?c)Zv*#nmiY;y;*Y74eP%;pHf2#MgZ#&danCGQ7Tka9jKx4y1>!ofa~`Vf1uYPTMHpAet-7@b|-ynCaN| zIs5}lX?2sV8XYn)2Qe(dJ#8c>7&(mOS?6Nm4~#&8*v3hY|LbXkj?!^t3MFii!)%8j_jRawTVx4E4K<8NO2D9leX-w@&>M;1Agm zJ*tUM)kHq}rJa|F(HFa(c4QEI+|}OrE*W%72Fz;sM&oYLX;S#;8a0EA!atUKCaFwj zkvFY;Lk|C%BnfJY-)+A$2di+mx+g;^Jexb?+n7u$pV|c)M2*^Uh}uc@ zB$}USBg6_p*^paeJa>b)FPQN=5mK1Bb;_*eAy2;YJCRjb9xTyov+>gq+xFn%Eq76$ zzEO6A?K4=c)u(DQb`FTVGSsVmtkn!%Qf~CxJmmY4Yh97i^uLL#JA&s(I;sFsxzg+M z!8RaBp=PWYkWq%dLq8Dur+^`^I1+xOhC|b*MrZFw zJeD*(u09fe)Oy^d&Gsc)Cr0lT!+alJ>$0!E*yxH@tIk2OW~r6vU+T<-QVv6j>b)N` zCQ$es1gPVi25e5#uz)Sy*<-taGD#eWLexEH|*Rg}~NyW=1=~j8)!bInN{LQ0%Oc&ZMW`Dfg zOKmu|>@Y`*^hL)xU*imS7824jzM)7VxwW;%c4=kMU8C+;rSpTwx=UZ>C6B(flIJOD zE0Sr~2j#0&+Asm{W&S|L@aD*cB#aSnX|bZAc4<2LC}I@dUX(Dzlaj_w1@dsQ%tpCIe*_6bjTlaMhcjF# z`q+O@+__`Ejbw-6(-_r2!EyUXR<+5}Du`AeRTh>U`ZJg6HlstG*SKT1YX^tKssM7Z$nQm!}LmzOfs9f zmsNn5K`nv&{Pt*dUae1e&RXeG>{daj3JwJyw!ZoAh}-*Or;& z*qZ{O%V+!F_jc2>ebKx-#Bys0tH$b~Kn|Y=-16y?q2R~G`}d#lzT#;;pDdzzwZ@L( zz1Y6e%R8i(quJL;HwPWbZr)bt-7nqjMsga>t}@+{TZZJeKiFTqZ~qDD?$@mD_T2l+ z(=}oX595t^S`x+^@hI2Q2t79cmqr9v&;UJ3@kV%xcSr*mD#r>>Ff~-$a;Yps^$*%$ zPEK_>2Bgy6RtxvhLb_|Yu}uU0;IP{v9F69%E5zRSy>lULas4UAKw^t-*m-`OJ-NaMULDpl9Q8 zQJDlXYSqJv{o<4YBo`6y=>i^16kz*01=y1XlqCv4zA8mfruayIrmho4W_4{Mt4E}+ zn=eb$_5Gqm+v9aDuj-2l=4GnQFOoP}rF5N-rV#%`dn*C3ll#~|Nq76dnC|$$m~OI= zwuI=IUADqa@Bsh(NL2xsJ+><3R$N5dguUUSp{Kk`hJwo#k*cripEg;cT!kN5L?U<) zxExEzm!_J@{_iw%E;XLVVFV9}f<*@t;7ID$_EPfu++T$+NJi9_iW%;W$E7}j%v$vT zuX)rEyM4C0*Se0~UZOT8E-zE76PGj9t%=KN>ZZiyg=$ISvRqx0xLlyFieGNJiMFUq zxI3jiGw9Y44_sO>6W)GVvL(Vzhu1G+=Z>vjq~^|}XDSypc+*7p7|5F=dPtxL*J5#n z>4UGFslYoXAWDO)n{K8p@bMMWHp{_qRE=8l4n1tntdD1TC&}4gob~2AO;Xu< z)e931lXVg4*b~`yMLMsf95IE7U#o))v?7g@TA~uAhelRo_ut~xs7+Mk1u{%jqfYHT zBGo8PRO2I(pIVJCQH?tF6O!p#VESg&!c1HkZ)w|>t|rfQ4m=c(#$u1fyHES8sO3yH zvZTrAYB4Z0MY)^kV05qt_#&Jm4@B*&7pgFZsGzM;o4{W6=yhmlTQ|xo2xcggaXUp} zrxS}37e|86CO%j?GBJ~OYYcN5V2fWe3XI#4n0BhXsh#x*_2+wE3SMOl8(kaU6}aH6 zo*;pzN{qe6wvBI7^H5eNI|>UW$NO4vly@+g256L-JGC$Cm4M6dFhBM?%?~~!8>J8o zu9M$msMNkK&aQ-ymS{Vs$pVLRr-R7RfG<|>Lq64Zmbw}xTXbO-7I$m%)EZ6@{&SW` zW~vLALA_5vIAy1I;Ij|ZtUW1jGSAgLx+9o&c6C3{ z9~J$>d}ET^C6&hB%1E_hp`>*KFyS#U3k|i=--fN-)@J8x{VnDuYet1<**tguo_DhM zZRJ>K6NgBAR;v53f~})V7Q3ca3{53E`ryVtOOc-6?Nr~tho+V^tZ;UEp6dt?maTRO zcxxYhD7C8?^89QE9XW*kMQ5)I4HG^Vgf$;r0Yb}@{8?N75AvNyzAJziTYb5|1YOJx z?e5U=6+qh^uMDQO6;zoYV6y0~P=P#oQ5MVybn{wz*B`aCwX>=i-076fcA4 zkoB>=oX0p?3d$PHRH(Vo_RM8eQUkaa9d_N`maZ$JcHK?q>?l37@ogFK;_Ci04z2ZU zaJBASIjXzTUL5Xrn4`J4h>K&dh7Z_|9WsU~rY#-2=c~3TI(~zTSOMb^^3~O<*J*_d zG=w8`hG-#3G-*Rx`1s8$p?Ch9N%8A{kRns3$Rx!BBT`V316bcSsR9S|*Y!zaU*aSo zn5ju(%|08g=x4EuM}SP#=z4n%E3_UcF*t;0#5R8?{Zdd?tyeY>GqbWX%MnzMMFm{D3Kz@NAM5Cuh`eEsVw5mlPt{5TJM+GaXy4 zhdXM>p-igo?4s!GI^{x4LqgexiHH7ic;-dH^ls-x(N%WJ%x|x>>&e+aVl7~`jhc)c zdYpZ*X4D3=)UM)g?E9PcAj@SQwY{b15s_4btE1OCW>(|{oZaaa#*)d#JkSG6Fw0%+ z3cqK+GyT|WGDZA1FZcdw9dN=A9*fy39sbObw@#bS6>ctY1oJ{=B|(qhiEalw^ONY; zn5*$KE{NZjNCwMTafeJOoxk;V(!k>=;l0_OIF~j9Jec>?Q%^AhM)TwmL)|@lNC&8MnDNrlj&|RaR@TNvL-DYBATxg9h#pU|q<4VBt5mPRgQIg#4>dLUoZ?FvuyICPXKXeW7*dozta6&Z?cq4tjfZaZ`E6wz5`PS zallgiQW?_8(%q~b5rU<9d}On9n{a&xo+;7EeW!Nv7wIf21CV!PHj66U+(!#Ls~~;M zrs!o8*=+)8@bSbgsqU+-XF6RyE7iSDn+ZyHe^nU-^M{?`!J%~*Q04Pb)@Ev8{^0Sp zN}QKjU40nQO8?iX2or*m;;T-cTdU4``)%|gdex1j2vsBW7Yt2xE_j6aS#%+u_U>Di z@6TqFSgJJ+H>j)5Wc=V^TMh->-S&&-UcjW@3#n z3$YS94^oK!t3G;X(l+@;S#wd>c=*t8Lm;0rPjl>Qx9IvC9+UTp=1nk<48q=yj*BjRsh&Clyq+6Wc(gjB zRvxRekEm_cBH%|vnqQ;VqRE3VL@sU{L1Bwhlu7g#Y#Gt&!|LIy;MC{a=ZGM54gPXR z3>)G2mLjV~<#0r+9A39n4nGw|Qe5TmdK;oyt#bIVt>U8w6JL_H#=g>>Z51ERMMoj3 z2C~vh2HE<5RFJFq#y^IS#$RG=uDk7~Z_aDwl$ zJk3TI&@c$5`YtE~=K|UU_owkZzq$?unEO<|3 ztvj-Ia%5&?tt(uWOUMyR?jm|Ke9R>me0Ifk>YI{9a<&tM7hE-Wgwv4xm23H2--yiL z5_m+a5Q&M4%suV|k*hP#6umE`ZjLB^!#&yIu1}+r9~L)`xyBW!55PZWU7!UH;<{FX zVL(IFm;D=CAr*2MJF<57d7jC{;ihqjL<9Rsb_QO(k}TZg!Y=kVQevU(t$M7fN(m7B zGdZu{|B4*IQJ4Mnk91oG%YqKrudAKmw`nvWQ7o$oZ}Iwytx}?Z4U9sa_vGc|Z~h`K zb($>f20RSVuRs4E(gIJ1dx-|98>C>umUWm*nnKJV<`vf2v0xvIiu1BhhB}X-eiM$t z((%zbxChImuE?WPr6==rxAB+0&7+&E>CmCbT=>eAx}~ufk$TLZ*L0H%cGKC^Ld;x; zAwg*kEYL!m%H`Jrwd>u?XbOhfclk|VsEK~scoV!H3qWm0i2%}AI5$ZgzOVSydo1@j zP>vQ*CV+VkYqS*{!=GH5C`K7vQnDEr=|hL;0--*q!Ec&QeYNLYxsaMJ^#$u&b$u$k z>_2G&s`eEMy`9_?lBPCugR>Brv@~^6{G)S|ANB5$rp7#NLg&151S-Z8engro__Yxn zZ;`}XaB;L&>%Nn4aqH^U&}M1vUYLWIjW>zCqMHm2aA|-Uka!ZU{$+i#)%SBLt>!2a zZ+N}>DJ2S%2yDa4#7Ap9m{?aiQk4Vd#WcZaJZJ=826#bwxJzAYWuqEWIcG6psSM#l zy4CI}vJ!>9iAc<+Ufd!z#qAFNoa7f!MAir-P`f63GMmDGu$_x@ie0fhm$5=M-6jRw^~HL>k5Jtr4V>TS8;+ z&tN`uA18;BkJLsaW(;P$pH6utR%!axmIp3y=5}ofUCdvdL#-S{P|5%npM&vbPFZz! z@NDS9#R%dj(f~-$Sl+qX#t?8(iuk`FR@00;J-J$RIOnM?A5PEN?nTMyk3yhpywp;UiO_X2y&w$%KI6!!jg z6n2jJAG*SgIy?s3$0M@L#>0xI420kLrA#(BBeD<|p3^}J>6H=4@~J=5uK+-pqt!Rb z-=aWzNhNW}^djh1gOihn#9G;K`LARl=*s*PiT(A^z2uPTIV)r@UyY_PA$t>(g_?EX zT3r#xwfY>mRV-Nhzn%QXu|dD_5|6+fOBOE- zySrY^e>T1rC9dVQkBSkAz!i-e&}T$&iwHp#oIFsz6vHNLv-3#qw*#h)1Bf1<)A<&3~37SjB{#HIEsz8gnCOus7;L#^*r@ zImDkeuNkgPuOoN>C$!ah(M_@8;ooZG>PtsXaqSgKIl()PIpNQXFpJ%g^TOYU7Wq$a!Tzf!_ zKV5ji?=ME`cdF&Ua+dTBGET`kgzq36i?FnZufoWv4l?PhzjYAkHN86_yEGQfEC3jT z8bdp>L$fjwJuaF#&1I&AZk{>qBqPNZ1Cjm6yU!Eur&I8fZO;lFpX6!j;VyJMCy?1T zx^jMb?^E20|6k{-DWRE}xIc6`y3;cWAyV19ak%QhK(} z>e+gjndm%+=eaEWCBw%jQ9Dn|IXv{|T)zV75OTplo>yIt6_L>hYw6eCWAr6%ma9tr znIytTFdINY;CRG?GVTJfFtD6D>a9^B^@24srAwF%FiEp^Sy6B}95E zlx*6-0!CzMVAcw@;T7om(v?>k>0Nnm==?qz#O+a<|gSca43XyY>z-OxKS$%GM1hy z#$|Q*)bYbBTz2}#Y<}G8CE1uI%8o=j7Lx;6GD~F1K+k2hh?PPDTxKw|Zsv6KN*I-$ zq+5K^RWZwdd~JGV?+B?2z)j}i0c&ryuy{%jjV4NSBb+8(`p93>0+ZN5dAbi5H634J1BuDWEGe3*NC!E1C zFz`mU<{^2>(+i6~GV_kTW^D7@EiOhqa!hw70+Zs8VKIDloJa(UAa2OC4_;wxg2}Q` zA5HJiB46(-@tiS%a&%m}pzNX|M+twUuCZ||A5Dpo18VV-aV(m*(CG1=ShXzr1xKCd zxq|S?Nd$;GnG-DZ?pie&k@1SMGUQOfG5*XOn4v2oXN5auo|@Tm$(&?ncRIY=R(4^b z!Z7TRQDALhifXOT(4sNZ95)mni;pSBzGP zOc6)u#4+U;T>me}6i-W(M0zjrR^+n(blBkshEcgm{-bpM!t9yreCmv+r0X>9=jo3# zukl%YyZ^0~L+UuQkWBu!4gNBGfg1)>jgBuKvl;- zS(^N$_b#?*0Z;!DzX|YkAJ+z2x}&TDo9r1UEp%zZgT~Q1BTH2KBF8jB4PggF_;~rC zI(H*-G7QWL)H`^(Nyqf@Ywg9o`BDxmYrui+PzBbktw*`i+wwl25pWc=FK|o;+)AMO z1_ZqyH>ESgKS?Cr9Kkh53sqzn>ir?rGN7rvXxWBPel^9MU83$vmZmP-iPm$Q5Kh<9 z{k`lmD6i7+53dHE?&@xMBfR}py1r1c-&5J`*)aLIk({As>s+!aLY<{AMIzL@n!KQk zsJFoIukUA)Szv!`DMqu3EbtT>-I41&MaG{X&xEDKsHx(0W3q)&+sK)2(zGhZ!PBx= z>fU&`{l-Zbv^5TgPG;(-Vs|9Hvx(pK#$luRXj?%!Z%{A9*d&qc^oa+(bw=!7;J6^u z(;}9OJdZ!5`-(9|1^MLbY~i;;H^|5DSRT*kG4WFtbiA_&F02=I##3s9MEqWTA^SMk@}oqa2ClU#Hp5z#^LD2wnqBQ^jEvH2wP( zuQ_CrqQ+uOrzD8bH$b6~mE==5Z0CxImc6g&MjvLfMQ1NGr*~HzWkljRCG&~%5Z9Bc ztorbp#m?r#QnMwgnmNEddr~SAn6STBjB$~+4A!Z4n80FjI%wXz{{s<-@%Z(+K&G0k zrNi0gJIcY1WcFJ%^rtQ71Uo^EqMq>uZKBJI%JPPTAevpe-^y+g}Z>2O= zmJ~cZzF6uAZZWjwuRgVR0#)Ynkidi`JdLZYnR3v4DSlF$nUbT*@i4v})ZKcp#24o% zMDZGF-WREU*;r73_U0gxEN2gEFqXf7+(Z&o{W@wKoGju<1m5GG@Em%t{d3y(TVX`d zcH28fp0$N8nsm`XrzX@UuYKi?e*H?``i()o|BH*8Lc3yraw*d z!fGK1lffOad@+Z`OHs5y{~;OMkRR6~);-ExKN!njWOdXX0BIIi?4!LH;#ce`t2n%J zMX33m%;1IaOMV-o;Uls{gv&m1%7-(<&4=wPXAy=iR_T)J-}SyQQ`3zlFSlnH+4=z6 zwqWALalR+CsNf z@Ka5NbePbkz~YEJh@c3_gAxeSC9L`>YW-_ew0u$G1U5GQI<&3?j*ciA<|JW)<4=x17I5YG^&VVxR=aclYz|?xzB?mlVOvJD;^ac_prO;Pd^6fA>52!V zt^NFBnNV*%Vb&z(#1uonvoo$eD<@eW8oDs=!Ij@jb>)Z=oN5~}f>!gk-SYq4JZG2H zCIW=(+D67le6EPkZ3dIAEA~7`0A>fl^ny9zO1DFwObAoOp@xQ@knv75b^qTrHT>?d z^$Y;Jf33CmoVK+yV#BHVx}`t{^W~fWNo%1rnlzLi5*el-fU~`TY14X?ArNZQ896Jm zOmGCa$2|s{=zl+hxvr@NY zC!OznNG6-1KVlZ_274Av17^tcQpHuC(nG!1lKwP{+dXV`7HsxmVY9CvMLr2O`xtI- zvZpyvRL9xu%{2V~s111iVQbR|+5YtG^A9L4zI8TRCIA1i&zC+z0bOctyw;0S*$uy- zcVe~8onoI$Mr=LRxg71Sr3_hX-iOc?uf5*A>>_N0Q`Gxc!H3RNC-{j=pnhiM*eiH2 zbrQb-We5zl#FA-5>SP+-Yr2_?s=avfy-g@U~BSeaY(k& zr7K+d3uQi{b*9Rj9vYd&3_=?Bl~oZz^VMFbVYSGs$u*LE-CIKo)!5R zRRve0du$z8e;#*u`?waXr!BUc&Xo5q3At%6?EsMrzvG)lr*ua6gan4%X6%Yf06I#X zmS8Pz4=_;9{O=TK-o@(izs6z~f-c92r$<&D{ut9MWbieMRhd<0l{mkZCoN+dd&N~0 z)r9SK$lEtuupl$g;)Q8CQ3*YYH2fOo-P=NCFVc7UVZ-|(lV9HHEYHSe$@-9 z>`Ty8^#->V^*XJ>Vj(4qAA(>n3Gzv+6rDKAi_ybr5!V;QC?m;x3561cMUJ{XS(y3x z|AV5Um26Q|j8oH+`KZ^nvQ**<3c9OMx@(b>X8?6uy>)m3Uun|)Pmtx8^GUp&S~2rG z`RIRbr;%)@*g+pRGO)*9=nDU3m_ZtPfrG$2UiUZTc<$H3~kxM;#ue(u(=SQ ze!Hq46S;v ztFa2qV8TN*#g#ZN2osIEUZx^-hw+WfWxaBpJ;J0xR%{XzhL~2Q#GHgZh4@!x$sNSM zMfW#2z7@C^fF=X|8yy}j55C3)QIE?-=|)+@b3R4(vSzzRVLu87i%?nPuP3qCk79`V z117lzIfIqbO)_@(3EQq``Hl}qj9V2=N+^^?0HXefbTVLiwBC`V|LbTym>eyF1N$+! zXYrI*0a*7~6-UtIt^2V>BW^>J9X8uz3sO($#u_GC4Nufd=wpoZt#$^XR%aIOD5$Az zn)V&uZMNQtQH}L3Z6cSvExDh!5AfCkcH3Tpfv|>l8>b)4vHX;3)G^UO#%uMMcm~9; zaTQ89Xjix|`Vn%hz%&6B0#7Js1fI~N_o0}@59D6!r_K6l(LeEHtk{uqOn>+chVXP74`2YO!l}OVB^t37C?$k5><#h+NxN4?CGmrvHZ)Zdg-CxNe*(7?W37S zS6fS(*a4MuJn3(5eV^3PsQm42mB)qR)?8~xh;HV1dsgLiTd4~XjIaIx*>F2Sbc1iy zkv)e2zS1WkzT=RKgUWdc}fXUWQorEV+Wu z62WOz6~6-^@!W9)e=?9Jjy(3@e`%T~Vwf5bYeFYuF)5;ns^AQ~8UZo@U!ae^+wu!UE@NDwQCsg(FuK;|KqyenqPRCC1Zxv`yYNL-P-B}aje zc1G3%Y6VsVRH;|=HDz;zNQ(W(6#Aj}86F9jEoN9Fs`s!kBiplYtvFJGt5Y;oMRycocfa7X&3o?D?2AKR+Ahsx=v=1 zI251lGj>JqaIAno>U69?!u?6{-u=g;dDq|$&HLcn%g|9LA+^K|BEN*GLMRjsFym7{ z6TY#&z8;IB;y3r7Bn3$wNs`R3u3^-YOMalSB3D zCXzOo4&yCWnqYceNKuI4tgyj)V{PnZFf24BIrNb3j3mNk?kbP+mk61%#LwnDtq#LH zBdbomTEeLZVZWm^1`K8{xCT=>K*v$P^AXmJDLxi;d4cY%QC09ibo6ox#u_A+KTR)= z#{?%-09wQ6%9X&>#`24J_1Nv)#_|j0GQcG-_+M9d1h$ok&;hy+5;xbZ_Zi0kDW+zl zQ<2G-tL|{OTLY=eA4zy2Km_N7yNAN-vHKXOzaW50>YIk}`|hZS{eo{?+CdZ*vEyB? zDvyqsY$K{5Jyr&){#0_T*Ep_{SrW26kr}2nf0l{6$u7{6$ITI$L7TR&rHQH=L)C<( zUy6A76lY8J42ETbkg+7Lnuz_=fL7C{Di#|2qw#zp(jg(z9}f)cg9S{}1@AHq^r>Pb zfTWar3V@ zoZ897961!OIa6Lu?NqN~?QXn|V!TBRjC-&;gQttX#L8OEnz9djS}xMB-*^Ku+~pRE zB@YXDh)AnWYLCXps)bZRz*LBv6!&|gl#eJH zP%qE7w(*PLthN?v?M|4-RZSj}fjyUHpGgR=;O1@8}J zo+juzh{MJ8Y8`cJC>^L%mU}>V^p>MC%`_I=kKeVHjCRYJYwqxdz6Dm3!k%X_rIb-b)k$Xx)ELoSDb7=)R!bJ8>g)Va8C(oE&~f99g~BsrOBzOMvAmRbU9NCXE;48` z3~utNS@L`&&4PR~WaEJ$nF{{IX!aQnAR9MP1;Qk5p`Z=%@rKlhF=ZjVyQC~I?v_OG zU$EGZ(w#o_rbtSYL-d)9p_z${t4__>nrN%~VpXZhG-~8z;wB_T>1oDIYBG)bN0TY@ zGm|MZeClMno`y+H*+3tW4fGcuSR1H{JTD9SltWI2v1Spw*nHf~{_qx`$>tiVR zi)yT3E2l=;%a+;>V6y*Rcud({UFwj0DMy!YQj)dP2}dDu8fRM_FvFM$K%l_PUgQIv z=>a*lKt?{OSFdn13vb{I7yR?an13{j;yzye_jw6+cnMP%kHzm& zAF&`>Ey7X&(pz`pdEF`eM7j7~!~e<`=a_pmZyk7{E_%J)05W~OyW3Gh;_>ZM(2qD5 znvP$VU?+2R>&^{-BT2W6$=b1@t7fdrF`eDElB&?mvcR!nTWHoL!8Fl-Pd0W(??^ga z?iGj2y2T3n72(B~m%??)>ac5HR6UfX!| zW>g3%wh1=1AR7HDhkdcB%Zof8;xh733xCz4j53{!h40>tZ_@|BOl-O+=x}|E-4yXU zGUQ?321Go|-C3Qmn89;Er0Bu-Umz+v0ZeO^%$k1mWmut`T(;f=W97`}u2I>{5@E}7 zjHsmOnd^c$*+kRR@>A02i|;2c+7lQ5&INKoL2`+02tU4#FKy+KX51#S->7iEasLB6 zFrNRR{CzRf+Qx5ZZ=TVq0Vu>nH2oKLjM_(C`Vxn{TtuSAL-K`%sNp;~Zdm)U-```df^)&L3 zxS9%rM&$X+xWc`6e&nGGxe|rt-#Gq28Uo^FJ+0r7D{2*a_Fk^MZ+cp798d9w zZpo2E-j*E6&C~iG9VIr5$K6QoTcu`zRd>LwF!B;%Wk;m-NAj?v^Zm5)$g`WcjzsU{ zukv685q?~H$5!Qeo(_6~%VYZ@t@rX9aL#2q@AQM6)fx3U%5)}?`+vqO&-XgQCswt! z{zhMSavgMYT#yq2xQi`2J*^+m@Rklw>%08=S2lR}uXG#xBT@O-*cFLB!Y?`&Pm3%g zTvxnXWH+r5u(kcUImPYQ^zs02;|Bt;hfvd7w|NRSWWHadACMufcR?#e_ zEUZ*CK}E3~FcqO3KmkD!2=>MyO>Aq4JIc<{PA40ztYfqPj+I&#g9DfqnkA?hmenTA za7eLC?)O>my8#AdzalvD_XqNK zyA%K;e{UF$`-fEGVvKyYY%l*8*&G}(aD^%#YbA&NJeyA#*?j!+Y!=Vln!ZA^TV=Bx zzbBhjM!41rhh%fme-)^#;;ij#mCXa2v)R`brDw3pT0NUxg~FO->}o+HqXRjvq2j3} zUnS=Y-c!6$LI@!c=@JC&*lF^dHmAJ%kr2vbKa8N^b`xp z;5nw+P85h`m%PzfmdoO7Q^ikcQSnuo;2VJz=aC3HB0xk@S*{Fld!hPr?^j{WV0Mnk?KLw z)C;xid_keq*5Yrx)!IfzJ!5ZWLeD9aOY5 zu74(#*IlZ!Fq#i_<9t)gQK+{Z&KIQaYr24(FNh(t9HZ4plLjZ&J@JGpRWyUDZ5Y+( zlIx4&I$zfrk05(62;yRZZ@WgiK4})>aGEIzTs2JvE2Qv|nZIdZe&h^}ynC(sE=o>7 z0__pfU<$aBcMG)hr)Z@lJ88S6yO62jJ zV)3`$QwmKt>OAP2%YxQ?S$*6kjJT9DX6P%<;;qoMqCSY5VRV;VpW@ygMF~*VfQvbd ze&d4I{6((qQbw4Hx0Am0J)+VRSNjZIqgBi|dH4AZ zZ%G5o>8a&P!TZ7^U3((llJe=OQH#3;53LX}?`Q<&vUqsb-qPgH*^q0wUxp#SAFZ6P zk5If8Dp692q=q<2RG~^#;ab&dsrG^Wu2wGPSntB=>w|Re3RXy4AHJXMjJ1*r!b4kv zE?iNBjyGSoF9r)u@3@xxiis|KW;i_~PFq&UibJ>MZ;3@=oR=O#ZMm?pR>W7gEWC)# zg^%@~dZ3ERvRo#D&I`HrDG_@d9i1Br#kUsevr8`q#_&L~?K0he{sqZQpWS4w*K*}l zcYr>Uo>w(dKe-g^5h{Gg20DfQgl}2CnTUv^ttSqK+D06^!y7%JDX;Asqw30(pM3nd zRGM9Curo5^lx4*)RA{=xwav9pc&3yaWn{ivm61)dJ&@s26|Ijx+EQxEinUV6^ooak z+xZg5;KGMG_^=-Dm?ruAop(?u z3pTf`S5Y`PUnz}@G{MryNUljVa!2I9YGfn>|Dch%LKZ@eMn;_daU&DYF#WfUjO9T! zYVkBQs`~13mIfMmidbuNJnhXQ)i$WM+p>I~YHvg%?TyIHXm6zBR_%=_JnfCxBPp`> z<|cniQajMn0*Tv3)s5B$H^t&Lf3ZsqPA_kL4Bo^G1IMeF7qJ{7&o4?-pmK8`)zi7% zV04FSFa9$|Yx#V&F+%lSzteU|%$~MGx(vPTkQfTo_)Tv+l>R?%JM_Z$r)`I@(A;)N zKlJam9pcutR`qn!c1V1ew;kfZXgieKKWaN<`YdZ{GL~BYme{Jyl>+$> zbm0_Ux=M+VL-fm)!leqeD!@NQoTBhH+LyXi5vAbfjx)yKdZDdLVQtpaMoBuFni(Sv z^S@GQ;1L1&WTmN55~qxV>MY8;USgyI{@VKh-Mef1a>>2(I`jGzo%OBxv{H?(<*KUi zmFoE~rJ+(fxF1DBb-{70;4M|M&gnxn`!GES8uZ+@wA=dp(MU_LKS|3gU#hgYI4ExP z^1^tmd&DG`HxghVqQtU7zNctZW39sZUV2Bm%kM^mW%ALbq|T-$bA8pOp8s-AfXKeN zf&J;Oh>sn|bcPZBR6P_Cz6Ie+gRGBP>V~yoSU75up3(XI#L^5+L|tb(Wq*AD7*p5I z)DO;9`spm`ruw=JPkFiuS0ZS3VgmG!?&f>@lyNCw3LTtAVvFPhR8*<7$BZQ|?S%#5q`wEZe8w#t1133@7c z2#XhJ_n&`DM!WeX{W#X*voiSB@lIM~xATHOqg($3pHsRVBHogOTULa@z%K6ZyDlw$ zJO`uNrNs&arNs#NrbPm54NP>u^stDQyD%Kr`le3u(0@w&-?2;avIlaac~;0WI*4U_)5 zNo0iYdc&l0<=dO2&a)T(pR?3Z{JcP3F0U3=-kYkl+ zJ+4^yP;|~6BMKjol^6;8dS%^(?niVsrIT$$iRlV-jc-pv=YBv1A1}&#m2#>mvz0PY zlqo2kJ9>NM!!-^q)`w*SjvX<#JN69ac5D|8jrYDbif zM$e`wU(LwF6~?CM-{HBii&l7tIigB!ir#K0*%ZCQ*c9y~R&0vyxQTA*EQ@l9yIUFi zg~}q<{UhS!SQu8(yIZOK!d>hay3S+Je<@*=6 zV#rx;BZ0VX86ol4NrVKf5=caK5+Mmy5hA7Ejc|@c=({yv<5-)Lu|$nTB+0@k;hZb+ z_5>mEiz$NsEenYvW3ouni(D^@K2p{CoAN;64m=&2QqU64Vp{2Y*{cz?UCQ0ZIg>7J7-myGg7@ z1YX*2BbYEDyr>&DP_rLe#k1l=fZ#y^%uqGN`}~P5|R6Eu_AKG65rNl3cTczZ)@RQ7W41B-ih)w*_VIw|5jVN*wG3YOIH zkyrtr-!D1A)dX^=W=TVpqvl;n)?d=^w&jhpe-=O7a$B>EkvQ>Gu_?gg|NZ!R^R7ttbr0>6 zg+>m^FtuM>#Nei#dpV!v>4ybxT}flSt8TWl4Q>Xihl|+LJL+80g_Es(EYNc)oXPPg zZn3cMW~Cy!hSQB?yE;o@Trdacaq`iydloAlvMky1f<4}Y<%>7!e;b~9bN>})IBXTd zU3+{_tl4{F)ydVS#h0+gr;~CW+$H+(O=*-recN*ao5cDpD{{86Hy4+3$)>Lsn(t{%l)_V2gL zPtIU>g#*n`vkyKO9Te%fg`H3N%(JLRiR(kx8G_Lw?STUM_L~#YL53rb^VObo6^@?14}H+Kg9Dy-Sm47_jo>O;!=mP*5cZ(yhnO& zq|6ItMV%YAbvckk-DBeCMh`A1(`fTHvQO(#qB{SGVlEc$Mh;!2?qjuIF@#c~*&~KXcjoBIBMq(Qn7D)3Cw^M# z5RJMZMWq$cDWb&Q$=#+^lf;Ua!)O^NAm{kj?Pnv!h;ITr`9Ut;^W~$g8XtNzN(K`b z`H*syh@_kRY46_Y+Z51zJ)pYlw&1p?uE+UODR10Rd#+R-A?seo-9b`)d+dfCjq{VP z-4oR?2k9hm880Q05kjA0`)$z8P+ut2>5e3t>CMqtjc8a@8+e~dKDp!BT2ksAU&mLi z>R6^THJAZW(C(4ed}3ODc%e^z8|w!eniXF-u7)qEiS5X%Soe+7RW)=h8o1=59cTGl zrK4X_WpDrNLmYzS9=GV=4p3$MMsVvl3{MBu5?jyK&O z`A9vhdqwA0&fthR86ms>Ngm7kyvShQrb@NEe4xh5)W>kxigPu%Z(S-J z*yO2~rmj*w_or%u(X6|-sWa;#M&Wdx7$N7k9bF2e-_xDNx<}Gck@mtR2VC`YS|yx$ zfe#f2I%*sgc6fE#Xk>#p$P=s>uRTa@aeL1q5z~SSd>Auzbbl)+&}~{lxVs+JZY=}` z>-e_AT@r$;TluHjZ2B7U~DBpxs(_Qq(;7)Fai<(eO!UO zBX(>k7d6Z+r$ngF`t`m^eRmw|_J;3-+D-(=+09@t*7&(zQ2&HeURM3e3+u}QnR0n3 z@iaFyXDbfUNV)59y<6jpeyvu$KF4#VeygGn1Vz>b@Lnk@hj$R~SA=u3&pRV#e3zKXXo^~<+bj%a(W zL~mSlv5!l+ln7NuT5lTBHZ0VuAAiq9H^w-+!kd}l!0(BCjJdbX<*4LU7OhC{V=XII zpi!B+l(DLQSEZ4=>UdFsqmmS~%w2ExAf?l@(a&+&ype;E8m7M&ry7EUyJsTk1oh2t zi3svs?PH}ySrYV4)IaZf+g3PQTh%Mz_$oj9H33C( zgx<@!+iTFbIjshLHQ(F&n?bu#m7>};sD>Ll`O;-yc=@0jyZ=^7R$~rNt+R=6eO|h$34^vKV^F3)AcU>4a5_G;?;?8yKpg=PcX~ zf^OhbbG}jF@TRoE^1^y^qcuSVgbxWT)_p&|n!XjdmgASM$$T%)ZPg~66ts2j=^9%w zxxu|acjl;ao9Pzy+b@kVUUhJ&`+izGw=@AHzO-;s zsL36M$(`$n)IJ7If>M_a4qeKmwkmAF1Rv{5a(>S~9pL0zRMm;9@~TtLA*<;}HOq=I z_$+Ll$O7lKD{)Xe8olnaW8Hz57;iCtbuJDi+dA}=0PH)fD-VbDBUqW6YIWV+kMos8 z-Ico2ox0Qa#m%8u+|ZtDO>x!WvPE3(D&o4Uv`L;*V#1(h*F8ewMfl2pr?JwtASkEMaB zme0q8nyLw_G}Ur_miJC|cp{DshGrij)f4=*Xqw zb#(v01rkQZdv+1Ev#54G;-!9YR0HdZX6yTP>wK)a5q8{CHA6cb-Z*8-9GOK9FSv~p z|Hi@{2cr3Iz-Z~>2!kp#%BLvSojIQhrk3IQ@kv#j^6Bx0pQbCcyW=OJj$7e_xRc~O z&)^n##ktSt;dyt0F}hL7K$PnKVXh(bii?}#p8f((SY52|v8Q0NJW(UVqae3G!7*2m zMa?2}35!%1TnX)XZth2R=qM$4h@}I$q~qdMvB^ zt)E14WSLegi?nGn=$zvAolIN6$|d!mCSh^grScXuBgP!REdmUMOZoD^9l1?9HJLNm zNB>qCcd8JVd917TwBDh~h*?e7u?4TOYj>zzFjt~FSh&D293#Cq<*E}!XMyaQ_ z;G}%RCH5xtuG8oRXoQwrJp84x=wW$CMzVAp7unm|Co>YWwsENaT0U-OY4NU&vcR{; zyipbw_n0=yy5b)1jk2t`$BVC>y#o)*q7qjFI%`-uILqqDSv1W7B&Yz&^#IEC0Lt|M z%Jl#~3Ebl4a>RW@FV&J_=3O^N4Zi9B8|UGs64na>qV^kt@V#S(v+_qk$Wpv>!B zF<0auc-GA5^5z7%@8^jA^U}PB7d2f-ub{1vaim7I zcc)r{X=`#nqtV&b-rl0dbej~oY)d*r4kMkvNUMzH(_>K z>3fG+b^9MNf7zzglfK3s+{9lLf4CzY-CvRJwgR{3Q!VY!VgDg*09ukPPTCidkYZ>T zv^&+(4tYweM^!hZi`&+*D*BQ#q_VSE*q$FF&A{|!7cP<3`5AgXh)a*aBX!0^uqCH0 zB^BbcM10!)s(lw=S-Pzj(bSE{YkP5g+Ab~+_@;G(lrGW1p5z>>_wKfcH`o8MB zqvh^Cw3}7#qs8Y|Feq*GvYXJHI#&|u@UHqL;Cs7wRZZ=iGRqo?yFfmdx#@crlkDE- zJ|nPWb#K(Zg=Os>h^M+zdhrTmphw_cTJ=3{j<2iUo=C{+^a!FH`>Rfs8ZJEDerZ6t zV`6F5i8^obg64JH)ZQ)8enK)NWDMI>o#cFiqm|B;Ck#DGvG^W~+Nzqmud6F-SpvqJ zVlMvIEbuN841_Q&Zt4{}b>0 zZ!i6GXq_qb-J$JL3!Y-(q_OHX`TOp4;p6LqwHauPr0Myjty@(nNvSwiaiOAkRdJ~0 zAm4f{J0>pzx(@kNI!mpMJ^l|wQ&q0VQ}wkGJqE9-h`+A*rDEr*okYBWpTT zG3|)&IAl{=RsMU9{SC);eum;`@$Uv|`}e$i;ax9-GHA}#G0ylspwU|R9BVqT!LxYm$J&}+_N;5_NG-; zMrf;2M)GF%$5h!XJ>r{9pt{;M%*1fMekn`K%nf|1y-P81o(P~bY+PC}BD57+SAbkKvAu3?! zPgmLf-1n-`-P4*QsrG#m0U$Xfh7^w-x#}VGQc1T^^0nOEM_Rv%LEQ({zH5HvaJk1J z64vsbKGJ%FIDAZ|gfc$Z!JbErE1Iif>p3^WIHu0O$+&tN&%<)}7vEq9%L{*Fxlf6$ z_L|rUce;DZq;3ZvHZ`O!TVf_XK2`I~#thzhqQ!$>&LL}Lz7{uy-R+yR8K5+_4`RH> zbpyU1)UWoovRdM7=xlkU8%>2}xrM*ZhBlT*{sFg~?BwqpZ&|}#Aj`vZoNixx94gC- zbvWD|U9*M6$h`j(o*m%nLJYNPS(vMycD$Mu#3R+yPE@ywt)9kB#qY6x)p$^CktE>G zeK&{HcWd47Q9Bxa!Pp~4c(wAi7wXL-sONNZQP-ZpEs=;Iu`UuLDF{xt#XiC5_O}mL zoXIUiSns%;Gs&hu;jFf#IsCfCMhtcDR=LT6>X2F~zE1a*_Pa$Aw>#bK?E@uJ?qKq< zcMN+4uI&DbfqWbylWMJQ7lD*1HW>k+t`PM{y1G)-@(#DbYwcS~eT44n*X;iZ-^{22 z-K{xBuixlb9euX?YDTo`=D>q5w>X=?Lj!T|%NkBx+EAwK?tc;$U&hHr6P9mV8j>TSF2iGA^quuAUky-O-$& zIp(^d?ls7wdU6A9sFKykzNk63W5l8>;;O4AR#&=jQ-Sc7c-_^kr8{aR02=6~0Icq3 z@Xk1=#ZKo0HEpnbzy&^xw)L6qgmvsM%giy_e12bQkFghdJ1#Y_ER{Xus(B5Uxn-?} z^$!`^2OJJ_!}Q^47uU(iUTUyzLJ3`mMuz#gIg1-Hky(I$)kzr#Rac^8E4ZpoESlL^ z2Wyu_hWMh*`j>!v0%YZU<7&t4O-2i4G=l69NS}kN=yS{RfJF9K7}$zfUW_M$mGIvAR+o ze!5vWU%OVV%dq6u-JT#$u-;>=gJM5VtL10P`DUgSsu zbF6i3=3K#j=WUIhIrEGOTuc-@#Vr>h(KO3iz3UFM^MaMz*)DXj2RbiYWpCw7DY{g5 zg)6$KdZg7^^OdvAr+V5ZUU?O-g(JzN4ueQ;V2d zo7gh!$b?(2Lzz~}{8=7{Z?%zQ7HZ#-tBRa8-ah}nP?4yua5&e!#Wv=e-D?rJE|*>+ zg;;DLD|SJJ!)>_G(|ix*AAhs};%Pdv;BFjuDN8A&^jh}xdsYt*Vf-6Hn_;D#NXs$Y zO3fjhDej4?Ukt4and0t*aD!4XH=5eUiH0!+z@!hF6-sGu!zyX~e2d9_d8I^xZ=FrP|&*rY@$*RP=py ztGb(7nl8H9Fr~FOLXav?!z|Uk&cLdg>P|dQQhPu+EA`g5^(pOhg!yZ1YSe6^oga*w`PJ-NQ>JpAth40tvtJg4B^tr7*QdVm$&N3@|l;`jsQM{y2pE6!SI2T<{vErK*uTlHl=c3PY zfkM6AEK6DWsP@e}E87%@s-x?tS++fD$5IjnSu23Bt>Hymq+$*5{NDV5dlb z@w0%-6UJJldyxBHK6nHR|9Dn~y!rSE{a?{LV@xa$v0)(wNKXuKVbTp4Nr{14P*N@^ zA7UW)>&QB+t5tCguZ)F9u{&?QF-qOn*~+KLFfn^f_PGrclgFgk?PC~uixF4hn~UAP z%BV*vChke>w7M$f$P+JtnVqA9)S)LoxOBz@sZ&peS{-{b)cUz6-1x`Cny2vItQX$y zdf^SC@Lnsyn0@NH5j6L7)m&nYtiX!~PS^etSX#%pmRCwIN+`5uQ~{fQv_ZUgS9V|V zx{mJtTbA1D0u4u+*pFR}6y50p*Ht8b7Pj!k=Ct-9F?=t3ebne!nu7j&pkCN6Jt!JITu0-5CW`&rh+x@DdVymvK z^R14Gt-f-G=d?1(W4VM5t>_XsKg7M8D{S>qB>Q;Vl%^Y1#8W>e2XW?&#oFS5!8^Aw zX0dZ`Uc*(3PjOpQ(9ZWTV7kI*7Cg4jv0l1hW-TX>vOc$w-8k7+kG83ftkKb1Eue?W zqvTu<*-O6Wkb_>W-a<&K`{evI>+FpQbX3#puJrhFU;Gh6D(^s`I+~6msHq!cNJNjo z;A)Btocyb+c=O~95)hZ_a9Bv{icB<+%;) zTyz_&qpMGO!B|c*Eo{Z{SyVpz$BVh$EkPDcHgElbUOBbLsnh~T8`fNcwrKh21M5W( zJ9CU%A#PMHO;BAA45};DMG;qHWO?Tj{1^XV;+hE-aF+cbE3eZwI6En! z^|TN;U3X!DxGO$pQUl&gEqn51Ttvd4kgRoZsg0vO9l37AMSSRGFgcCs_1HGs8jwY5 zk3Fe;nySIsOMA!CwbWkJgI7}qS#Id7~ny%GS9+f*+acYl}RL(wx!;m!R9TudY7b6Tn8opLS*5kbMy)har+3n{CtIauVlnDf}`!e!Xw zR^_SDEiDStEo%y+NSCOW9WxVa;W9bp!)9{NE!51$p2yW+*08O{)~f<0)`%s1KSxbm zF@t@|Ebl}GTi!|F*0KYC%1P2y5dh_h26?G6F&+vS!tmc6AuF~_#n3uVB3Ht1-8-wEiNM`_bB-kfw|V~K`e1S8q|o5-!>G)tg3cd0 zU+Fxgx%Rj|byZ0`(@U&ciwu`Ygtfpj{s!?y6N^OWkKtzG`C|r~MCqe5e9Y(5yD#^? zH~&IpZu|TTw%k^h7fL>@DRotZ7v*y;!IvEI3g2Ja(*CuIProa5m4xpXd$(b)mx{)l zC98}I=VKDq@JhQW^mJ*M?4PdC>b@n3Q{pD`z2W!5 zA*pCTD*8W9q7=>FCQ&b%AyQ;WOo%F)|D7aD(X{GCGlT-!MHNj|NXIVp2%x!iHVb8% zE)tPsk^qO2F3w)8cHmU9+D zPTFg{RB*z?X^wbSH`VzO`=`bZ5NCvxHyblymM|#+Un~x_enD|Wsv;se#54G4Ej``U zRb4_|L7~e|QEu~>(MvWibyjFN3+9Wwy1s_3ZeFRIAL1!=ad5swTsyW@O$`kZDsQ;} z&DElIq8mf8T1*pA?AqtEE8fCmgZ9Ril^ZkJ3 ze)+___AA;VjNI}`L9YLq4KN)veMYHkclfTC*u~W7;+s6w&_5b(HH-5le4gKp5la(K ziF%i=epQ9|t#@u~ru(%fzUSiQpQR?twr_oM+p=Zb##w7F%rkSW!cw@@e4a<9nY5)? zwteGcac)MPYRMXRwlMFks}a?7tFyKrIFik{tjvCedHtLhME_~3Wss#RDAlsGE4mud zm56SX741i&Jt5jGTjA1vOWrBW3sOTC?8Y?|<~5LSDF1cXFxVn&(X|L$v`t}~>*6Hf zi-ma?{|%nmUThJr=vss;+NN;1amu>5-5E<360;WOk+P*o%v$HRY&-T_=^pz%>GBzJ z=r`Wh#u`1N?Cn;yTIn}hKg*^YIlg!8Q)NW%^WcL#j)Z>c(-^u|c?&J7N@r1#2E-X6Dw{ckKBJW$0dZ{0K(ur*}A!D+DT zAdK|cvub4H%2AEu#>>U@XOx$#@#5MCtJphFnz%mamoqP1gyjlYTV2B+H`D+HecOW9 zkv=O&`Ly6o=`ZJNRSUDr(sF*cR0X?b^tkboCSB_|rB|t(v}Gsrv0nCr{3W|uLF26a ziL>!%dO!Z8M)D^!mOpuk{JAgtjAf}GG#+P5r{HYq44f^UjkBd$I9oa&XG@o6FRPU> z&ll&@0ytKa{G1-nlQ!oM_-Km82*_D$J6~KQ?yAohGwg0;3i5*q0l8Wg_)!maLq{ER z2@982b4{frMOFk(8B$UE*>a-VBA;A*MZ^@1V@r#_^RuTK4W26BoQxuU{E3rFIi2db z)DIdj1#}8Vqy_WTNd9ET@+U8mKlf#0F&i_|$DjF_k-oyWC4Ge-$lu!?&%@gcvi3V) zrVrf;*I}srHlc-iRBGGpj<31Rh>stNDG7Fqt3v^gjPcH_Nly_SfRA3^TI z|FpmV)Be)C{Zae7q3*xc{wi;wg`4rcTK>ETl|e@!PdobmSo<4$0$vmOlLjq-9)g;9 z{h#(%8s-0KfA#TYQ-AWm+x{~Cp5i(Cc>gc7<=lxnf4=4I$w97?;xEmC6{(iYL#Hj- zhc!!w!&{{r@9_y|F_kn}+)sza;X8 z9zQvP4ckawmn4jX4Q$_>u)KHBr=)H>iRX^G^2XDzb2jdL75)6G=%8QF?e-err#^|| zgR+Z6TtarirVXnl?>bgN%u*EHKDKMAhZrSzwSkAJfUEiL2F^xCR*$*Xb?S z00_raa9zP&rh-N0f}Eg&nLMK!S}-hl_b^+(n})~j9u`U#Y5KBH!LSgH`8xb}59=Zl zsEc5lW9B=J0BKYThJ}vibB#z8U05n-u7zT>y<^;zLVIYJ!bQEE7h2`{Ze`m}JM+Sf z>3xbyCE)-0{YnDQIhh6WTMgzz*-$bx2^tCYhq^;n=-mA#?Fdu>?SS5do`xQV@*z8v z4BZKhfcimKL&1;x zL-M25$RDuSB-;o1w?ZsF<;S4U1?`YO)CLl_C78boeGV;vWSOVAZdOj>Vf02B+& zgz}(O(9_VHPzh8Coq#mb9}Hawjez2zOlUP>$(OGd9vzmrdRSzr9X+xqui-c9D$ zCwW^p?DV$oT6eiykEiwPP1bry^j6jd1ji<&XWB+*=4H)INxt5rzca<|$jMX&BfNdA z@z5Hm0!q@7wLC3J%huAhaE*&Z`02VZZ5~nz)8=E73C_~8v>Yu3RVpSkQROK64DCkD zboz6@x!OWPo5hN6n5O%@2~|H8?_3pTCVw-UcoB=}yp&A)ohh@^bL}ZP%B5j8F~vSQ zGc_w`UXndMD^uAhx05q-TDn$dQ*zSnDU))NGILWU5GJCUta*&g$c@U#$eJadTbPZ^ zNl9s`AC+Q{OUiIuW=8C~8MAK{*67T1dwNnv`l6KKM3z1)DPv;FEa5DAfdsEb`ubSM zK$D!FR%Cg?q=46;u3u^s@AK*u3BbONe}&O!~)MM!JqV-13=P%sn% zb%AV9DAXI;5n;0S1^Yq$p#jifC=wb0#Xw`ASZERy4^4#qH19-tT~4O$7k3Y9@8pdd3mL9tLGlniA+i=p+}ly@fo8^x)TCUyN1aC=XXO~qB%BP7X2y(^q?zgBKHHviOMfsY zCD)#lK8uED#tcU$MP)X%QuCM!Beu+x`4YD+IVB^-o}zI~Q@f2bVuJ^B9Vlu!x7iK4 zdzz+YWvApM5x2Mx!_9SIpFXJBI+5KIlv*!kcb(P~BnWLVesQYZ2KEJeUrSR3PKOpl zz3{LY#dX+o2ZI&{-2ln847cHFFah*Jy%?GfCFZ5tlV)b5T!Y`lyqPW3B9UvfMEk<* zlq|Ue9((FpQid(pPIaASo9#%-N!HCpD4DZ$b)Mu2smIJAg2gmZ7qKo99A0jVeR4`_ zk|V=zo0XO6@n)Nqk(KMn(fN{mOUn6U|3>&Nz0+7I*$Pw5@i&Fu(z?lBXZ`m>Nz6;n zu{%h8a(ZrdM$)X5d9-P^c}dxlzLYfEpRmx(y4X4U?)oJR>PLw}p)@$!_a?nO#&)PSQf; zVK|LRr|RX*N?X{%6SiWXH7{FQMceq9b7*yKV`xu|xWu0MLMx3a60iTy!H>_ZTk$VWRKI7!Trz^t(8yXT5r`9*&By?tcGlYO62Zjyf7`pO3z zrk0+%cGgwOI{B?%`upzK|6uB0F0_xx7@^EGYt`zMHGPN8Jm?kO{fUmft{MM~1mwNe zuecyCw97w!+Bth(S?-Z}uhr#viHG8kldpMh)}D|JKlHqJ-$&U$d@;A{ZQngL!$$>n zJo8fNM{|PSOTDSYR8+e=Ch!MF91>o=N*zxndw&fOl4{CL%wz>jw< zzb3G5ap{_#uZ@<>i|kx|Xwox#KS)YA^2#eycL$B|{c(1O_x9cS#ydY>Tlh%g8tK%@ z+MreMcHHpr8*wi^Gpf}sZ{9JjX2y~HfR``TM^-(&u_C|o+#a)-c@G$K(__1*I6oV9 z`|+giFI5e(4&I(~=Icl8?GuVxzj)P&jH>IbpMFDV))iOZoisi({knTYx_lXH>eIja zhLhLC&iea3MY?~%t_+Zy7J=feZ_A8UNEUfhBvlZR%jO}fC=gjGLQ`!X&JF;Zj zz|a5QDWRdufWK&;2mkYdt@B@4lyvExE9NATyT{vJRXDpe&enC!AlEJa>&)rd+uu*g zv(@eBweBhR?Dm=d?Vsv%`lfr@O^A8_W7pxA zg11(E`9+Q;Wy~GD=Xa<%H?QQ;;S)Y7Uwh5uSHArGnr}8f`Qm>uSRpaDSDZLozp}^D zo$~_XvrHchFP#?F5Myq8vP;7HpL*Ay{b=Y5*LPZf&*$$wI3j(CSLOxlQ*oUaIyO9_ zX~*8&I@q!D{=aq@`qA7$n+uLU__TRs^w_kZ7Z3mP=wCy>Xm=v5-!&sP|NUgtvbRh3 zc*mcbkXH3v&%7mt_sBzH$v=PNyz8{(wJB@bzLl?~zICnbll?mnE}1v?`RHi& zQ-_8`b$Dmoo{D=OZ+HCQ>Oqm?za09?g{=8wdwugpfRr-pjgw#T-ya|J;)lJG;vRH% znNxiBK}Vi@MBh(Ft&e)z*Ia&Et8MGuWuJUIx#*{3Z;tT#VbguK(A=Im`<7kUa{P7Q z_I{BwBNmOHw&COOs4vIQn`h~EIy~;{xOT-o|8}sh_wu^OKAj&i`s&xix{k69cTA2~*!}YU&nokF-?A@g z@}a-3erop<8$Z0GXGmUsYyXuS&)cnC2VHC%^Yv>F&q}a<`{Cc*=?8n=mUDdb123<> zyZgZKCmnu^?s&9zRM`9rnNNHh8Q5V*!(W1|^)pVl%_!|T%ypsssYe5I-&ow}yCQ7( zrgTT2u)fQuylDNQYlRlMX!qAMx47r5th9dp_(x?sCl^>JznxHV;QgQDZ@hntPp9ZH zJ_F0gc6wFY+4ak!F$Nj7#y$H;?qUDqPo5kWKfkgd z_}VunTpakfx}NR(^%)b`#^>3H!Iye(ySQ?G{P3r@Y&bq7x8(H5#gEUlKVs?D>G11s zKY#t3!LctFzB2H;Vf`Qb+e=@3;dSZLGyC(s7p}jR(7o0@8GGurBfI;)He|r9V|V3N z%%1mMtBva>G@SO?@!YXH*AMDpJ@``YiV@qYuK2_!>QJ<;=saE$!0RjLF?->6IAS&TDYM%6s;93wz<#AIcA{+I-`?!=lDq_&mec zRkp>;_shlK|Lx8lNu@Jit~~VM(eJ{yB&F4_+5W`dc5^-}E|fPb$$)n5TNdql`q~a> z1BQ-1^T~@Z%zwVe`y1}R`?l&_`~2f0-q&5K9{F)$XuE4(+u!4z zPVbs_^x50$ojrB`HR{M6{!i`kKC<)S3E$k9A6NSD#`qih54+mr3jX?oOYJT;`dSvw zn*GZypQYx-9@{!o1`A1>W_J$o+Fx|cw<03>Sp+?BRv4haP1ikD3ux{KU%7{@!pSym@xw%6Y zj=q2ROW!WM{hMF9Kau@;%@3dK@jbYqaC?T9{MA2?jC&!|yz$wmqaU%CO?vp^lwJ0{ z2THdL%bZm;W$)c@-CTRAT}IM`9i0zvTl>~i<4!#r`|X7z_bi>|*XNlVjy~00;?t}J z+ounXyLJ9o1D^kI$oQxCFYEjC`3?5n7fS#3ZI?L%j?Z}YN!J;_pH8g&?A7ACZu@xe z8!NJhc75v8d13CLkR=_n)}&8A*7xD$n1Ro(ZChjMA3wO`<~8SHuGv1N*W&9Bxg6_P z=SQ@A`*7Imm`~>2XF4AGcNxSnJR%Ey82_03H7`?Z&CB-+&8t<2=H2RQ&D*c1=FRCz zAM?$ckN<6&Pe6=j3b<1<1y0jULFt-rkVErreZS`0X0_&Pc}8nxd0lH|eP3(U_7lyo zZH?x4#c9p2ov)X% z3cS+aJFrVn@4&01{YZw~^jOwwG;RF@URvZZiIUASR=tXTuEi0lKaFT+{L8x;vOUB;8x@QKa5_bCUm`bewr{itr zRKo7|FJk6OS1)NoAh3lRrTh%j|4gkfi%OU(T;YMA3d0lT=y4;p^vqOk^tjQJWDX%y z-G$(|sBv0mQl>T$g^d4m(Fl$nH{#m#%;an1(sN}+WO$!Gw&8b98e|)nWw)hdW;tf3 z+2*Cp%gR}3vuClgV9fbs%|HxTgGtHB$;!E2n>8y}n>=Y`*Z{&5yz!PX(UZrG9zK3V zv|79Nl$#XFL^Am%^P1sVInm6uV{@`*rR1^+AV2C+k<2sX$DE-^`d9fq)K1C|JWb|*X`z-cV?5z(_HI^lSwxe$%wuHGCvz$J*$3!*0viqdXSBC9 zaiq6(8$J%(6T2 z@9u3#i!w{K9O>F3#X~wKvUk$F({UrR{UQ)BqDWS7COBQU7j;~8dK=)B<+{))3xkZWk)ZJ+Lc5|bNM@4rB;ts@?28! zTiN}7xR<9m8NQ^C%p%O0{9W+h3`fsHU2>9ky+>|YYnt=aBX7?>r7WLB<)n;E&q#^N zPS1@RH*vHkLt8QbBg9IRVImuP!yP#}EW*bo&6>+9^5|qu+GX)8?Z4od;bW7sC#t;( zwS(7WF54I>Ttpr_9Rdwcply1m|>zE8}h{}VrAF8!dWQ~LDl zC%HP&k*SSkFLM%mjZ@egnv~|yM&_hz6O-&>mz+e$ioHVI?!kRsy$o6%n}vhdWD2&plDq5&Tg8GKqH*dSPS=f0LCy4HM*` z>KOc}(j_Q$OL_?vjp4spuZNS{(2u~JB|!X1_zo4SgrmnJ zJ*vdxNw27758e}RIyKo7r^-qde}>^+k6UUVnaWS+L2sw@a{wNGq<@kY(ZiRtWF8X_ zkC&T8kz)D98aNib0eL0!ccBr#=;U8t&4#W1&(>rju5_0%S`4H0dHfp$ulnFl+PE-n zGCXVAfv!H*O6Ukw109Fl&YJfBw`^Qi)WP^G`{htA0mVRLpjc=U6c0^> z5}{-$16ly(L*jlVv>JLGS`WPnZH9`Vy-)>o0IGq`LNeY~zi#jYS)mZf2K9#eK?9%| zC>~0K7DKC{_0VSMJ!l8C7dikPfsR8bptI0L$kd&^cPJPNg$6()AaNfHPKDB-1<*s# zlh7t;2ecPD0J$M+5Bx(Ow*P-d8|C!!f4$i^(*Ip<{`_;YU_K`j@}1 zS^L=E9{>9j>z;h->1WnI``q&zUU=~z8((_)l~-ST{f$lk_2xe}zxDPzTefa{_r2}! ze^69hQo3X3uH9wjdp_Lz(Z`=u?A!n8fzLiaSXp)G@R91HU(_7?@~h)tfAg)o_Pe?h z-=F-U{?zF+XMa3*zTv`8KVRfQRn5!W$K>0}&+H!%7}UCr#oG3YcERmCbPVa#`N}R= zUES5zt$UBqp1rQ=eeHF9`i5P9L%$nu3h#gOEw>IBI4EN9klThvCe7q9OzP~k^f_}g z=4EDO-;(YN0* zX6(4}+;28<(&V@)@dFN69+@lXbo z4?P4u3B3w!fy$st$PG0>L18}DzEC72Zj(W~sG%pJ&Cm|00;++;%~=Dj*V9Kq1E5Jz z8YK4PvTSNaNhR35u* zV^L{zCWnV|91MPwZK;k-bp%iydBN@I%xs7KhAf92@WkrzpPZ7HK1+q3l$^|=Fd4x_ z<;=EaaPX0puPj?eR;G*rqZg#ik`p2vd-MdM4dZBr;*G;C#t{tRYgSr%MzYOdEQJ8? zOv%l1ZzX$TLlTl#A`@FiN~+zaq#>Es#8YlciX;g+CnbkvWg=Xa zE5GGK(oTL1%i*MMrY$=?J4G9jH7^OCo5~_Glv8ajVsDXu$wa{UoVm87ysY$Ol^?=u zCbQC(Wd(l46%uUD;gOy)DMdV8mRCiJDhO?ar(CP@PZ?n)cXUQZ%Iu^J+suWCDL3UF zM@ptD6n#kN8tTw`=v8P7G>3Uc7_*01>=rS@2-Ai$N6}b)kQJUg)Y%i=d=m3C{U>8x z_su?5nX}h}vi8{k%6wb9#mDLkSV7rJ3IRD*q1iy0ulELJowOe)`ws&^S<8(CWgRsJ zYz@YOGVhNEVN&a1(etxCOieECMCp%fRtq1t?{r5{v_DK*@hM$bB1H zJtz%L1IV>2n$?>*kQ9IclnXEj^Z`Ra6DVcP7Ys$;3hW2^frCLa7z6r?J#&&ka1#0; zFcIWEJS_uk1166_2f z2d@O{!7kuM@G8(ekn#WqgIz%zXaoC#-M|50cW?yQ1B?Yj!Kq+RFb(Vl+QDnUeDGTE zA@Dlzaj*}#0qhHI0>i*E@CNVzC{HQWfc?P};LTtIcnfG6L^%Pi-~g}-I1ua&4g&jw z5nv>E8#o3W3dVzxU@{m5W`o1Q#o!2V4Hyls2S#NnFM2Qld=(4=w}8^%>;T(=6<{!U1ndC1!Oq}W@G3B9F!BdOzzDD(cpEqv91e1= zjCC%U2zt>_WrHSgG3W=b1pUD^U;wxt3<6&TJA+%m2(SX23myUGE0GhRdFcS2l!HWe=;8f5LOauKvI~V}wgF)a!U}x}gFaq2JdeJZz zf&SoLFaWFsgTUipXRscO0L{1Io`y06^an%10I(m}85|5ofRjKk8|4c02eZKdaIx5f zE5$w(KExi}Aok!Uu?OE1``+*)_F$#hgU7|ZFZ_r(cu~wj^H9wDQ9nU{&;|y8eZ{;# z^;68j5n>L;iunNKC3-MT^n;O?=)ru^Mx+Uf^VnkMkz3ivSPj=OGl$A%(>+a+`9{HtevSJ7C zhI@V0lzm*oo$OD@Px^NGNnb9%Oe5S(L!WKvvkmvM%OpQpeUzWlpz*QXl%<{9ZsGu9K67@5c~#o%k6 z5pEKake}?7$WL~q~6?UR!-$N zSFHrgc?geObo+UR`D`P7B5#qH><@`c*?SR*Nx29k@1syl*$C5yY0@W4`3TdZRjH6N zA!9JCBUFQS(4rOZfN z;zr7iq*wUQ)$TzZrNYTY8e%SKkunqp2UIQ8;&+nrD`iRI6~9uRgiop=F-e${4H-%r zhpBVWQnn;ak%R2DiaaHJDPv*8Dq|QaXQGz$N?DUIg-e z-h`idis!M4XW4=D}*x=1R!%xY6s?FeOK6Tcv(Vd6o85%Ad$LQ>DjKXT(jck!Out+& zHe9tCdi$^Ew_Z>5{2r#{)iN(zy7#0%8vf*`r!!iW1-DUacdU|zC+;ySr}VfdDn9hM#~ATR8PMa<;~r(yO_7-{ zW4%2YX7DkOKFw1DJaLRrd8)@TR^_}W4!tdqIP`qi;~1{$yq-Rt4>_YD`549Dmi0WB z+9&bpIpB$Jtl~wN+h~;E{#Y3BCN?uK3s8Oft%x#2%&cL3cAo)qPLeWuB>rqnBje%^hm}L3a~t)K>{- zIC3)Ojc!2_dBeG``8xd6O6o+aP(F~k9VSKQFL{TkuTzAoYB9CI#%)DJf@Rg zMdXyDQ2xlASmYSX9J#OPNBLM~1SM-HfYt?lCD zX+tk-L<`VA2QCL61y_Socb^3R32p>m0cEX0`qs_pU0`qg`++;q%UVW1^k%RE{qx`v z@FUO-z6zcN%Rz0lkM%D=5V#Et0e6C-;AXHN_&GQjtN>#`>E9=TMPMTMDL8=m{J{+L z`@jWYHMkr+2(AYAfKP&Nfg8bMa5H!SECM%xd%@ShO7IKtIQUnv9;^W`g71Rn+kLDb zgTdf2&;}j``+`To0bmt40^9|fkyj5e7JUjBiC)&ArlQXPZRmS}Y3S3$p7aEOcJyPw zMC`8z^U>#mG1v!!520TJJ`TPBZUA2gH-Xabya&DwmVxhqvUVhERtM0p1Z55CRxw8} zYe%t!8w8#}FXMqU>~8=Y(A&XH*oT0oJAABffL2iY@p#NzgI&;%2m9f#H`p8f98lKk zx`O@DCxMCR+klbinYyX9L<=|u{aP>{oB(FyPAX_JdKn+a6KSOu;T!-T z24gVq1J-v_S7J{Vk#J`Q{weS2^v`YGTV@NsZG z_z<`Wd)c%8x3=%<1*$Nvg^5`77{ z8Qc!;1z!|<@b6$5{;mWsqJIK3kMprk16RUNI2eq65m=8t611UT1#Ut=0PKf8AKZd| zAUGKPGO&VhyMQt1r-PHgOt2F3tH4C`Gr-63cQcrQelb{&y$xJ|ekNFh{%UYJ`b2Ow z?)wX(e;V8f-V64|{2H(beLA=o%mOPxAJ7ec2{wSMK@-nBJ_}mGH^DC8%V2MCB-kI! z2KBj+oV@k)-%0fQ9`#ISP#$%%nyKr3d5T(9(begU`8{stsM-JjV(&e`t0Ud3rH^tffY6&F(gX!5qEZAA0Y#926-2Or3W$Q(P_Q@b z-F&|@b2mGi1d#vxec$^$@AK~O?wm6-XX?(~ot>RIW86pUH+;jV;BD5EF*Br$JN279 z_cZiwJbtX@PH!xpJH5?&ym=Ee@l1;3nclBVPd?G=!y6Z4roi8Ohomu)`p6l@X~qJ~ zXpwmbqdB(ZPW_AogrYg0epoYJK)n+)hD5qvs2x$d^-()iUNd$u4DV&cQ(6?><0(&uH~BMs zvQFFZqx3Z}e5w^sx^4%?-Hg;2p60iCahf({+$Za6Z~AU@g-FKKBehw>C!!QSZ@c^Q zG{@DGF?01ySTa5L5xP!|`$&Dw3_k|%|DH^$u2bV~MwmRF>fPi0bklX4Fz)o0=*f(? z+$TipjovepB0RmLQz&n2BUzW-j1QTSLo>!;M#;>3iW!+Ryt!T;Pyao`lj-ra#>V5v zpuKtT>n2?@PGH)u8GkbK6wP>s=T7f-)TU{yg?KZ{XvV0_NTwNsiP!DHjQyAqMH=6% zkJ_X%n)h(ijty@{JU*wX^dpFZdYck!sN#rV=y+7qj9a#y3A%Q zWwgHEn6V=>QfbDN%;=>VS1|3>j0KTN<2Lj^F|nFACo@V&V~4)GX_xe0H*aKP^ffkP zK4f}hac0EUj5nBTW_UBAYsMZt8H&^VAIunz$%7fkGb6rc94|qa(eP#j*n5Yk`QdbU zcGLQOd%CVsZw%0k8k;ddGjeRkc}%)yjKH)%!<&2>o=kdYqHAMDnawyJtuiq0oOA`f z@oIVpCA$e_{OSGN_9wgTPw%WIbt6x;Qb^Zr)Qlq;(=M~^ZkNG~lTOh0IWxX#(lzhE^k1ZZrZ8fwD-M;tE4Fp3S#^dLzPHf6ez(Vtn)zzg?y)Q=n9sX@q#pw?{R=#!Y zj*0L8IQhpH3bkqQLdxV@BlYQ}hcZ!#=s@Y-f8^xeJBE+lQM|QwLERK@{af>P#a34O zb@@M$kY~a&DT{8<=D=snUayK$w;mCthTxp_nkeOYX}T{bC-%jW)z_ac`D#wsg-5q&g@w2uZckqpzUt$p#j^gs7XCLZZg6^axN>^xgU7DKW>)(K z{B~;F+VDCoJ?wSOmGDnI^xK~s!r@7Ogh?F=s;u~5zY1Y5ujJvcMw-d*9JHYU8j^(AN>oB8G73}<)vp=s-C zzImVm;_I?#;^^$~@9YWB?%Msxrwrw3U8}~frcZ}sZyC`n{fFiV z|4856%by9q+_MK6ROnV7wP<6>w)i@N^c{bTlpJN)_acZ+5M>)Dx~t2FxU#c-R%%Ee#)rBN%^b5hCl zWe38;##Npa{u2MswY&Oc)_E!1?51ZA7Jh^3wu@@eiZv=+W_-fI zaQzBfc7F2_!n0p1SN`!}_=@-&>RO-@XAG>nck9

mCVDeXif@5=fbt)DIHxVuCvw&aTVze>LzE_&bgrSCPX+=`X@=dl3~y&ld;Ir(hODahZ@>AhQ( zeWur)tljw z_xJZfklpnXGHg@IdC-U`-{KgW_CInK2&D!-g`%(J#MakbK^UYhPVIp z!nD)z$lsn(SB*V%G~8r=qeWf5M0qzKfBoH@qv4qk{P1guShV-77oTs~`dE0u(>2;g zU61@MNv^bF^0Dx$LG`Oo`VsBF|JFv6pE?$vetS;B4R4}8_FPx)z4OPyAC)LpvqAru zR;*Lo9wn|m9{!`+!?jCIFNgR_Z%Rlw9xhXlxf9Iwc9s#0^xDqpYE^dvxY+hjn<5vVF#$OWB!lW_&8WezSNm9&G}Kx*gQzAm_v+ zy_Ay;Pf61XMTf^H=)TC9v|+<3Ov*6R#Tt@mJcf*%l%9rO%5Vsf|L}1U|4EJ5kV%bk zrm`XE?9e#Pkkq8C%=qEC%6rSgZ6CIjz6zAKC9e!h8=BMDCT*Zz4Rq~5Gd8>#v^wmy zZ#84>w0(GS*lFwVlAw*?PQ9)cpbjW)BTi$Gtzj<%+8#6tv=eAC(5|3GLHmN1104iP zW1qu7D}knf(pY;YXhqPepfrYjJ1C7EF9fXtx(u`?=t@xP!><9223-q!HRxtg)UU30 z)Ul>;#&Lc|u+PY5Mh`2(qQ^&hKl)_CrbIQ$iq5JR6^(_jbi&rCMOM_bdhi{eib>m$ zAqkR&%1%}@T3-fSC+LQa9(EhKrwkj3GlA7iADxMr;cQ@5R9!@-{c1)6rwq%2Ocq@x z*6frV*ctaWA|;X2D27HH^cVnuKw#c&uH|if6T>8#NtPCn~yriwqczn`cCg z%0wOuj~WgWaR&U+B5AdDQYKb!w;2|X1s3DFW4?RFby3mOSlh*?(u{WK2_e0ZN%?h& zn1vK0lcM5H;EV0(dhDY>`AdZYlsmPj{gHHQ~0C*#sG(-LV3!vtg-bNdl{ zH>@H^u1^aNqB@SF^#Q$;QsO7+Sn7j;oQ}&BmGtWtur8qUxb|%>Cq(-m?fP`?b2%Z9 z&%QmITuz7%y*plxIP2N5&w%djE-MJ@+NNjw%L&o1Put58XKkTW91A=$M_xv#c5S*} zhBQ7;Ll0_Hi$+ZvG>&c1>@q_7;hJAYD69|f-1oBDO7AwEJ2t+I6gv0pc3G9&rhkJb zv6m5l_l{kA+;|!C(HWN^jQdCXu6^ldPk+e&{QrwdNlA>+e@y?sPHKcH67NnBLyNH* z$3!J(U||wg9{G}3r=+icVE+@q}_W1VD7oQdf% zQFxjs4~J^zC@h*w!2&>f%th;GS4>7?=EVeJ#t*xgH;YM59CI;&nB)DHrX`>vOi!ZWu= z&))6+gIr8$oFgaZZr?yAe@d8rRQexsq790gUW0Ep1b_vNpIpcz%DeX)6C#Ixc zEPdyT144_rN_j zpCjGt@;Oo+B&TN;=pMPR73in$XZd}+{~m%)OdB`a`y1!}C(Zv@_d@hP+>`IvzI|tN zqcwkg&plHwlc#NBY+wIB?saLYTNAluAe&d{T%P{bXw%fT18&rw^Sa?bL2_PN zT0V6=X>P*+L)7(AjV|bSLsawF*ru_*fBt-8%dHW58=hc(@r2Mmk&Np!18#l+3idMv zDcH{xC}sq1m=m$JNS>QFlA+C<=-D(pdBpgLrU(C;ncH+)N@Q4xrKY9U_u6qnGRAH& z=0#&eHSpp$CO%^{p2##L$TS~$7L0)gyr_hvsOwurHKnoEi^S0|dRPtU)I&Ux!6#}a zk@U=)oONyNXRW6sq`>PoJ}URx`1LRj${XM8q@qGP_neTM4CbNHgA4`rB1OLJS5~~i;^E{8 zUEcpQU))jSX=Dx;jV^?_`S?R_$g>_-%fQxcQQnnnTra9gJyP}34BlwFe%7F~F)7Q^ z5n^tE(17giM5o&u4H(iMPe>CFTWDa^{Tp2a7_Cbh7kTyf8e8sDICm&7VUoG64$Q)c zEyh#Py+M7zb#l@;J)sI6#PKQPGjg3sQHa)o;_ZHi-a}Fnbc0a;BMBX@@p@F$9?C?! zMD<4{j7y8hPG`76)V`>^xGcIklfTyNQZFh49TarSa%J=Ut*{>%4LbN8*oK{Z`ofWS zP3sC{eA*uX(d|oTz`T=Ma%L>!VlAOf?{?ig^u72Eo63}&nvez+nxuV4Gx{?5mla7+ zj=a$n%3lJF<3>%4r+bAS%N?c%P-xINeYn?H3zkD{@wggLz>}I(P$1+d^31ZTfzmFh z=th#tFkBDd`n^Xx`>6ebhIbh1$NHBA{t3|J864Y=hhCjLaiSz921-9QE$U`G4pFj9 zXhYH;b)vfU?Apini-gyYyMo565eEhF(z&2q%!G8jOXbhaxcG@tcr2rjlz4IfL=3Wz zOB#OBIL0Jp#$#md!l|HNl#qB)iI}wbG0ieAD#El((j{ar6-ROkb`rZpUQ^;zlP)g8 z%vj=uOB^#CirEW_g9hkvp<_}qF77|(qTVcKNyvz>7~C`q zDoUR|arpk3Mz5jc@fl@2ZjotG3CSZ`qGe}ATw6soiAC22*Dk%lTBkVRb%{6{H*eaa zDc++m90$DqTO1iF7y`+E-E>(}GAiPoXUj$2esER6Gg9fsRuu-d@LK zjJT*^jQ(#K*^3F%J%aK!2HzFU_H;(8S7K%gzE5k7T$m%5k(P+=3(0A|zOh8yGpGaW zxswHZ)#ZkW@H#}UJA{099h~7&j4rQ9L-Ua|BJNtqb09KHd@{uRz|kymc>N@N zQjJi2g2dCB>aRXL$l~!jAmz#TGm*iKwz8uK?Hv1u9gz3bxfUK+ODOUHIY zK62B7J0m|YjR>DBG7jH{$EA+LwHU?5W0LlGv;@>+BIR!wYBeK1LBCIBVna}J%Ss-G zXW$rwqCP6xBE0}yXmm=y>qTVDYe<2k*xm?cWccMj$Rz3^qKgV5f8P6CXLHEoz4&&Z6>;p5WAkjt@h_MXX8;J9u3V@r|p_N6Ok&6-tc#*C%+EWdC2#H@)~(Jj}vd^o!0 zrZtb*$Ie~R(R=nHPup8XN6)%@iBeKFymQ{HC9{?+T^ikTL-fu)cbYlAFHJV{SzZAx zjM_T_>Qy7rSF+5!mqKulg1szgBhXr)twCFW_5^JWIux`MXgX+5(3zlvK$n1y1YHZ7 z1^NW&LePDn4}+co-3)pjbQdT{?$L9RS(BYL)vS^JeVXr2^IMuVXvAvg5cabVbL!-5 z%9(`e@c(L;C$vd^l_66&B4?yM^X(jmeU|euWZuh_?v=~+21k1qpJ5Bw$(*Td8oLL( z7|&q0v7d4hS!H$?JI6}%JJ?({6DytsxV`LYCfPUa1LpD{*z@cKR*Ao;=`2=_ry-sx zz(j3U=I^lg*te_-PiH@}C)f`5B-XCH%id=TSroqy`&91H@!if|!it2~uwUhy>}<~2 zoI7-USjd(~;yukyBiFZKjYuMUn+;?K zSWW&a{^hlh&gbkPR&E?-U$8IP-e@=VZ}%|uc~Zx@9ARE$zc9re{tEk*{lsehRVcdK1H|} zZ!un+m*6FN8Gf1-3RFT&0@ce5qf&$Apa&v&w2tOk$fgIFp4b8fpRm^r2Q zm$v=9{Ml}XzmN9a!C~s%xY6FEl-^TpcW&*|O5A^tadTAQ6**m1IuvtIzss4+u!}2p z(J8`;V*k+M*!Q6%^lF#J-VRr=vaB5TD6N3~S!vc6Lz}r0dz@aystF}&y3kTzANvh8#034u*nOiZYli(;o3l99f?W%} z^ewRqcPs3`9cHbeE21s5O^^rJ-*bIVDk^N;_1{U2!NB-8&4 z6Sg4JTuqX;55JVY>&05Fk+T1P{y(uxBnt2U$0Gj>a`x_(M&#CrB(++SUcpwfRctlx zkC;J;`y(9>vWGPNFUDH7t^l$1Yy*3kZDgCUv+!p2D5JIFg>cd{lf;ik=m}5-`ZQ3 zyC%E}^DZ_YoS`j2qp=?X#nMv8BKe(c9{3QChH38W(Tv;%!#zYuF;wBpP=*wQ zP1T|1BBmLUbWS0>NrB><1yC#}Av+f`v$Q<9&`GgGqu)SfjL!FrHLmne-N*LB-;1}E zmY#(t?MakDp=VW!m*)PnP2%}S&o`-H{oP%J@za>?&XGL#ZgQ$NJfF-fOK zHSN{@Y{bZNW2LgvRV7*K4Nxov_XhI!1Sm}YXFR#u>E-0aA$C*m6U(!0E8`~b9? zf!OnsuJ;hMf_SWLPt+P0hGQ)&t$ZJawXP{xxlF5+)6p*-hyEq)MK(c~ZBnGf(?F@5 zIXSa0(CfLJa+>mZCY6&8|9X?{|J-s?>HOn=UpY-4W*69p&3`q`|Bu2D=jT5!XRc;m z8NZai{Dpg_10wO;{|En{I5Ohv{r|jw2F2|CTTLp|YRxfQ|68T*%Tqr-2k(hRv@iAJ zJ*i94n&`FWm&xDH!DAtEd=u#d{0>T;1%>eoqNPBiK&wP(ZO}%rH;d5Lpsiu=8KHwf zd%`|4LNh^U!afsp3Fth~wV+EPbPebeuy2jfU7-75eYrls-0}13e4+4d~;b zKZ9bZiv11>Vh+=zyRbP4UUy9qvu918DyE4UzTiA@$L(``YkqF7xO0AfSIcFx#sBYO z|5vwNy70C>7vFYiW~BNRYs$gi*r{W1Vqlub#$MtfKcm zecZQlHPM4O8}2_1v++CIw>`0gT3V=SQ+G|_LbV^;2}^~_RdEBuao7C0i|$-{&%Ekv z^P`(K>K(Nnxu)(R_Tqu}*vV7rYf6{8q68GRUE90`UMOF};N6u~7A(Ajz5G62E^~4? z{+si4|Mx7r7k%K_>{Ikoz5do?Y%Bhgb9Aq3JNu4R=jWkm1)^8so2rZ!E@##`-&fr&0VrKw~5B_3+JzBsybkzaHM*d$5!0X1#0H8F2tE z6Y$9D1?hwM0&oa+^DUtX{skVI;+xZ}tfFJSF1&{CB60X{_=rX5i=nyBOE$hY)ME!Y z>YfiXn}7LVSEb<14r={rXIds_^A*V#y7GyYyhV>##r`= z2;+-JEW4RcWVi4R7|l3_@r;gmdftdHVl=Lig^>;HbFL=id3%6QfovSkAhI1A>3A2e z=fr7tSiOfYShmDajDq~C$3`$C0zShqB4Tz;PeV_91YFYbJf=}N8Wo#~bY|<`dbTqc zqb2QmCZ6t#@cdtlQK8$>8@~hJ4`b0I=)f1?+gvP5vM_ibieE1rZet8@ zB`Ayoc?wfXJf&=Zmxlr<$B*-m5TX!d3**doPVhn&hH@JjJkvsDl&~1 zxKa?;A2G+W@4@>h%8Lb1od2S0ssz7Md?zW)GpYo>lzNC|9%pE2d_nbb1urM|s(P|4 zQj29@ia54il*PAI5A;>lMg_E%I5yC!$m_{U2(ysKv5NT4>0uGy9Y94Vj#Wmi1H@uT zekv;Q+XA3ecfjX1emBJg=>q}(!F-5?vxwZ|j6gv=`?LUks1wb-wWgHvMZ;)Z6T26hYhI1du7Ei8YcxnJ?e6HBYXNq+Gg&NB@ z@v3Sbcps1OSz8mF~*^T z`2=sHcJODAN)&h>j<8Wv)Uxo5_)hHLPg>FxE*5v;Z0A|=1WK5Jx{qVefcLSBKV^ab zDwe%YwcOiShwdKy0m4OI1#RHHk66G?PDCgzRDI#2k7y|S3LEqfjaD^PUok{A zl2s9Z9JBrVVLa8w0iKF@cq#uU=3|y6uivAF2fKK9a>K3)H^%siAVTIH^wP>lVjG3m@e~Y5)}?c}Ww;6x~^H zUsh?tN4gkm;Q)V8%Zw8V>K5k;UDk2JM^!O7fGA+C~9eloG;b~@TilawmZ9=^=NZn=+adL?_-0oagW@K)E{*= z2ny2t}=ZSkXfboz|P$kqBQB)OD4qDuKxkdPhWj;?_Ik7E(?WnJja-@7*#L7xyvTUbD zf%lP&yC+J+UK0~!rW`GC_kgV^&KD5!dW5Meo(N!vpfGXlN%+^mIU4o-r0~&RwvnS` zKi*l|h-0G=e za^krFsMLjUWu8Y`L*%UpGZ(y%7sS2*_KPUgZ3Xora&kaCA=k+g;C;-Lvn`J1-p6a=Z~#X{Q~9SnFJBj5$~SPW=->Cc@NuV{XJIa$ z6ZAZaV^if9@+)v}h`Hia0Q1BO)X~@SU2&W0C(|MG6?h+~#d{XAoxfynnIzvw4SbFM z?I8ICcpvtNMJ!u~K4x#kZu(P{kKnk+F8P!N<4@*?;=Je~e-Ji)l0VB|2jm!Ez5~#&=!-x`}kP|-#Ux(Uxf|2 z3In7ge-nQQs_!1M8+aeF%;$;wQ~YJ&53~rXgTK*dnJs3DBVq@5A9eq&{Ha`?ae4(BH6BbNC*al1u#X`_eyhyTt0;yvY`{AuwA|DFE^-iQ5EnPuH`=>F4C z{faOzh+fi0Z}|(Scbz`+M}9#30KTQ_BYiYc-|=txH~ee<72Y_nS6S>!{ssRCrOkF) zst*z7HPKhv=qH<~4x!9@RzM8M%EBOjOM*2vVX#vplHjaI)#>!9BIC&pm&X@7A(#O3h!#%hv7+F)3 zEqtby@|)Ey2=kiAk~aFu&r#z`_$0Z2&*yjXdHhcBJ|@d40Zc^>K2x8oX|gq+F6Z() zklHlqBip&1&w<+vHPZq{1~KZ`U(G_8rt+=;Vo{r4swsTFT!%6FG_0lhLd};x7RZGb zvK@TN<|Fwc`K2nt6~CJe0`DV^eWzAS8v{`%xAJ~`HFEsD>dX5eceeli(nfFIi}&O` z`2Dgw@5a0Gn-IqKA0XC98(ny3-ihDHACMg}3fzvj#4;jO+#)_t5vKFt&YjDi_Q2rCHnA|8gS@=Ok@oHEV z^@zNRSK(Lk%J@e{sPK;bP=ta;t^k)R$OQ_Bq=oKf}zI zbL=eEjct=YcE~3!9N-_bGwe6DQ+|Y1Xdhr5+$pwG`nXl@4q%WxiJ34*ShhTjwQw(E z{n>u-KK97H77p-zm|y-pds;q+HEqve9vs%{Ngs*w#Q>7zQ&`KglO2#xVrAYFn7h6m zypNaUK??`?Hq7REj2)6&uo7f5R)lNPc zf$qSBx6z(Gye)l9mLCT&H6r(kCI5-^aaNwQ;Klx_CH<-N(NumD0NrZ{-&*qDN*~|J z?*lj=k^2Gk$6Wpg>0zN-WMPR~YJt-E5qHZ0B1hWrYJuUtYk+SS$_M6bST;uQ%^Wv6 z3oF!03lv8jyH%>d;Y4D0K?g^2?kXRv)%_M8R1aC87zg8BIHYXQn=hd-=!i&+g_Vzu zYLkV{>QM_6ZUjaFiYOa2%0VawIxZ4pG38^c+GfFix_3gYP?*WGxUx|KG5xB3S0zEG zqwXp8lCXKmcK%QY)Vu1m1$=>s|{!nFAPDCc#DGQs2a;kg)6(Uj< zK`TYVR8&6fyZ?Oa8q)RrSBJS(R#7&*>v&ae`WTm1KB}r}0YpXQs)N?hJaeimANDoc zq`0nsswIXq3TF+KC}WfjbKR>uwIeZ8nA*xm9d%6rbt7{1RCT9*E?-Z1aGj8a!cGwj zl!N*hdvB_2cf9x{o`6IA8l0I0NUyH8OPeIo=%5InD)v?ImAYB)OG4vAh#Y)d6*qA+TByx z@a{yta&yqj>7{)1R(&k=*70XMeRHLW_d$21p~^0u6Vn|fOEKvCfNmj0sl#jemNw4kWxflsK((#{>*>boVVIkR*v0@*oeB^yfQoE)w z2dvorXXF8ytVUVzaxmJ8eYEnC_bKVM+2gsfr#SvI^0-VqN>Y0q zgE0P6G6lSkG?i|_%llX>_OZ%GhRO_Jd_-;n=)_!pg7VPJiM0^tw6KtlTuoHv)RX|s zeQ~Ta)ylzC<)f;)BLMF%Hdl>})C}e&DIayzJpp+4oO`YK?^Qlx)!G2OJH$Fmex35s zMr{v(M)L`eTk?-9ADHQ)Yk8w(Wf zIoxjs1imr5qN8)8g=~ku<{wfoTX-ds(yI|lF}~yhU z-{nKPbd^+9^?CqrL}Gap)I6>5{a5)&a1t%p_sV)Y#u}=QIvT*SNQ}opy{FG{<-=~d zu~wZ@{bnN0`YKkv6~GC^lnn{TTq&G2t&u{x9XDjS5WNai|6fQkx!+ zLG1|ks*;Wk@BdZGk}u`>$WRp=8xa5ws4PguZ8=Z6&6-I_gk?4chfLm=s{<_v%!LCYh*rz)4u8p ztn?^tJH>k=rJ^u)+AFM-DHo49TP@h>Zm`@*rh$I9p?oyJN`MAf+nw#ShUsG^TvkF; z1fe7})s&3PiX6cSqclcy!Z-~x6L5l_zc(3g?UVUljpsSx1&vqq46q~cJ;Gntpc$l; zi_FOEEi)&}#9mww%-o(bf^da~NzcsDp?QWB{t!3wYs{>fXnc2x7FTPSSuYLX(m)K> zFu52m2qQGo^o)iK$Yh8KFeiwK8fGTK47kkDbNwi#T6(4!akV3J3Cs+E2EwFaa{8Dc zm@nGqEA&o5*rj2kyscrrtbPEO55(^prmUu9M)w0g1p{Urt`z#4rQ{VbuaIRm%m`W) zxKxqVU{;egVAhZ|HOvTDUAWYhN0Cala}>ES`JkCsb;t$;dYx^Ihfx zVe)9c=+f8ESY~Rht0b7O6XuJ8`3i80B=pxXqxeN+5#%G=DH0ijAFjvNOG#5EnnOjt zWl%c5d^DGeT+2sB&COVN6=}*_Rr^&%xlPGwUJ^-HM;-XJK(j)~H99ixZAP=}N>eK{ z;5S3ghB;f_0rL(ySHp}@FNVuv%=;ynQm>T+b2Uuen>yYu36E=J>#@FP5cV1QJk00i z3mWGA<7K$KEMJ59ntUDR>+%f^^ZxJ-T;7o%k3zQU!HlG2SBd#BBNnugln+r5R^1V+SuwQ!}q>zgJO1rjF=K zI!PZvZTa;@U)0IBj=nEL7 zGC9(-{ZtXA15}IjeTsZ%qCWi^rLQ&QdV8dI`;8*Z1E_B2YrpxZV^hmC`b*M_P~U!y z(w+YuNaM_lIu2Q`pB4=1nf}e+BxuXoI)@QIYnU>b&6?}246bTPc8$# zjJ~gXce=`OsT}DQUkUz7yx$Y5fUgpHU%v|cRgP(URl!$vOzWx!z8c=A2{al@c{{C4 z|FD)rFujD2l)0kO4xu)rYCCl_u5k$U;Zome1hbLTSfhzUXbP96PIH*eooiuU>s+VN z(ji8jDqA(*-{Z?qxQm#H-x#iTM6 zLEZT^NaKv;S|ZYu?FYUeYB7IZ-s%uc8y*CyLC$S3Z*vC29PA8%Im8(XbEp#!Gu{~n zbC{E)G29`HfXfIyl1VAXpq~8N8U>e87-=M*dZ;f`YcyU*E)7w4ehsF=B{foivD!Zt zb!cjmMtUej3)H7ytK;A@E>fpAX#X2fucmfsq=G`UK^^-wJpnEgBK2(Em~TW~n;NGv z1Pajw_3qdHWVlRrrof!yOout$nFVu}Gh1U0_&I^Lc_&=%M2o>w9jzoAXA_uBaP9G3 z71uZ$XE&JL^!Ng$mx%iGYjq%8209C2E_4>bT;wc)xx`rtbE&fo<}znF%;nBXm@A!C zFjqNiV6MTNJHj5i1Jp?3zN^tM3sUT1}-^j<*r`<*Q? zw>aBiZo^v$xovPBhxxek1k5L#9WZw|Pr`iC*$Hze-VI1^A9188d#luF_}T|Z6A=hKG$}0E=Mu6!l?o-6mk+=rUFzd zQ=Ta(6Tzg~4y)!@V7+TF511vZS9PyorlWT2f%Us9 zutwCAOaj*cS~q)R73m6S6Iua{0G{6ptWG7qGR|b2DOmX{K(E1B7-tczfn9<1u_R-z z5S7coTr-AMr&Kn&ZvI&zSE@DE_1A$dCgM^RG$F#LX^I_^@zr?@*02_ZomMcL_@l5E zcLmnpO00Qp7;)vk+F;k{jhS7Hf@5f|~0*?^-aE`y zGNoA&(MZ=4v6RPYP%T19I~i#vFs`?NR>#>BdI7G~Zhay?O`yTR3!9hbtxr3Tlsl6T zuYSFJ+IckjHgaC=$4AnusA;zgrf%AbpC{79x`GY8puAm^c3pbu=C4mLUtZ3=TK39j z{Jk8|%4(0#OK;RZ^|WqS&#yUKju{IppwHwUXwc2uI{h5lshKNn+Nl&p+AJoozD67`xx@ zy!d?=O1og!yzV4rN*~Ox=bpD-=Od>BBRO56sh5@s5i}{cm)jmMo*yq?es1lnnb+0S zIF-+oV{x9kpB=ex`n6)$wc$;irjAGlf#LiRz6(j3+}m^fufLjSXJ8NY3-~B#qrR zNs10n!sAKC9C`Ek-|Ts%C@#;<&Y|b(`T1!Y&hz(dp54#ie|5MiNs~%@nkMUO{&wNdBezix$sIyb`#e4ds3Jz`Tr9XdP$?uhYjgz zY9a6;pfGwZrD4v;Sr|T702SeWB`_cMlIRx}hP?>%gcSiQqTf>({p!l>l&S(-WwuBR zhIFT*!>+Fd}Py2rGAL6_kGYyOKI`G?x+3p~}Kwy{wLbE(5@2(+Gr8F68@nt!bxfW1)wVfKw$&6kTt>;dTdSPs1|L%1!`7`+M~ zSS3V|jDBv!G{u*ZdsD&jLvVOFtt z9bXku)Uo|n<2~8N)mRt15LnHI;f%+3vD-m?6oK9rALXE_!^c5RVb$VZQu1QFGvQfZP}Y*J;KEDGoU_Vd2#@ioNvS-$P|L)$5>0X9=mziIK=OP-#5^& z9t-_AHJy(|EywnExs4^_Bk?ifb9o`GeES!+CBpU(>f8zO!U4RZ!_owH?11Qey)67T-iaLAdhy(A=pBzw!w4t+>|tM8tsiQ33P#eZ+|CAQ8sejkfr<`h{rc zd@X$63ecZZTih1VqVomf`x=tB@vreM_6NP1(v}#^gXrXt%uUW<-W6wGe77A2>f=eQ zrt(30mwcpPMc&|m)}x`YJt&f#5;8>$<(1`CvW09f$AI@SjN2F^>S&o^oWfj-b#_-t z+dnCwrzeTW%WDx|9ht;Cft!gnN7Ef!W_TV=JtMK6#YZQs5W>n}XCz(v3yLlPRo@@J(w!-+*(y8mt}=w#;0tME3Cj)II-7USEbfb=_Jp1Ms9 z0Pi2xVrRYV`A*EUCmAW|yiL6$nu7Xx32V)L9KzajA16gSDTR{Btn^tMdlfG(rL0$*O$U63k_StTzk3X`pDnIZvQL`4F+h>D7{n9VvJU&o6I*Qx6? zbI#)HV^K?{n5CJB_!0q_Fs+;tm@7Ngq4kl^D_f#uKywkwJcU&LYMQ8P8$sR!PNt>cLJ1FA08)>K!wiYTn|sYse# z!21|z={zDnsOPAxx&rfVN~%Gk7*=MvN~j;CEpeNr^N9GN`EX8EPvYo|;X(KsK+tgdaKKI%h@ijRiU#vEwsN)PBzG8&b( zU|sASIaxdmEir2$vkbhCsUj~HLt>GfD(2vvFaMHlKz%gDDr+BeG0$tZmYIgRUw6vo zkPT{1B3m2ncc=IZv*5-;W}dWV=0Vej1^AD_?7Vq`;!D6P{Qls5EP#dzAGcuLe;>rR zK-?`!_uvY7h2#4!z)F7`w#<6bQ~LUrh%>%R;YzXm2JJROlr1qt+8~WFp3H`Twx$ij z^V5+gwr$=Ec2HhkM=7Byc@K}~P(8=;g zKxT`j---CG0sM~no9{!9&sNMjJ%Rb3uVa3yEwL@2|A}lbV%Fe2z>k=<1n%py%kn4 zMe3;5{qY)jA6)_(qPoaewO)`ztcyH|oembM1JDs-%iLt?iz2>T0Q<2E4`~ePW@!wu zCAtUnNs%oZ`y=dR-E%dDEK#;h57JGYizRA1cK_MRdO%|cX$#p19rnI&kAP;WUfQ;f zEm04#UeFk_9CKUlWlNQDH)d~Wq4Tj+-Gf;=OIUBY7;{h-;7j(M;C1AvSG3Z=DBsl?5mr=`$&SOMH^i(qpcH5k~d`KW`{mOhN^nt&E4vgt@**qklp>x43#t;Nak z4V4Xw??LEm$_taudZb4u9kxVcWg`}=nSB`9jnL8*gpP!5L~L}@Vf(j)E;t{ppvTRJ zk=+cK*k;5=Cmptb8?1=-(aF-<)=3S*c2k?7izzP{yI(!19z$%8Ns=MzgZu_z zRkRJp9@27%58Z~m6 zoQ;IBC0>Fr_UOaT95%?Uh(jUI2DD3kuWjVV*!Q_PDDD_{W1ffhULVCFNym9fVa(zC zo)74m%F#CLm!>6ia^pAdp2<`Y-2N=C`7e|W?7il2v*0w>^l~CqiQHVtT;Dv3sT3V1 zgrOAXYDYUq481f-dFIuTIGso+3hVh1wRKb(p5nuvYq|0ay$CfDpo!vef zMq)3KD~+pT`IlCCfgR%zrZnW~q{Ei@PT4rGY{cnsL2XxLqd4LmLy5;;dzMD5Y60C; zWHU0=6vgN9zSK1VO;ThtG9D$HEz>-p_layq-lJr*W!eU`G?C57dz5UpjIDvm@J7C8 zBplgnncgZdjC^m%(@BRd@vE}&J2aR1FtS4fTAIlAZvc$7aE3yEdk{JymY`bX*0SxN zsPe+dCnAT5kubIdb8H0lx=_eOH9Q|ojKdKlopjhTQP4H!qn@P$tDesBaFv`7CYEHx zMkgJ%Osu7mD6d|Z)`&A%rQ`!+ZJgFl3Sy&^4qK*89=$F`g3Q)VXT+GI((<7VR;_h* z(hwV+bl5Uopxw)cks!0PlYki00$P|dwXF->6P(OQY$R*kjTzLkL^hH@&stG@=CEb% z2xwU%o00J-*=(7hjuEmMd5@CKmRTFnvP3o`?@_YZGTQ@MmdIx0JxVrP=IMaeB(fQK zkCM%nIi&K!$R9#DI?;9=TcQ`Vmib6@Mg~A(f*O&?W@7YcBI@0ic|D--h-^mQqhzyX zjs~j%Y5FkXD9nlg?hj~oAw4oaHed~>4_o8QR%cIcx%YtI`Tr;jYAIMWsO%H!mIFo)phG~RaJ*5TiF-qASe5Kh7El=H5}X@~G0T;6lu*Z9C8e5mn} zLpY=HF=Re=K7sj(b5`S=L--UfpE{obl+(|g&jI2-cfQd0(jj~WF!q)6wZ=CN;aiRG z9K!b+=N-Zi8b3Ne>Ue&1e$x2aA^ZX`_KWi?K&kxd{01=goAW#H2SBcWIDcyV zxy4}?cT2!5;g-}We!>G_G<9RW+))geZ;bE}@1-O_xv$pqOj9(Hd8~gctyQX}2~&zO~&t z0QNd|uL0@;;b{lHHhHfJOJ0QD_0g`U)HUY2~vfC7B29RqrH&&y$ zONax|XLVb^Y~fxD^IG>hnAf>2HLiCFt>Dtiy+MO9qG65JE}@M^TbIyIqrFS$pwSUw zJGwW*ywUBX(b*+*flC+nCYU$5U14^0yJ>WH2|eJ_!|e&Pr`ro=FSj?$-fka_zAm93 zT>7~;!@SwO1txY+sV1W3)?10nj&c#{lFz#!UqnOLfzLbbwsb-LV?u zTtWuGScaRa{W9J00Au6b2>?k?a3=zcO?0z>NdUP{awls{aS2la#-_T{U`}(VYl-RZ z3;=g@cP2n#X1cQg#%8&*fjI!V&T((oxWgsP1sI#_-U;(gcOJ}n?p-kNa_4I-a0v_H zvd~?m!5GoS8h5*dB^paz!aW-Ix`bsK%U!~K8Y^7FO2oF(T?KQMyISLZm#{|T0k}Wl zJ_z$c_aT@Mxob7nxrFr^8{oddeHiA$?nam!-AynzxsPaUb_tJaY=Qe0_c54{xm#gw zb+^IX=5E(`+$B7ru>F$Kd*iLsBz}PPLDS%v_a(4q5yK=LEJpj4xarbIG z?Gl~=7<?q^!!Gxu`<&ouW7fWmy?ehD!4rTZ1|H9)RkyWePh>k_^L82irs z9_IJ%d6?(jA7K9A{;2U2_@CULHGTpAi~Fkvo@$`K!R0sica1;5|Ka|r@fY~N+`l#c z0soKtuSO1doU{xq#6x(Zg@lI0b~=f?H<)RE}@$MJkdg3 zfo|Zsg}TG+9_pd}dxUxdc&3GV0TiNFs5gKoTc{7v7hK;^KbZYOH^aO+bPLQ|Lj5%c zfFBULRRd2n(1CCn7#aj~Q0O+8w}l4792^<~b4X|?%%P!pnDL3UEC=Djw(nIM0ap|G4 zpkqVhV2%rAz|06`YM;!|cumKLCTKb#G*Q!up)5_aLX$uzg(kzC9Gartri7+~P7O_i zIW06D=Je1Em@`5%Va^QAf{7Wa^LjT`tatX#xssBIhy$gI3)wTybY11}M z+Yq3Tq=_1lM?qTh&g4z$gBIEn+VW7*lD26ZXp@knv_-^%sHmu@=s`tAL`6kKKtV+X zK}E$QDk^$VQBhG*0Z~y=zyF#^+N3bT0n4D2%+7Rf<<=&l}5HPTx{vilhD6^SCR!fRtxu#zqJng+)a*N~{<_gI|$(53;CG#X#NCFbSB!Y700%l5rk{Obj zl4N>CM6wX@+8?3g+z)J;8(bwA(2b6B)?_-p7m?i@vJ1y|F^8~v%t5rzRvn6 z>zk~DS>M9-udMg8p3izSYfIMltY>k34cA8zYeUu}xMH2ox(|3A;L)smvhL>m7T|hK z)=gPQnJ&04$+{NTMVudKJaskzP6pHf=;sE$70(V{z}-*8)s;0m z>yo64vXiF2(&kz$JkGpc6=qnXQ?hCUxSTenqgm4-s6Re0k<&nKuiT<0R+KB>BzJvoh#`27ZGUf|6XDq|}^q$JtC=BB?&FjKS!B4QJ3{80~naHk`Wf{xxJ*2BLmSilSa4a!bm3O)vlnpXH)b?vOoHpejB&WS zGaMQD09(df!N`n<0EP@j#yJR4WDL$wW}KCAW=4M;l%kra;hL23i#QFhGy6mQtN07? zXX3BK--*8!A5KY6y_&)4obOoR%)SO1wziSF~Mlx!5Y&D_AIQ6Gy~halMF13W*osDYV6+S>jb9 zK~g|GTYNE|DQOdX#XmwD{+ei-_%l&T(gor=aS3+t6@bqLQ^o!iN&1lV$tcyHzFlBp z4hwE!<|nsE!{DQa z#5D}?bdpRQPWxFb%@_z@Yto#wGsMqA7o!p@F;1gWb2IviM`zfRq+*%463-7e;f#3y zqe=T!i@|)@JrC**rN3oeeJ()H=bMdqx^tn1)=GoJ1H1UA^q()K5BNjZ+Mv-~9LC)B3ilH8OvFYA`9^~uj> zy#vm8ZTb&cS(3q$^V98;YKb#_reuM{k#0}VPrp@Co&K0)ha?ZVbpkdgk4(QaeV^nf zNiOcz0iFcxO&*rMCB09dp?wD6j$vNHbqZ!chA=z*q6}xBNqq#I|KrJDWTd9QA`+*k z;H9S->1U<4_BklJypKS5K=iF>T>AL*^7J~a(lQ z65(#qTcS_;3>3a8%8-@{Ul$pqqCAm4vn2DXzUPSU?)!vLAyOl}4*cpKz`MeMq6afy z>HBftUm#b!o4F@bo^^vTlwK}MO$n#}D7q2)w3mdx^zGMA+3)AHk^PGLUC{4XTDafU z{eDVY+3(4IKc>CW??At!Y2T+Y{SOO|V7`5sIlTY-Y40Jo;o$e?ls#z=XBG5+H|=fs zY=F=5KBUvzopw*3^ZLJ)whg{07k)nj`lW77W2CeCKbQ6l=RZh_TmZJz&1vJMSM`57 zZ6)V_R9GdwF|9OnT4oa@-azK8%)9&R)1K_#H$?|oo%Yj@rY5JpEZmoRfix*~a!Mrq z)BZ_mNBd`HUy|}&sxiAOM^m!|0VNXnyorrCI3%45W>NZfb+{cuG^&Gg-evGkK<@LUQ(i9nh)1f;p>A zeOkIQWv--2dM%!EYL<3MEd%D`ZH^5H)203(txH)b-6r+m%LCs@llo2^V8mM&&p?=| zFJyK=b?WcJ_P)LW=oRqL+pzbgUF46cFQ?t!_o2S?2arDLnD9Y_?-4$a>vO{QaeYR3 z1lPNT;(?IL8DZbzzJmrf;uPKW%&W|c%sk{fEA>6dUYp?>)Q@4#Ow-|ubJ#2OhZ|r_ znN2u3FTtM9q}tOJK7 zVXu%>nf_C%1Usavfm88@Y#Q0vuN>*GO;q#GZu>afKo`d?D@TuedB;uyw{lgS0FZp`p{Q|gHhZb#q*+gQR?Lb zUr4@o;B^B(Onx3Y4oy>M(VpcxgrA$XeBeIhR*-hjz@LB%(;gg{iSa5*dt#sscwX8w z18ab{b9pU=H2>(K2eu(b@85CN{(%Pv9vb-lz#j+xJn;CyKL#ej6e5yk z$Rx79vTT`5mLoeurj`ws<;u>L<;%1(gUl?m${e!MvLacjY`m;eRwb*EO_7~1yHGY= zRxfLm`D87!pe!V7lXc4G$ri{imt7@WEW2KIqwHqcGTH62J7p_n_sJfRJuG`n_Jr&y z*=E@m**4irvR7oU$=;B?C3{Eqo@}q|BiSdi&twN=U(3Fg9g!WC{UrNE_M1!~PloC^ zT`rOLlgs2v`5E%F<%8w9@;td#ZjhVhR=GnyT3#qGk&lyC$|uSv$sVe6Rc?`6u$vv(O)4~ zs1#=@1}TOpauw$)@)cTzQDITo6{8hJiZVroVuGStF1ahu`}#odZkiu)B0Djrd+RjgNRQfyW{r+8lRf?|i_RmDFQ zZzy&v-c`J>_(1Wo;#0-viZ2xh72heoSNxzjrubFyyF!3N)S?`5PF9XIr+?1C97WC< zIcMbz${CWAn{#fCCdZIt$#LYkatd=wa>nIM$f?emoO52zw4Bkl)eu## z>RgpZWl&jE4wX|?pej<8sVY=es>!M;s`FJBs-~+NRE?^cs(>n_YEyNnE>_J`%~xHn zx>|Le>U!0Us+(2IRJW_{RNbvwrMh4Bpz2}OI@J@ZCsmtO&#AVlUQ)fPdR_IF>K)a4 zst;8ARG+FoSAD5Es5+$jp5rHAfebM#f|#2y0oVZNPm>x99j2aB11)6~KL%Kq8A?Y2 z2l-KcbWi>#0}A_hfXbotR2GBx#0nDL6}u_!ZLyN>5DDI0^kho>+mHq%yrn4dj@KhR zg`CJgn|V4#7mXdSVbF4RP6PM0o>+PV7mvRVKuF9#(cREF%seI^(;M*ceWQYHs zsPE*Y$#^`uxYj3qi|co==;IrINrz$2KLXeHfM60?^2vrzc6+kg zZ-l)bU))L}YyC!8>Nmnp{|B!8pKSCO#y!h?&0ln{;+_(|2G<9Yl2ZA+k~u8oEc>zi z$+C}cs=}fl^C6r5#*{1o+45t)WXtb|JKlOv7JIVSZ%mN`-iL@2v(WQ)`qNzxB`H%6 zaZfS+n52RQAMH;%6W8C8&cc;RR^v+c`;957$-M0z?@-5GRx;V_$y!eqda}>sUGe}$ zGTG%v!NuF*$@Wf`cYF;6kef^vcNQ)SfNbos7Lkpex38c4TAW;r=dI{EF4+}LHJZZ( z+?6cvMcug-rXXHua4uyd|Bi=VUv_ zJNNc zvYC^$oGj#IAK#cV3$Q(z?BWr)csn@RzRB{9x8MWbN+ydp*}3s;8qT^+7HzU;kZuXMp&@H|Ak9oy{0&~aF%Pl z_Z}8&J`Gu{?|}PG09mPdU$Rk?Z5n+7xDOU--k&VeWQoSx>H%bd=Kab3Om^q>xaTd+ zWL+lP^2U@W0aZe>Df8Ck-q&ZiJnDtd0yheu!__C;f@_O#E3N_I^SIJ~8)s8~5tiha z;Io6XACu*nti@z2#&-xg`|z7^@%CV{0l$ks_%LVnC0j4PyTe&{$*M~>UGPHAj!V|t zjVZj%mh7}-rQHZ^16gLjgX<80Y_WV@$Pyc~!18ujy5gHyLbAf*o5irc;@fzzyJD86 z{*EhITOp~z%1SoYjW`6KfW-@24E(j1<(rc117<; zM|qQ7k8+MVP=lY)>_)ib~U+MvmzmsY8w6p~3t?D6RoB;5)211=`&c_q+ z1^ntpkFTXI>t zd=VsU4Fnrna1R`+2X64z`@IpIIq=|_<9ZLUzb@o!XreM^dpo$avxA`kLDZ##K_PYCHXrJm&(#&}Yz%~2y$x!<25L`3 zL&zHrtA`B<4?|udz$kB|9?!2+tuvx zH=rzEgeo8M)<;@8^Kt4WfNqF*Lyew#FEt0novp6$%%q+QdDShxx?sI0IBJT|?*^uf zQH!8A)Y6G`VGL>uh5^)to0j{zw4c-tR-P?f(F61{P zOwz)PwS$r462VG)C9uH@70fgD=FhHEO6IWR~6Qll~fg1OsFa5 z$T&J9y$#GHzo!l(6u}hmg?T4>3F8tWQVcYLa(ITJ4uWfVBVqJXPnxhd0@~}q6buIg z{xBw?A3T9NvYMY8Tqn~U?kSOB++0p$y^-pOClXeBiR5?=3SJaKCZU*L-0Y7sS5!30 zUr}k)bf!1t_qM3(+8P@{$-UDPnG*@O1{y$xs0QX>pvmu>gO>M>+t%F^)GEq5hD~wJAD#qa7DzI1OG*Xw;VP958WiqSGiuI>Jm1=_+~x1p_nn#LdS=bbiP!jQQO3da}M5Zi34Cn{t3c7czzP`mgxS9>EB zK7UQ15S<>QjS4QC?yhBqw1=a#gxFOWkQ!gBH_#S|#Rtb37Eyz7(#oY)6AR^+WiUif zJ(dhwZDO>Jb`AlTqj}C_b?%Vxa3(kGne8PeHk|xp{33u3#@rwxDJriC_fWUGt`olC zDh=M*zIsp!g4IJXvH9u#x6;)TpCnovQ(e?O4e1_v))rT4H5FqRrWkd=3?R17`Ii+J z7qc22Qxlj8&O!?l?_W?=SXo@d=M{5PKGo%AZb}=&;joWZz%qAU0E{D#N{!`HU0hXGfF48! zY6=9&hkTxv?(pK8(&8%A5#fR2XkDw%t0<_fDK4xnDXS`;Qos#Bb!V#w>vg@l#250m zg9xK>3u{Y@$_ru3#e4~>du=v5*XzF+DC7=BJp;lgVQ%Ewa}$qG@Kko?^x zMi9s1C7sG_ z$n!+x8*`I?(S*Y4GW0++H_;02lnokI4b zWr|;*66Z_zxK5}ntC`R4wD@E^k zqj*26!&rA!buHEnL}AEHYY4gdu##FVSMV>%BOLQ9iTV*HzwYwN3TxfPJpbvgS6QLj z?d{<^#Z@J>;Q8HaCg0Rze*^YmY6Qmf35x5+0>$$_er>6qfNniiqG)}1dMGcTp5=MV z?6T^jN;U73Sm)UK6RU6UwY-?^3yfbtkqKB>57!UW9q(!#RZQg8;y3@vS5Y_&1h;isNdP*uZg z4>%qOV(vL43KEAQ@h_pFaSWt_VGJZI{?dh&V4Xc8-aH$BjZ zLPhH^`;0aF=sy5@EiG7Ec{E)X-0~K+wtKCPa6Me1Gvgu6S}$@#H9v^UlV8 zNA1P-pY(}Tf6SNY+E`J6HNKb@n(jG7^bBI@HI=w@Ma6~0?wM{(eE~iUP*(?uQ5T`= zlyoL-RcTjF;y9OfN?9p*0nTJ&@q)@KtmbdIu#&=BP6kL2FV!W5dGMwBQaC?$B~=9# z#kEDn}WrhxhHdThTlKU=G>GQ{7qD5)Sq*6{`~&0R!e-P zasoH6PMmMpB%|$U9^dCYaK0dFKvN2V~g{1|RmBqAG>5iMw$I*rzSr&=ZD6{*9VeFZDDZ*r0kx$z)v0XqqvpP zJrYl=7|W=pgmy};pfOLAm%5D07bA~Kl%ID##E?WDRO)L9L)#ouBZF9!lk=juJZfvI z3M#AJ1y#kB+?4p+d8(m(=7}qa<*1ePeB@JIg2_m2D|1gMBgRL2FoWKr?Gd;AjXuAx z4w1Qd74G7(m>o4B1%}*ty14ZgY8>Rvw|}gG8ykOKM<(3>Ul^{p%^t1KH+P>K3u(L)u-P!+kb>Ox+&jbUmZ_zkH) zd-x7{)FGUt|tyTkLOw5)JACD5T0gbpfnyfsoG|R#W_#Dm2!X zo;3hl8SKJ)_ zRQBikpeGIHSy5H(7z}Pt{4pMAO4LYy_XKWFoH*Y| zz|)g;s#tm9p()z*{;DK_QOc$hoL?Y->Juq@b6^z|#c3u&QxKTwUmyUOHmK@TI z#_Vz@QQdZz%PHqkuX30HFqK2lEpvh%^qge9sfDt}Gm~rth*JY~DCbFvE`799UU83 zdrx22SievQ#0@QtHdUSZOZ9*WsrPvDw!)LwjjVd{w7|6?uJCw5pX8tE548JZW{)9Y zy$m$(+*tM~45F>|wL*c@3V{&gN&?40c z6NK8s(*TCbU)w;&7M>)iABfHp>^_`TCeD_Oj-)bAl?AF6!1zV&UKE+L51l3jmCBdf zV+q0*7HV7~SkN)qmO#jVQZVwUj+zs~ajAlk#>l_~-r&#UEZel~@D%%}{S>oLU?Tjb zerazei!5d>?I>eiO$H9w|4-g8r%Aze3s>%+_sglXAxjrk2I4(g7{SZpD3T|ixK^Hq z=HjQax+h7f4$q@;cI{ZR8*oy9Gfi^_9~h!wxFAC9_P0U8A%iRih0>_OjCoTwzwrlm zg;+BZLJk` zzmNu_L5mA-QibU=9L5sHr{jAuFRnPE-DpfQvA}}R&iMR1MJHB`w;~e7(Cz~TG<3og zj-@SX*#+b3?5u6_Mr!@ujz}$^X)cz))5fpI@I<^lu}_n?*H6bQqETzHY}U`@vOjJ9 z)UiFepS~`9T%rs<-#QRZv~T#v^@=bgEN1>9?VXg~h$H4<-f%2~=Yd1o)K0R<`&!#t z)k8p&d>AbX(a7B-&aKfNb&J>E1Wg*o18MCXA@gZSz92aR-X~2Ceop6I!p%6^L!(ME zIk+JmYEc(?!}TE_Z_XG4bN5WHus|?U3*rhi!U1b6r~c#izR^0Mq_Z7r&7bDuYpjig zapWM-a_U@25ATdSG)K3YyQtNv9lB1U>A%K_D($AeQ@W$p@biRW@k|>pj zl`l#)@fMKWglvcl5Z~unSt(~tRP%&&QraZ(^Q5HR&7;Ra%cr46#zaAm|ML>C`ZQxi%K-N~X<7&`+;SM5-F05{7wz9W|2#_& zbWf-9T@jnf4L&+21F4K(`KjdY%>*}0AsnCTP8_Y@N%9N(Vd!th!q+o(|9;jn!r+)g zm>=Be{=X+P;(Y2r279#_kD{JHWm)4%fMs!dQ z_dp5g$P)@dealXe&!OJHSy=Au+o_w2*~9OKdR3c0cV)$N=T5ao1qjTPV*WrL^-c8X zEzh#KPQ#^zjLw`K0To#TaoS*WCw~m5dosjrtGOdlUUel-)AFbLC?Bp2+As0DN0P_6 z4NszfbeGp7v(Vv5rago+wmn>m<6!yfg1=b{PGy4n^ZJ>;ktc0%yVFry{^<21zp=9Y zq=II$0K1d$Hj^eHv!OyrUfp35?yl!Dt;hMdU7{sI>7hoUG#M#33zDS?8PLPwalh%; z3Yh831dRJuKA^Z}iiQ$gArUS*H|6T5Q&M7))!f0_GXHGsL@GQ!|74%15Ehm}4?q-17) zgMi5oQTy?xxJDsgU+#WzxP$k`D-MO!ozZxM=MYU$eWdVjPxR-`^IQr4k%|7CeQiDb z1&RLL*#M&d12k5AxpU^sX{e)fCCg{fr)9`LQa`w?fa{kP34Z5u?N}A>SHs6!o#4mE zTMNH(yhtIRYuMlpWQ|wZ2pKunjeIZPSos_wzK@1`o+h|@H^VQx$4^hm=E5(Ib`0dl z&J{9?)4J1gb~k*sj#+}v%a8WuiWSHo1esqK=2rl93bO)f^F!fK{a_8(e=Fce@8^p8 zadn{l|H|)o@EeM^CyMF*?k<6J1AzQv;k)9($$$NV#PHp{!t*aXb+~k)KspK#pMQM% z`L_wAO97_}C;z$2Pakf&Gcmk({X^;l0b34N45(-Yfq+bz=C=Uf~62^5OfV{=Lheb`Bq21Y84%(Mj)k zRYMZX=^f4tJ$?8ixu*}GH!3l_cRPng!>P}H$?vIW@BZGTNzA8rJ=YpeA1*NR;V0{_ zc59OKVgS`47QUfZe@`wref}NJ#PHtZoi{cyym$RalqH78&v&ZVS5>DE|8e5!!>9a7 z`jvkY-tI}vzjyuX8WO{M)9a?j#PHs9@I+H$c<=nT&PWXJo&S~L(}%w}FEPA#{-MiG zAAbJAKMB7kF}(NqWn7UM-n;ybOHLm?U|C{#Z~7YiL}GY+`HGK{q$2@DNA!!yt8?%X zAzHslcqPci+Br8QWOjvx%-S5tSTelxP027_!24zkn0?EzdbbPk23kPAfEle7Flw8C znLdMFCk8{#|Us!aOegLELBJNkTC`V#x@mw9<-s2~ z$RfTO;Q*-xnC_|EIj9rrpvHX{>b@4?8nu8~i2lA7une#g@F?IZz;?jvfKLI30Zf~a z$pFX!BLOU69AGLS1h@(CFyLvx3xKx)`vFG*!r4NmKi~|&aDWw138({v0rLU30`3K@ z2W$tt3t-wI69Uc#7y(6q^8n3&cEEhVQo#Ly#{k;_ZvZ|6`~(nmAU(hcC<06d%mZ8x zxE*jW;Bmk!fR6z`0wkS6<{W?#Py(0&Xa=+at_0iySPgg_@FL(nz!!ic00#1!1VC@Y zqEC_wnH0QJD-AMsIwQuHYBRALli*FxQl>AyT-zV=-T-DGBV*)@g2`c&jEXq}Z>K(s zQ8Q;VgP3!e!ORe5C^HP-xgE}oz&CG4GI@A&^(aQeXc-;8f@@%mjEONbEMvhlh&H^# z+QB#(7c-hEz*lr}cAqK6H+9G2>$+vkIJ{-CoT$7BnTWCjoZ>f`A4<4WI;I01N_10Y5GfGJ65L0NVlU0Cxhe19Sl* zfCfMnpa`G=oC(MV2mwduLk9!c3wRN*7O)C%9olgx;0eG#0eb=80)7XG(Vn4z5j9e_H(w}9UP z{VowQxd0a62Gjv&1Fi<#30Mbs9+5Wt}Q*?@(eGxakytv8b&%zf zVQ!&SxchcWwXRmL;}&;FA@0~S@0H#NJ+M&>%~W!aZ}fN|=}^OvM)=s(-UuDLqt|te z@#5&24-6rvC#)j&d^Fy}-;)#aui*}iozWAs3YDyhPC`gM-MNnmHZqWYy6;QdOL)mc z8uhD+f2JK0Qg_S>{x}_fUy$%bJH3;X_m5db=q;zbPYL>qchRWwt_k3~v6GYix=V;X z`;PDXME%MzC1Ys^bjOQ~A!Y)(oa^605@KSRLE__mQIE;I%@*&k?nzmM)t*yYi+kc# z6MLYs5%u^{?-g^aE(5xWjbni?BWN^&B%cnR*$|NaHOBy)(X5P{JK)s^Cw(Bd77j zRXE8XqwxhPljvA6GZ zo5T;?6nte#II+ze>cj(8+>tFD*e%3SDU!d%C)TU1fsw@d)-==F3{U1At}N~>FU_=q zFm*1unDKFaT3wDak92&2sqd)?#UwgJU1|^)CDVx+Z$k+Qs$2@@VPRFIWs<)gL&;=N zU&hf#il7KjyF^YHuhO`3dyQp*zo9zl^K91m)HLY>SV)Djw&0{(m(!`z=-9`H0o!;3r6u0d4i>PSOuwm2yb*F(gr zCJM+(6dUHoo}S^Ob2+$$Gz}>UzQmTyJ&8RAhW?ts6qtzcw0MYlEhXlx33P`u`ebx> zkgGN`igWW#y(PK4u)-6p=HA_d8g8Ld<7&7{fct_%H@+vwhtQ({#8?scHz8U>RdEM6 zdnfUWOBrqkMH~1nrN-lcI1%LKS!E?x|EL%8_&8+>+1R-TnYemYdHI^{jY~`A-zeY+ zfnpM`S5Pe{6jxA+^;`~aB6(&Q`4{_V`(QJr)3|(t!>GX> z+$f$bXeFhI4hQufS-!aTwBkJo7*{{o$jiNarZCSlg_sO{lcq5H`1W--nC047&AmP4 zE9yV6$O(=7c>c~5ar>ZXcQT`eRUTj1+s#Gr4V~m_Zfcd_peCKL(&$Z0LDA#_cUg@4 za0~K(@dCB(ACD=XE2{i_^wZGtaKA-OLg}fpduYkQiw133S9I?Ozs;I4XvBb6JhfH8 zrJ?*{euUL2H!0%pVFo+lCs3c@^_M)7kS*5!uU~TX7i+U1Nyw4IDr{+{FX&uwb~NC=k9f!3_wsoDUHguc zYxKM>4zEW1t@pftkD3oY;X40!-fMIeKmHfv7ewPff%vbl+`lr1`E2EZmGpM7#9w#* z^X}$SOvE{diSJ+ZzM83hf5!VKnqcR@wdccqKjRB6^I|Cz^ZWaE(o_EUyws=s{r$53 z52x_d)i-z>o0@$yX126Ku{aCTY1{1fj?OuJr3=Os78RF_EiD^2zPzGxf_q|BbLEBA8GhM+_HbOYNsTR=vs72@=*Vq1^*vO{{IicptXW*>p1=ddjY<>jrC^X1Ah*e zMt{=~e-YxJ3SxHq*r2s7i@A7A>ut}EVLDi>cUbJ_62_U6F2dm83xPkl0^fNAPR0FV zU}G1)m`CB@jmv=r)A6Mw;3VKRz{$WHfQ7)DfYX3C1G8O_5`ixO-UU1jcn|RH!25u| z2R;bQEWtSlU?=Vwi%@DO9Q}!KPmDPecnq)!@FC#dKav{=&@>Lf{y8lhX=ez~ z1P;(-YBsbaJka7r0KE|hB%=`2M85W%mmH`P+jG~g8@|6 zk-&BU)pZ(h1AyeT7T~!6s`Db?WdJI874QZC)p-~2J^4kafe!#ea32L`3Wd@(xU+%P zfFI$u1G@q3aJK-@1<*>c9C$V0Vz@T|?*v>5_W|JJfcbD|79k(N0=QY=a=>M9w*b!t zEQEVG@LIs-aBm0R4Y&gCL%_mfq4Y|)<-i)iBDmea4S=iQ?f_m2xEk&?z*_*);*?tN~mPHw#<}SORwqa1d}0+{=O20#?Dj6L=rsUbqhd zGh>C)``{i7%mVI*yA*gjU^Uzk;Dvw(;9df}9Pl9AtAN)69)f!l@Gih3aPJ2`1b7r~ zd{|Jb0<49*6nHA&F}PcRy8!FpUJASlupaKUz}o>E;NAm#5b!wM$AN`qLg^E5%YkzN z8{xJCmjX7yT?5 zo`ZW0@CLvZxOV~{1Z;&ncRczE@I2hpfP;W-a4!O03fKP#@9oP-{748Ud7vMLz zmjJH;(7Li6crV}&xaHNL696qBLEtWc0Pf|$s{u)HZvx&9NQOK9H@zWQdIqtU>nfMmGczzqN)C5ZcR@5?5uJ-zKO&i_Bo|2KOeiCgE@5R>Gn1`C{6 z8v!SCxKH9wf@O4CY$w(hUNj-HpAYaOxunuR3Sfr(& z0aB=d>kFLhK^kgHOI(kh*kpPG39t)bde z&GVuzJ^cRun5j>jzXoTdV)<*3e<99B6@rFOMhiZ)B8)ycb&gu}7XA4gDQ`9U$BR~u zMT-MW8`@6vfPVvARC0jpAELs1^iM7zz7J~<>OovDD48f`CTc}L zJ2yTPxU@~ki65WXeBmjNDF0;Rq`{5@R!XD|Am=vJClWWZcxM@xpBw%})AUYzqM^k2 zy(#HbbTks_1vr7$hCEwP8qJJT&7&eN?qsf=v6l4Ae8`^QAvDu@x(_2i4{F{+%aA&R zc2`GhOYE^&$1rWaW*8nE!^tL?OdP`|)s*D1!{~WBIyZ$UtsTQUz2RXlXO`Gb&kf?e zRGn&M;14^7;i(`iy(p{I6VAh{0r+Qu@^Bu_>It{z&(;pZBb|Oz>kmsFUa;`t|yK#{I?v#)HN~#-qk# z#^X5jDKv>pnI@?z+ax!sOls3$Q?6;GNn~Grl+CR2`Z9ioH6-QSy z9eo{2huSg1G0I_aI31;q3da=3G)JRjrlZX<$Fb0HmE$JIGRI2C{f@^RPdK(XUU0nb z*zNex@u}k*#}UVIhrpTPlsa>qXE}#E^PQ~I;T-EMcUC*6I%}N`&Y8}jv)wt@d6{#O z^Lpn}=k3lF&ikEfoa>#NoX!9n9>!|CP>$nSaqK2LWW6fxU8j&Vb^O5Fh?Nr@^x_|1<)xV-YqE9kd4KocT z#+k+|j5iop7(c|wA2B9lv`1hJFEL$ay4G~N=?T+j(`%-;OdpuOFdZ`eh>sV_%!ACi zW}CUlJjFc295!EXzS;bc`33Xa<`2zZm=BwOGmBX#Tf|OeFJSvwF0#C5@i{Jb%y(Sl zxY==+<6g(3jwc=494|ZGa(v+U!g1K~t0TqP$Ek3hG!8VXjU$W(W1+FaIK}9} z2)7v*8m}`hGv04}%=onN1>^4MXdgF2W``5VN{ooBilbM|)3*43sp zrnROGrcI!OEvD_J9j2Y8U8dcpJ*K^;eWv}U1EzzZi=(DvrsFsuE;NhGnP#au+blP$ z%xd#sP|8TN#%wUNX1jSbXr|O$ZWdZbSPCqYEgnmYrPK0&wXLVUGu(nz+wl>+?@X@??oy=(1;)tyAc}=OdSa*-^eVtyfHgp)S zHLNlWGLAIeXnNRWV|TIVSTq)krNlDcaz4shY`NXC(z3_0H_BI7tKAy5U1odUCbpkp zA8a3Cf6I~SM8`M$J~utD3hlkG|A=ulWt1_v@=w zYKLmITDx|%wn$qFDsgLTv{SXyKr0Q}W^Ic$sEuelv~#sx+J)Lh+Qr%>+NIiM+U436 z+Ev=s+BMp>+6~%G+RfT6+U?pM+IMw2eUW~=eye_`ewTi?evf{yK8SaE#&~TAbMk=s zp!tybsQH+=FM9)fJ9{ttDElP4jor=eVfV88*!}DQ_8@zRJ<1+qkF$L(GH}urmIo~x zEYG5s-;B2XV6Waj+q%m7h;@_odFxK=JJ$Wy1J;AqL)N3#W7gw1?k}{7Y?-!P8~O$v zzYl#Q)n;quT9sC<9jwjOj?`+j1}&?dsNJpoP{~Nbt;`&HyE>Gq)wwV z=vd5+^K~BGb-GMY{U!SM^%ol!88DRv5~RHO3a>rKy?UNXG_%KO4}1oW0>?q@y&6s9vfKvz@E)6CP&4d!NZi#ceHm^;jK z&0Xe&=0)bk<|XE(=4IyP<`w2u=GEpk=C$Sx=1u0!<}K#!<{em%cA0mZ_n7yZ_nG&b zdwTe|Ih`HA=CYOSd03?a>>T!Tb_x3YKK3zoGy4+zCVKpH_AvV^n_}r>QCJ3BMp>+u zBFhBOo7WPw%&}ZLsWmQ`T zTXU@=ts1MrN;Es#T4bGW-RXSCx!-xfdC+;tdDMB#c^q6(=n}ayT~hEyxl4r=X0R*Q zHPWSV8CHqM`4B5an{||J=VR}OKn%!uC={xOSKo+=h?5aFU2~&%D&pZ z#{Ry&7;Erythe7dlAHsaXFHp*3O?f6>SDUEZvo8>(i*kTYTwWf&|j>-Tz|d3$nb>W z8RJXFH;n%>erEj6_%qh7ER)Q1w&`4x(c}UJRhup}HJN6aE;e0my54lF>7M^)KIS&p zfa;n+OV4BV+iQM={U_$3#nNWE)Uw<5k?kwn4|r52!#=>Swx1i7R^0Xr?2YzW_PLN# zZnWQlwy(E8W8Yza%l@JLOZ!p#A9k^00A!PM9VW+U$9TsiM}wo;(c%a?B90EnTt^qA zlSPijjwOzzkWe&`Axf|UuA=pR33Q1-e}FI23bjW2gm$a;Rqfl_kFS)tcX;x#seO|Lu^C>u~LVK>(r5y+Ec~LLE`MT~M-M@6->VCkgnPVJm z%r%ZQYK*1Ea-$pEVybbP(QBGxns1t)Fw5^|)mUQ;7N@1uQe~NLX|Ob7tqEEpmJZ8Y zOP6J#Ws&74tTY3xXIe*DO;)1NNnCsCZHsMp*jCvN*bdu{*^=y;cBwtvKF(3)nCiID zQRisFShPDX#TZ=cxY2RD;~vLq(CpKWmmIG--gV4Dd&MppW}e-}ti@6Sx;;yir&+F9 zsad1hrg>BQuJ!}%m)dVJ9=~fvI;HMxaK#IBD|K~P?LWuNN->NuylD8vAT|2Y|6RtV zkj!3zG_Ho+T?GldF;2E#VY<)sxk+RmVV(efcdL0L=@0RTt7l#8g=`%=lWk)!Wv^myV((z@2OrzQZfAF}JF!~!tRRdf1-z^P{nm~ZbF1Y; zix4aEXzTgbdDdmtmDV-ZC#+knuW&PZUv#zj!TOt3Xv?rEZ3es3UTUwlUubW(hwPWw z7u%O$o-ea6kIwZicDJJjy*bS>9kjgwvi9|kH4YKvyd3mfK6q6RmwMRs6eQetT%WnV zb1_?>KLqXMX+~>;nibl0kiTBg?m~}#rcKiI(+$De64G6%yBm_$2Rfl%sUNB@(;H1< zHlM9x8`0`z?8EGf?AdmUeYCyFKF2=aexLnG`xg67`$zWA?R^}2N0Gzr2s>_ojJnzJ zrelxebH^daMCUYT$l2k%!nwrxFeLcboo_oob$;VaL2d7Kt#iHZdfWA>>l+ud3wjeM z9aA(?%}~uqja5^mnWkydTnZWDCPBDG{&@_#yK|XyGx6?yu)zQ+ zH4CAr%+(d@%CLu6sJkEgh7WX~>V{*zdqn?%{xZYEhNlg$7~VAe%kY(9vT+c&!UE7t z5}U>LW6xlRusXJYy@uV22Q{y4 ziXBuy>mWkl1VnXBnSI~HjcYnEu1YL;o1X+PGUi54+>wce)pVW;zn z{!6{eFdF-rQbW1HZFtDA9y^%hhP6gNb`@us&tOf^1>D>%$DV5BN1;s-Yln5NwadED zy2!fNy2N_FHQjcut-=j(A&_HRHtzu85O zEJvQh=&(UQvEK2N;}b_8=VI)OMJ|P_&^5)?rl_13^L;)<2%MrjOnHU;EiKVSE65c znLaXoZ%Q!_GrPNLHE4w4eUZ0eTIIxUZ*eBSL&zf8`09+^$+W}>0j3W3lx7?pKcgt zFc=CAHQ2#NKvhc()3MianI>WdxCC0VrP$@HGChv{&BxeRe+O;LZziER1G^jr_R_=5 z`DP<_(S_#m<|=dTpYC%Go5!;MV839^mP@TyS#Pr5f$?2nTVnf%?QPp9wl8c4Z9mzR z+`e~|-C>^!d32-w3%d-uuy)5xtaYibM(CD)z(d}6rXO<5P|WcV=Jpks)vGj*V0=k> zdk3SOru|y`Gj@Fap#d3zo!%H-scxdqtDB*luUn+MQMXL@0QlHe-Oi{6&n+YAu$@cmu>O7jYt=iepkKF;C#;4j+-2|*)&AN8o zO}dA5>vXSS?7zeek?IHP2Se*sg;ih?^j){;*Xf_-=Ezt2WP`{s(qJ@z&DrM zUbWqAf6@M#J?yv_I>;^1&%W;Z-o;Gkd9g^-PcvKdtY)_EdtEtb+-bN0>)ve0_*X;9 zUuIkmNq?1bwecF$OXfGt2dxgHuc;E36B&P2i zKSN8`*Ez^(bl&7F#A>t+`-3luPj%rPBphEJh}kg_bK)Y*g*lpkfvWpxWzbPQrrn2~ za2oVd!*%((vAS~IdAj?sTX+pS%x}PxM(Y)jMwS`wgGP0y;R5V~Ta4?m(!Xr{1A5W{ zuzn1O)uY8E!;W~gc_LPNuX&dFI;=!Lm<5oE73@%U5_Vb5tRE}>9nj4^h<(-D(1KT3 zJ5XnH0Q^p|4(EZ1*>p73-1H~R1O{S0Rs&c}K>AA9=shSv=r zV$K{h!Im?#rzrc{31x)cUvB|41tEW)H=iZto1ucUUJ(| zo6hF6mD{F4;$4K5c8l#D+o#w~{{ae7gNhyY3!urk)A5s|)5)w5(76*vs#jn=cuv39 z@U3Amw6~986?_ufzOAMgOfQ>8n_tGh_6_J*-ZOt-{ure*YX!_yq|1VSJ`WmLqt*f~ zeSx-ETc)jm9&(cQe(hf4kH+z^WL#&mK(E&YedZ6KTeYpgw#)t%q$nBeKSj_v&2nsY z9(E3fe2WaX2w(?hn0HO1LHAEOwmSZBq&eHL{bv@>K5*8L>&Z8;nN%-e+4e4=r zLfY94%fMdH+kWUnZ%4TTTdM7B^v$_8QlOF@{wmG0x)*i7VW(<0Z8N_LIVPQ*X$w0q zcCK?iNqXo*0`5J1A8D8ASLol>f2f~jrqjRFUlHTu#wU%>7`H-~|FZEl=)m6of7&^} zpt#CA3~!g!u7)Vuje`*tBZ)*~JbTV}_Rl%H2ZmW&s;HZ|X)!~bb&44@)U1kzDkh9Y zr3q=#p@u3ZI7J67v1m6AqcoyfTV_Hdwy02J-6&e3sI;OXm6|@^m#8u0O)q*^Z@e(z z?%ChJ_kG^1IcA<3T^iN#jVzc}S@gSHZkOX*{2*G)J?K_hUYE8`Td%FtyY;jY7ti3E zc>?F+DQw4Aofo_v^7diqq_DxKdN4fKT5R1K*~;FW;TgwcH;M>ASeWyj=7K7kwFXak*FpMR`H2 zHh;ozeav*@9ahl=I|GT}n&AH6h1~A9F#qnsDR~TS`cdffP!5`EKJ))Vl$8_yKH6$k zcy)M9coWy<)8Y5Rr&t$Q%dNH6$JRk>4%6`p+`r?Q-SeYGQ9oYCtoI%U-Wqv5TI)1A4>=z? zK{zY_layQO-%~YHE7LB6BIf!p^{<5S{07bY0q^hUY?v|qQ@s?HcM=N6HaD^7Uozh{ z=LK|_TTS35yq=+e4{C8MK5Kt)S8xwr^4rv)Cp0H?J!Jf+p>3g^bmnd7wLjCD9@OC` zSj|4`0CS~~X}g^nd&oYMEt^3jo`5qs09l>ulsc=N4eXkgl7lw7T^+pS>$IC8S*=vh zq<*#`jEjxk#y%?JTjp!#GH#`tVD_E#!6480Z)mSY!3*JcHhZ8tcmo>jE_m+;!G*Xz z%dHJK9FJJNR>peCdKcYzfgQHX>~;1N_BiU|XE@vAcpVFzi(%rM9bd^Ad`cI=Bdn4V zTK^{5fK-e z4Q7H3@%O-KaGo8^&&gnQXpOA4&cna!akl4verCQY74YSO6@iuEt)v2aaNJLcp3BAY zz35dC|2yy>A4W&Nh=033dLqupQl8s#XH&_`c({ju*Glf{N3}GH^%b$g+-$}I>jE!? zN~}FrmQ=y#DDp*gcne^CsI^vNo|kj<~>du z-xdp*#rw>BtlQS?k!jN>LviYYP8l{U*)ta(f?^ghq@nfYb`4F3z-AMGMo8O^4%5FS;S7DBeuTOSq%!H5;;Tn$NWK{^H)tDMyMr60%jh^-RUel-h6(CFiI;WXOZgD&^M--}@H0*5We zjgTOBP)+8bj=Vt=j$0c!gDxmwntVZq{utpN9Ve?Y4F{C{;e*Z>LFNTiK86-b=v8{P zUaQyX4LHv&dYj&%cj-NPnu(jiyBQ(9GS1GJ)@Qj{a}A$Sz{RnIYKc%O6;w$T6;exe zG*B5WR7D3B(L?w3(|JQUI(zB3NqT?Q@X%*IdaQ{467*IK-IbuHs_CaXdZ~#%Y9kZS zMgOGfoeX+xgq|6vU#9654}IdJM~a|We5XI=r5IK-?G9Z=YKWfN+)Z=_MGc()Cdvufa=p*Mbh&C8S z7fi63W|;k6Jr6xvNJc_~1eW5Q#kr4@?70;Ap++v{R_@nMF7{r%Pan_+^@Sd9ECMb;Bn6|^SsQv zd}duSb1tNOwm8!*$z)40)f$;-ttjG7CRs02Yyjdv%=F4Kxu%#}E+$qU)2a|It1+cY zab@CA*(AP9%B;uRXf|8%HahV&dd)s_z#KG(%~3N;)@%xw#znd?k7QvX9797}my#xo zlO#-X7p2G{HNrMpQKp@^Hoat!2DnOw$sT3Vr&BoYF7igMc#gUq=KIg`FCdT8PxlYe z`FkNRlXUznTr!tVFQChp(BTofyTVSOPpj=(yUuQ~n_#|ec8AQjq;izDYry|)!L{fh zov=4L9-Sof=W%i!AJ;(f_J7NjG5>Vslvm*pC4+?;d?pxJBavsRYy$%xf5JTzAugcmQn9tPPYlm ztEN`WE>|9Cw>=26_Tm+l*OE_9RMH3S)c&aQ1?B7XxT@fsK6<5w+U};V2dU|)Bl!ZE z_=$fb`#YBVWyvZ{kyCO(_3|Kkh0r_=ZB+`zi$m~|Q2P|bz8QVh4y{X)H;`!qxy2;y zY2~_+`%7*wIr-(>ms4LRO(b=b^M026l1wkjNiXNTobqzU%jXtXRgmQQ$vUXF8&xH= za&dI1i=)?0+x_?#gZ2=#VARfX)lS+|4&#bTb*hz_Nx4926uE=?Z&Litxg}F%bk309VI5c?_4#R a3zXk2-EQf1OQ&1<-13k7|DXT<3H%36x-|X( diff --git a/libs/WinPcap-413-173-b4/Bin/x64/Packet.dll b/libs/WinPcap-413-173-b4/Bin/x64/Packet.dll deleted file mode 100644 index 57c9cfa7581c11f1cd0fc3427666428a56d30288..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 139776 zcmd?S3wTu3)%ZP=WMH_2Gbn>m6i1C3jhARpg9$n(naCM4sX^z+`^-!(qHW**^F7b^ zJs%I5v(LV)z4qE`uf6u#YwuHk>0(d5$KxsB&v87Sr99<3PmoM8oKf3Ypy+| zuyA;B2K2M9Hm}?DhYudh{?(R@f9ylvYfBD)><8+3#AE;BIp+QM9^I>+?>_oB^-Mqd z4$qV7iXZ!!=dM5e^RZT*`S1VZ(T~*ggGYC&XW%h;?)t-g^~`_&eHDMyIGoZpv#Jb@;k7tOA>U(a)iaiS(4zmpu)v!;Z|*E26-}Ux$Ir__ zJp26%t9;kqa5EW&MjmLT@*VcMeAWGm{r@UxBxe-+jigx|xWq`j7c#8nhPB^l-4rh{ zQhG@&saF`O;8aKwOGd*nt0R_*lBwH%Z>Gm%ZE0;c1KN@;&1*cKp-rvr+E=!u$HuJ5 z{x%`7VO;yY*>#LF9u4zwO?PfGh*$IS#KGw+sqpc>#5=<60GH|o6MsVz2108*PiQM>VZj| zj##oTP}|aOB(E>hYCDqo>HNeoRDMT=(dw9|8PnY-zw8!&*>0AN0femHHL>4B8N$s*p|j#=YwG zM66Ab(hc?2mPNjoc#Wm13#>fD+G<$Sis$RitEplH@F(b&hew5Og$tsIc0b`N!_pxH zndLF9xFo_)8N`bvs{_gN{aw`~g`~Q+1cG!XtBb5i@tm&e!)0I?DY6V>qky=WnN^ZgnmkEyVJ73iAxh zC9L#9Rn_hOP95d~aDHUrp>9_2iGg%cEEy{fLC1>P@>PPEF-Z{9+XSatZSv~c)>ZQl zF;bD@>Gf8(^iardk%lK$Q~_)z{X*4`_ez_C;b&PJax}D%dDzF7kiw6X5gMge4$nce&U7iB3*V7d)kohO^(i~y> z_*sUf2}{frN~)PpUnXFMx@9q|lh_h@Z=+C?U=ebHKdje;~35Fb)$M1mT$_(z$-^&wmx0R+^Ge8&MK*4x3Lsb?iqy1+=R%rg?}9V4ac zhW(>Xdt>#)!^82tM(Sa~$FSDfGm{<<<&Ml`Yt)XE5$*9bPMk46&q&?vjelgMCfp@G z9F8S_QXHT!^<{^8@>B#5-H1b?52nki*w4=R%i ze%S3L)6cS*q})E*-~{i;M9o$${am>}sd6`EGfBCZRJoc=6!Sa-N6DsGD#noJHO3$+ zlR*bPRkLW~_Z6U%DFxm!m9@1!n@_>eYS$<*2=$mmFqC7^J{4R@(JUk<`0ix43*G}h z!!w&}5E8Xbq)o_{%G58_<)QF7!JoQ7T16{wTS$XaM%dcp1TO+VHTJ3q#1xNeE#r~M zhV_Y_c*W75m+4eH67H#OGG?udCV$W*tdJUM*xx;p4o;p|pjWQYTK-PH#@gg~tCQa! zh>kIFMsZBnA}jRdy#>6&uy;0@W3v2fI9<+46&L@|S;<>{tE08XfKqRL)>Frm@(o(c zC`WKnboqBJzOD;Vm22_uQLaVpQiYvh3$HzABhyvumxXDSYCm*w+fN|ZezN^1?H}K- z{oe=R|84u@KH8ohTAzGYXzZW>)m#5`={Ac=u?+ef`Kye|?s?PtTHypAplPZN^9j%f zx6hC^TI+dGujhP-8MW3q!KQ4+eYIXU=B8{+tqL5N%vqZDW3KTlWpp(FMrzp%w$`4g z=yoV+q-Ap`20U>x0^c?6t%pU5%AI`<2AM3PIIgoM?J1(!E@ z%u!LN)9K8-#hD9V5|XG$*v8GIwOl9_E5fXC38N*>B?=Wb{>`4Lg#KGno=1xmDNiOa zkd&Vw)q7a@yM#L7eWZN&;~Xjb(=T** zKl+&sgK2k=c4XKk)tA%H96Nw^^M(rDzLOqL?1ajl=CzrTbAFB6p0E=?Wr-kj@xf1fW$`47Vx}vBdj&jtf3ZPG6l_tp;ra4adTPpX&ITjV zd$W1)>Fu8@V?CsbETb5c+6%>D0#5J~)eMO6whHu8qiM(xO0}r$C=Y6?5bzDhIl=2k zD6GsFqsYq!1XioP}by)3g9h%}9k&2x6%*MNvx+)LYAA zrR@yC2qOHsK(+SVNKfg;_)x=XZ(S9CpY_L4WGfQPiVVvLG$tnInIjA<>=*L9pUw|I z=dHJ*{(5r%R-tuH7Kvvucc_??vN8Dt(9&2Vx)k^vnFcDny7Z-x-twKWTzF!a^yOHB z1N$;SOkZDSI`Y)7sE(`{?snuzIy9T7vv&0FI>}xy%U;x@Y}Y+K%sQnS82vj=a#R2D;mP3By*xmNC*Q)bj;qcERLR?Z_rL!84%yXZsgNt;vB4QU#~L z0AJkyTI(u`My)I1fo)pL3%um!XKP--n00+oW8$1cwAP17=|AO+ry)vC`cy!eTWi@( zrkM4zTE%tSBaWA@{ALr8<(qV6b+B)Z(Uh+Hni!e#FKT^bsS?+#;=`iJ7bToN#Yi{=bs5aM4b6d>uHL#EUPX;?P+%10zrl3i;z>ZoEXc-8 zCGfO2hLJ=FD%`4i0PYn+8>qF4@T5y;#E2Jyi`qM|?-bPIvQQs8CsWUuY)qP%)7#VE z9?1T$DE^U-@#jFWg z=ZvN}0ef^Eq)mNgq++1dLn?AHW4@^>&lBIL#99o9lDEynk8s~Y!K8G9@Y`&HENgyF z1;USEyZHl|g$mn-QfkCP+G%^!NLcYFIvlG(5&7XCK6<=Zr%G6s!Q}9 zqP5fzpXfbYYdM>MTh0G4s~Of7#Y)A*T1~QmP4ouhnqgV<2|K|nhUR(FM^Kch z@VrUVzY>b6&8IF31_N+tkkrYACoTQ zZl;hXW%y&NwFrsnM5qOy{rdYbUFu%3@3%Dp$w+-8NZ5Xfcv|}q;b=4&s zs!9k!V@(xssd$${Ny^kxYmRM%437Ji8JFAjBwgBu4lmmVBa# zhtY488p$81QF?r4EXF2=M5Skb=^LNK#djIW@498rMXAtQ&jG9qA!(D?C8dqBy4}m< zo?#0aSwdNvKZNA4iRpty;={Y{Z3hkhljfUHfUHdpF_LGTNJwUImt$oBD<-z!YyrbU zboS{yn^(-?m5E{C0L0!?q6~tfk^$ONz6yQiY$5OI@uAESi4`TCm?O(F)A|Bg4If{b zq4Fpd5V40n09$8BWp@pXtixD9(-k_<3~ReP|6=K|{iu+JHBOYDooe#@K;bMoCOw6a4m_7_!-Obl}zYX;bfKe3~5j! zk+mw5rUtPXt>$EEY0cJhg9^wvh)-9@ohF9uVnz1(*-Rf)2u_f_F&i_9fFPA(ZA-=L zyn#=ow|oG#5b~Eisac4~GigDNAIH zzEnyXsZ0F!ZKB?$zV#%r(u7~89S3{WH4=W2rK)P^ovOuf+=pjnntpvYrdkCMoL|kx zY*2ZKnVgLouL6Zj=vOCr6fY>EU!y*0Xr9;W{d_}PkPX>}Uie=(bUYYfNz zrnY4A$gadAgk+y8JxuH^>a{VMc$`>+`OYOs9a{oVEG5d`=n{f~y2ft($Z^tBm`^0d zU{=By?-Cw35|^IPPqZC+ApOIYZ@E&gwgTuA0S&Dq$tT*S);bosisZu;6(M=^nHiGz zssJ(T38aU2C8U7t%OT&UIg+XHB6%e9jpPwEgq+~B5`{q8y5Q>h!NTU77w^IE<)**cqdrD1%Vh>Ygl zdIOP|$tQ@VbS7c@*G!x;{Tr?Ut)FQiAz-sM#^cU#m$fS>Bg;D@mTDE@t}pYbYOK$k z;O+@-o`;DMTV)gIMpC!<2d*zwX{B%sHrYKa0G%%DO((b{11glME-VFHTOAg$q-t>M zOdms0ggygQEfUb=!Jqz7rQ?T@^#{)?+DKOW?TO&t+OBK0Zwe9$X2oD6f)Ri_!7~*I z6ILT*&$m>U4lt?!`$UCC?M#IOhz`Kv{c<5j9D88>OeM)hj88y}M=Mv(CAN09QrTju zlyrkyg`lf_@&`dTRy@;w^>2=2Z4NJtUzvH&EV08*@E$-5UKLL8)=Y3L0xR1*s|DeKy$z@nJW(P4ch*L5EMM3F00hUiaS}Y?pYF);neO@SP-NC-x+KpvbItSijTn)XFUX$;V>5S!GUi+oLCz zwbMfZOaN%|%rv6MAIL^vel4rNXC~W6i>LR^>Os{=y6V%@gz7TiYAv>Om1xWYwWCdx zkHtpno?V|gcav_8&+d>0`*uioqzgf|XPK15E|Jf^C?>|XW(7%2bg|N1z_^qBPJuC2 zV2omFDC`fzmo1C9tAqrAaD}V*l1QHrv!x#dc^jJ5Hebtd!L-L?eqEfCmx)M+G*0leud?z?j zq3#M6HkOt=09do3xfUz`x&kpA0{~{N?sAGawc< zOV%v$bv@sc_FF?`e>fbi{5U?$Ncx`L$BdmHO@i_gSB2PX#$@g-8!TTeccVn??taiy z9Cr695+G);3cyrrRbY=S3DydA$`tdxo=yIW3LryX&c-~d0$@br%Rt5nevg>)O@_7B zw)Y4#h%7`;K>0Vv*g=U(OgaL}cub!?1hKAE=#oL=ons`GnK&d}p#6@VT7o{jmV z3T&4SfF5g|;49gb8WkX>EgSQI1X}mTTl(7Uk}!G3C@{8r_BxI|Mz)3%lMaVeR1V#s zf=97r;jWJ;&oa+&j=dOA{g{m){wmlf3#5?G^Jg-;BP2{rn=F)#l*_W^+nnIylbFG} zMe^MbftvSA`Yj_;b+@x`Pg44}l#Vk4%UTK}brS6(jY*PcUcHezd>DK1qP2?rmYF4F zZ#>xRK_OfI8)}t^r89tvidNW8Ok*-~cnEX$f)Kh`Y(be5yp$@Cyy+3kZYLl6v+CWg z%@CIo7R1sHgwQ3&@WlAZYsT#**J#z=%&ZdFmTRxV%G!!I%G|`qUaj>w&}IfN-z3ZB z#ieSWQeGGuKmJg-aRG7qQkOzXu(HSLyBkWgt{@4CJDQpLH{^92Yl?E33LYVSkt)3F z*Yw*}MD_epSj{S|S3qy3B>hk!rG(6nOCqYGlDa}zp`G=J8jx0*aNpU6)yHoORdGg} zbE3e3-)_mq)T=<2-+Zs_kqqR#D4XFGRiyBbB(VRHjUB53D{0zKqy$XZr0f<74;L>% z23UQ9?Tw>&Z(boZhWMHBb}da(Yw{wAp3SX9Sg0;q6cH zU=W6!;LQ>PN%8p!-XYO~`h^mi^o;|EeWv1ccUESfNhqDj<~vb=3tH-3dg&@kIKhM6 z==*cgZ>#7}PXKBvn947e2=f|3e^8-I3AL#ZPCk>`Rp>lIqg1GhkW}L_Pbc)f zT@orGuI8w7JhSp{m#H{pfI z+9I<*ARck}w}=j;>~+yZdtPIr_Z0K!l(C^Pv47aD6SXDXsWA^q#?*y&YRnWe$G1qn z=8t9H^VXv3)X24hz~;9jBR1)Y{rT}>0&o~ga;F6L=}rgH1q&X;gKf|RBOL2jURL7g zM~QwL7O93jrTiQDo7m@)eFNd+U#bA&aur*R9$e{~sz#uHCpz+UqQn}4uq;iK;qJd~bO> zC`hdpf`RR)>aa!OL5P2s7@~3@Wtx(;8yeCWy0%D@J5Qc zR=3MKVP=_nWIL8+O{o9`q3I$3|7=(z1nUOTNoIeH+cutAxWB%okvxFidy6v zVJ<;?5SMFat>v2m?`jWoh$(-+tEG4jGw@d$&J(>2J;LNoU-~I6w*G=|o!xL6hOU6m zi-Ir7_cLQyz7f2M67b2-Mcvbv{*~<734kIMRp9>OCIajbE#zU3av^LduRy?uj13x} z&8vXek^%7#1%jP+w>+5^y8gZPI!xli&HB=FJsRCG{um*VyD#!>@<~Hy3c=?{XnG9e zrQjhi4Wi6Q`{V`lkmJ=Kt%NU*GZ1NrKg{lUck@LZh7p=(37aMw{nabnKN#spP>g~>_Tm?u;oVh+p3 z>>@_oa$PcsDx_#j=d5Rs099xQ?Yi=c%R6IMyK1AXVOll`VpO$R!2|R2vz2#bV;)ff zs`_m<=D2LkW7!y!fKtJF?qK0t-rlod(E6A8h@pCe7*()F2`?DvYYDa{Aeg7w9 zlQ>3z9g;TFgWLq2>_6(J)R6}dkRGyz-nRaUlh@o%2}KN=)6ltSEiV=g>_w2enKn*V5maH zjP#-LE0qvGoqaXnDFn=8RpsV*X+sUM3W5J2qZ2$_@a*onS2dntH;vfzD8_+`cY}b!uMc4y6Z_|2g()l})Lo7G=Db2(uCxvb zn07#fRX_iR{b|sxEnXb(lb9e0@m3 zZLQ>$#qezP#P}djTK&dBs?`m=UeTHUOZuGw8u1|gNhxVqx;bhE%Uk;+)?RznPR9vX z-0C%lTI|GpkiObTtYK-;0$LdQCYo2`4}Y2Rho9$9djuZsD4DGAs16DG{@LzvsOkFr)2N?}<}`@5gS0 zd0I3T#>BWbR@%*aC1XqX5Ae4${q>eA{3n6%HJR^<*_;H(cR{&M&m1^&<%MdqgG>Q+-bjS)|piBhGUPjGkWDyDFi zY#ZN4c^AmZ$TrD6GJT9lXE(A)p#2^pl7R+Ue|jivuoJt*LvM=|{)|_wF~i8{1mBXE zz2-<^mxl>6Wb&gH4ui_l8KmWvoTc?p!Td@pJh_9*C-_=bv`>( z`NG zW!d(AoN4ko)|Baqj~%fNMH`q^Fm*>ZAa?;8u_l+rQWs1xtVhemIWUB;ehz|K{e=WSCpc9#CJU^SWl;{YtZkuBg^Q_l%h5=wqp3_p>^Tvu8ngC= zVB~hy2GFVKgvW{{MO4_Zn>P3KvMyd1)*gOYRxr#NEtw;i`0TMxh{#-f9rX@sui&*>W^Ksu9qL;pWU3a*eHIubm&;Lq6 zsZeLuDnt7%$Qk>34C@V};}iP6)9A3zHS)I@`C?_@u!M2FwcKg&xfj>pN$z@Pk5@@cbzZhYRmV}PSRZsq=A^k zG7(86yn!FHiT7AfKJQJplSv#ZrHojq<(azOYmU~j?%su2XSMw|q&>!a83aa~2c=qw zfYAt%bPzbCCe$)rdYV5I_mI0zZaUXv;=)AYvx12+BE!-f`eT&k*Dq@G zzZni6DK>RR=bGw{vm{dk;xGScFJlYt@2fFe-+{*CoNXB}|HXKmf2@qhyRry;ZafYg z`$t6NeD{U^j0n&>cCb(V^?uc!9kGTh+S2EcSxzInRy*llj@Luum{sj>JCAsBmh&K6 z#g$EKSp<8qF6R7w0S_ZNg5QQ@9i)kIcpg3Zcj6q9STW}^5s#N=#z6Rsm~px=qpV!o zCPSJGGyX$UZgWQia=NNu2DRlXn3Ai2Udz^6m5X$TO|E_UU(`NhVEe{p+9$IaK&K_^ zM)LULX08!KUACFm|F4?qahq8-pqaePgq%FC0fk)qX5^~t*XYT)$o}#tqCK}MCxdD& zqrg2HZ4Db>53g<6w3MbcX|)?%#)SdU1Q4r=ThSv%<(LPO%DUXWI>KcVb-r8Jq)^-+ zP%xlH=t`yLl!=zo3hY#amNKfH;L`$0g#C9^Ko+j<;cwKcTuF>*U7k^1ujhB(%=Q55 z^5h)9eKhkoQd@hjm+_i~^iiRJWZJkP8&jhKsN%?Tb<{eGk*McbrBzibErV#z)SbDB zf`wYl+HL*Q`V2kHKKvav-+#VcsxDmkT4o8gk6Q85n8Q0B8u1WmHxPD$uaS`Y%I$g* zqr&ZknL!Z_urvB*)Y?R5b6TQJRxy4|7bv}Qo*`WEhdlHFPkfJwfka#Q3u;<2sm94>rLfBf+mQ< z)XilOc=)Lh{cNOoxTTLE^;@K39~j~F zD8B?fIUYY9-emZxO}ZPz;^$t65E2bCX9`gQNV=Y_njDicpM;uj6aSu_h9yfO*{^y( zJ;FXl-1Mw1;b$2}YwTCIDU()NxaIwfresm48a#O_0L$N&jcHKm^gKp~g7Dky)2OZZ zDMaHix0-i3w-U5>{8=>M!ewrRSuT3K>owQ;Z~Tca&HBfy0aSQ55V-GPI7(9vzcg$i%UC-6HIUzdj>8P&Sf*Somr-l7bJw#ren zsO65*u&1%LC^n*Dl0suA8i{MTxkMJXvki9BX0n?mWMNlL`Qow%$*e2O9kqgeV<`0O zN;r87o}t1p*H1{D)K>z_Pek;ZCGs;CeJ~I$6n5Fm#={+!Nsm4D>D3R_HJ1>r3%j)M&u$C6+0>_TB`6u9`rJDc~VrTJ3Zu*0gK8f@$-#aW{r5lk-i`LjFAE6dbX?=x0 zvX2p<81?1+CF{R#dy{I5oDd!-5_S)0L3nj@6*fX=v*TL~IG2!WOevkDzZEY>D|O9I zD7HnB=+TSy|q&& zlwI7X#IpR>Q|zr!#@Zt499`b>d)_dQu-}V8^f~;g`jW)5lyJDtMv`tG*)QL3wq)~3 z`UFJq@xWjWOU4ID%e`C+z}(Bs47>tNrUiIFqP?!OPc5WJ9ge~|`SBBTh@9LH5%b_& zG!73L)YC)Cw=o{dTw2VB3}L2NPE#FVUNx*E{xw9V)?U#{d&C*lm#XomvDmD!^Wg_J zHRNihwa(@YVROb>McrKgx(cqqc>{tnz~VmpAM}%yr|7y|x461x&)3vcpvI>CHTa6b ze$=&wRd8$>?chYZABCl|+Z$P_V_#-m+of*Vq4pIp31j%I zsPZb7Y%=Z{kUD(D>g!>*Y_{BF1~$XA0CUMf_S+mPmoaPC5}ST6<0dQR?QJC4rx2Zq zl=26lW7OJ@dLnJ_u^)kKbo(KRPrOVC?4~`>C}Z3R53H5@(x%~W!piSJ1ns%3TFn=# z?h6zk?lDOfhD8F406Ly?)b=UosTzFtFanAsnYK=m)A5q+g;5L{hvnj-<-(3U=Gv;vB=8FvLJt_)gf8X!b?)w?= z>|a54`mPkl;bdsxBP<#1mpFw?oY3}m;vSW_U#U3k5^456g1>kgo+g! zd9}fAf*fOAW52|>VYR?mO%-k?-9Gz#5LngPZfKD;1{cV=oS^vf=Q5%1+cK_w-xjA^ z*bSdnnSe9=5i%0j7I}>4Pyg}ulfTOzHX6vX-%xvHCkHH2^+ir_F7usX)#86q8*qX% zc(dA#(3mywV7{kgD(mT8Nglo6_(@s_;X|T9&1>Ya*h{nU2k6}D7?;Ez;9H(IrndaCKr^x z&%?Udg>}K_U>)&qVL8X@!YBeWkmd2jwKl_}9M$=wU%48U_Tz}v(dB!aSD}#Jyz?gW z+8ZJ)vYK~Ychj{|ZoaG?(QR#R-aYx+o8l2`OJu}qr8?P}w%Ve+C+%?pi0;Vo3_=!x!v zV|SkGXpyAvYI00!AA-Ab$)uUw-(Vg!X^uP&^F6))Q`DW%t>X+j!bR55p6Hx6g5q9E zmQWHCmw9OOTOMtv*1X@N&Gamg)B;k6le(0N$&{)sXnq@UU>G_+M%Q`&YO8~qC3R;g&-W|N&03I5~mY6 zl&=OpvcJ52qR)@MjXKb|+?@^v@d}r_!=r%U?)TauJM!m93Yq^BV2vx*Q79m`Z8MQhx&?d7pmy)-Gw+mb|VnL+PU7R5x!6^{;3j+E}^U z#J#8^Pg^oN%4xRvTYWUROi=YVYG=>tD7?jO^V{>{?z=IogN9@1lZN)ycy?c#Po?tV z0%5e2*jV`WqWKeYOW}tHGO{P$%eHN_g8%31)zAs@4>E-7pq)u4r#2N=#TG`->4SphBNR& zw>G8^%EW8{5x;qat-aK?zG%y8^|!l*|WNX@ed#Yro3<` zHPUxCb@wIe+{-12W5T9Ow!cE5&Q}^2yYnrwh?CxP#3F|WBT5PrZNtxzn6f3&+5{K% zoyM8Ny;A#-_$<5PzD5Mu9CZvSKH3SsPdu?h8cACra2VLFN<6Oe3VBKqfKY>kZ*57%)ol^CkNAyuHZ zHf4I6N!Hmihp@w@{P~%WRN24g;)Kl_PGO@nFUUQ?sFp%g* z;@FvlMN3j=1T%AJ&JN3^BNt__p02m9LNNB!TN9&Jchvf7MSba~_0}%de=+M_`^UH# z@2xFp)LM7YY~8xW5OZ#sa>%bN*Ah2Ui}jh2?^uyf3SyPL+C5^$;>9m739-s17JL%$ zXe|%A!I56`5Ryj<3zbFlS46E>oekUseCJ(e^PQeq^KRUMt6pN#MA3-N@wBvzke%43 zbgxm&ShPy~kPaoz0si-DN~eKkP~JZmmbqT9GxR7I`TQJ>#lZACf@jLMyJLlQ!l**TAk`PKxgCq_C0@eu?^N^qp<=Xgz| za`oJ9ewYTyf;u>q{N}OgLsFByG=u9njfj+Z##^7iLU%TBFT%lujjt9c}U%Nl>f%%`V0|-O1J+2#m{DAz++!aD6=*^#Qu<0s}=Hhh)us|KZOw@ zyCPQQO38qZnq6i~9P7xJ0hG;_S&Oi?Nl=(o&1m~g3fZ+lBa60?&ff<9 zb~N&{GybP&Vh5W@QoO)CIJ5r*d;v~@_=lux<`A7zp#GhL$*7yTFP*=$_#4XK82*a+ zo4{WIe^vYy@z=m#n7;sjA^ytv^YAyFzo@k_mMR?kfaBCyEzOVKgs~#OJIa5nQ+M8K zT#UckuH=;cjmathS~$h&l=lylQ$9u3PT40BJohB0d?GRsXu;&~3-@98IJLbc^i#M)JFy;a^GwQSJ5d9myVyu0%P?U@&Lg^$d` zu;RPyapW%dDeEGNHpt4he1j}*D__@I47yl0Jdjq)dnWM`t$a^wd6CvzakRso^#UgZ z91Nf4D5J8A3ouCRN$^u|y|An38kERQ++@l9HZZdj9LrsIVkBh%`oJz->;!+cQLB4SMQ8jz=5O&k_6D{(4s9&8=yw%#zm_Q%-K*R zRd^~uqvadUzwaSMz4XZx8b_h@Gs+U9TkXmiV{GPn$-+F9x%d40TvEH*6LzZ`aMnVF znkgf$PlC91R`wnGeXBsZ@w&z_!+MuSeTU-*7|QXwO%h_Vzn2HYe;+a-Lsm7g@8j^c zT(XUw-+EOUo729fTBfgl&$vwIOwi{PEaVxp>UXs!Z;o*P>@Am@56#a zG~KorEFubv{{jic&$7!ALTpgqpWqm^X+xt|2=}Cd9X#xUzREDXblVT@5)!O;HV#+5>*$wD(Ws$>;(`So8(N0 zEk=XE1P@D}8}6Ph1fNdFmnkRR!EFsmjiR*C){!m}g*@z{zWP;LpTwctZR-&HSO1yq zR@K-(nATRv_cum^GT;GnqYSH5a1#&vWihs><2H<2nsgB$89lG3{W6BG{8E@d5}2~` z1ZK*G`3-^j^+7Pb17Lpg{^#-RbMBBOW2*2K~UYEU~VnZ6$+ABD4YB@Bm4Wz_21&*+EQsCFMAwLG(bs?K?- z`o>6oXHZ`R6$fj)s?rSv$M#h@(6rCGcmey5R`ApBAyZP5&S3T1-(HI}*xbF0DH_Fk z`5xm};=S#c{kE1>@rlaxj0I=MFDT0aO?IrA9rrsX-TlgY6iFPzA1Y7E_ZP`hxh1~k zi{@`uH)0K|FK@4xHNrLcgNb5huiOBf<`t4A)$-4sZ)IJ91ejJ_BpzgeXjezb_pL+I z{!AWLPwHRJ-$C9*UlAm^p}_a3La5vH*=MtR3sz{uSv%@h^kv8)Eh!giKFaXaBAo8GOCfxSc!cXx=oYGXN~>-nF^SzqGaa0tYc7O(pUgE>U$Qqaj(O>^lM=O zQPxgd2Vi-2@D|GM=v0!KIMNri&4>D_^OLr0GrPk(USO?DkFg57zAFfAurCqx*0GN9 zJHc_3OKY6-SLIo5Zx@~cwF?C`3x|Nr)|tCUlcP(j@GmSf?Eqsq>AMNQ93xVuY;MpA z-o)A&?)rd4SuNSaK`H%CR_PPET7_pz8AvwL4v{TUcmnS^^)W+R`QA$Ky8vSn#j5^& z{#Lg=t}$>vRiMq$j_=1LJDu#S%-xLL+^tI)&J|JJKC+HjKrZ}HQocILz9s_6CKvD>LH-x%elH1)5!zICIy3d4b4Yq5Zt0pHRGetyee7Z#5;bbRhJBDJR zbvhP~rq$_Pv@bOGP$M}S9g!h91%;2TlSD^I66XDbCP~OYcbH^Jboix2yPqiU+@X9d z$LUCOw|pn$&y1JcT2#%h;>cv}mTk2jW8YpQvEwrixaG~$?Bx-*x;^ZJh&S|QM*d#L z&%|YZ1O@6B9@PYHEr5foqh%2> zD1rI8e@)M-nq=Y)Fh+87l+2PN3~?+@*0IM{7vhhRS69McS+cI8FB0p`YoSg8RBKRUB z4F>73^f^`o?ZsiXfvqCZd#$M%ER>%cVNaN(42-+97f0A9skHfVz75ogyZq2a7&sR8 z3L=(wk$>R`iY&@sc<`bPi(t1-EHS&>$=cNrv+Eu@d3I68xg}&+U#AKC+07IvZy2ct zf5bX7aU3^n)^aK@iX7&ghEclK?xJ!o9Oc^hM8(mfoZ_rxR8B6M%U#Qpi_-acTPDu& z#Qn7#;meOCIk&^EYIxDhvM7)pcFya`2_SckqHy3_b)2hLDDw zX=}X5{_Qz3C5+|Wo>oaebUQuhvuJm>F~r|;nuV=#{Npzd3jitV`%EV{d_ZVc1AixZ zdcGnBoSLG<9VH&^{)>29RHIu{PdX`7b?L2|p}klm-o7O}5^rg2HLOY%a1NxPq{A*q z)||v4O4k@6jzt)SJ$w63~sSfZ}1VBc0=p#8vSf> z)*s1E2IO@TsxzK_e?}{>q`GQI}YHQ!8Qol(%WiG zd`4ITc6hw6a4m&}9mLJUnE3S~^X)<0@B!q98)B(5s#zIDuge&MDpHowkE=}H1l0J@*VYxGwnv*k=mtW17?hA9~(_VP(QsFgjQIXlFk+!$$ z!fw)igZNE8fi;ldkTK!@XOr!#&(5*lP*z^B-bPjh?i?uU=vMn08cd}|rUem(5XZpW zR*Y^EnWI`!oTw{t(&MEW4i@5Ub4N!OG6}eCcf1V2gX|CB(v19ih}Bwl)uYy}0@&Kf z*%e)1sZaAP^FVIHlK+j>ts}$Sv0*J5K*uZw)g|fT#Q6$?>I??=xEcKs4iZ@Iivy%; zhAGDv7M`ygd|8tf{uul6K8*4dMrjD`u9n^P^deoaIxl|cUawzMH%E8rCy6~ovh;k) zV5|B{{CJgE1ILmGCwuIneNdk|L)zJMJgJG>syy*`s-jwpY)Dqc-1{i2rfDsY$op(_ zZq@&oS6AI&o>^s@$5q{Gj;*@=X(XqNr7pcnEImEj-LR|*dN#UYK_??n^`fSV8{!Ak zM)EU^&;|6Oo?p26#Du2K3Xmqg1?rv&`jaxVIgX>sfTb#vo=+xP=Skm8pilyh1f+3k zj&w~aT9j8+9zTQ=qNj5Md8#^(L^U%~U%IO5OqDbtmoy>^_NbGlSBcMt_F}uy<_+8v zQWa`XET1zaUmiG6#6-EAlUdoil89GN;oae;uhV z`SEwFPV~|T>!~c!ODFtM1?Yue5onvu51Zr*621RpUf*_u`!+GrYl>XB)jTB8tNMhU z;#{9#q?54flO1kY^~s+I3w;|W2IAa_*DgfLb;=Sqqv{l?m^9TXKRiGoMI`CTd)$nw zV{W5_>Xzjsk#0sZcNzI$q~Bs zFm1`d>msGApefyuy@M#TuUe+Ps3R!0>i91Tjjy@;a;>FX1$C`ulM2+B<%!;i_Kmgb zZL;=_=T%^;d1az^x_L7bk2yZkdzJg4kVNk+tyRP{mZ>sYqAn)4S3*m*Rhj7h+Ff@i zdapCTmgv37yi7iGRgvhOV~$Jo&NH<{Z``~v(K|nWZK~msbiLgL(b5-n=@kJ0X4+o6 zsH;t0)2CU{GOMG*_USEM=1{GzXDEw}HlZ%lR61b)hE7fwC8A}4HlZk19{Uplxa?NY zd$P9(v(?hiA@1N7exbFTc~iijBB3FwqLrkcoIXr%dEFc; z;nMUdYxzc7(){v{Dcf08r>FEMpWGhTq?|&~2j1!Y+SA)p`b$r4XB~}eRlER+ed5YU zRRdehPSgJB=CG#yx^mOZ*B5oM=xs0FQE*kkAq&Yu4r|_o(s>P~`}Qs$84q%q4~MEb zl%S;c??U#Em4%%pQtEncKmWZFtFnz8v(~EHx-hYGFPQx;EL>KdqFlZpUDVN&r?;$+ z2gnD!-(lciXI~5~nOD}>kJ1H+J3XES;nvhmJ(1L1zYwOpOlw(5WaZ0R zi%8N$Z;j0V@Z>A%4W1M+o#>rvUQxO7%UE&>{Nb|X?-`l@3zl5L`1@b8I21te_Z^*Iam06aAGG*nCFy;isl9ANSA?b+Ib8I<0HTh&oFH4V8oVm0VdZgda za^^6;vx7ebtf?)jtJarocSMisXyl74dTYml*pyWLg))GMZb_bg9D6Fju2~=~+gQ2I z9M)L5_5du)tN}hMSAVu0JCJSlMX%cDscnfbc9~IM^e5rQ z{rKp(jQcztr5N|{KE}=El?^_7EqN8^#!&I`@A)Z*^0O`rxGP*A#$~}6eB?S)CbB7IOiAn}utgy;++VLfCw zQnyX_UCs;pLdL8O_5<(I56Vi&2sp|}yyTaeH|}F=Sj>j^Wz2@YC(x6VH7q*slMHNY z8Cryo*3=jn&($&`Q&I#8Qm7_`lYY3D`zCpn&z*LshsUgM3bZJ$iPkq=D0~ktmimse zQ5MFm@3_hD#_~6^d&Ie^m|K5zqYXsSdIfq|42f30_F|n54&2U&VZOmRr|U1B)ML0@Xsw z@<$eV(|-MIF2ThhE;j%8?nQY7nM6)c4?C&$$?bh9SZh`r&g!PK%go+LMV@@*VD%!t z5x-na<*F!E7)=!?$49U#!XgiA)==G4V^Q8o(W+x_9b+szie8XEe04kK6|Ah$=gHY; z05qYZ#P?xQ6V{xegnfhZ=W*ryg5n}|+NmFh=r4-Iflm$>0gvLMH|oc%Y!sLNK5jWA z9?YapM&hjeGM2f*{{Jq^RR4RHDXsYumN|%lENft>=+f!`ReW>kAif#4bRI0!n5?ND zz&x_Lox|<6bqzTVa_`_$HZ_qiArW54myG-@`Ui{W)E(1d_PT+ioq-9z0VbcZx01DA1p zYK*T}h?0h3LatP7U4`~}8tAT%THe^KFyHz*Q4ODf!g_cHk;dd{eYh!`LF=k4&XmpK zncG}-?FIVtu8zFbidNMw>XuUishUp{`+av`YZkF19g`iQsq!;fekO7BDn27BoA=8( zdX2s4$3hda4&BLb9^S{5?dG}mOD8aWx%SR$j#CS{;~*aHQEB)5X8NTzA!d4MqGyQt zv_SrqY(V`i{k`%{=_e3 zX<|*qUHLKtaZK(*#9i%;c&jmMG8;QX(m`u-36D{HC#|HBfN#+SB@0KboE*l0 z$=etJJ4JPo`#p?VuQBwGK)+IUx>Vsex5&&? ztGL`g>?Anr5E9X&{-=M!PZ>8#eNvZc_Zzi?Xx(3rvu>+Mi04XHcbbz$=<6WVD+oRR zwkUJvF(`S)tk=bFjXD)xTJ1U+c6Ji|TNJyPe6N8ko_v48@-9U~a-F+Q)|)u? ze7sEcSn*M%nCiXCl-Affvcb%cI_>;dez@xwY>s3^Wtq@6cM%JAFL%z($R4Dr@5Nhl z%c*eFZK6bOHE-fZC^iSNI(*$I$8EyA3z;}dB+dj*c$KkBf}69xROz0nTk`Bn8O(6m zY54czC{KPtGa$OV;jTAD8iY=A^xlM@yfh-l$$xq`n0A2FVxv^q^K6E zkbMyOr4cdID75ZVU!rrB7D2P-FcOq1k!@GbUcrn|R{lP130GV2EncwO40ed9iY z(k|;?t`r4sBa59dpGnM0&n3r_W!45La7orasx1*UE@vSHYR1lcoN7WSXCcj5cq2)W z&Y5_P{M`1t=iK)*C-Y1?njcT@?}G--if=N{nuZMKptv%SyS;l zC%~g=KBnOUZ)tj@QTY)kzehOfJa2j8+`iqnv!r(*)nI=-*Aa8Z0emI;`_oD*=fo^d z=j>OgpQEHLWItjq?YBO8e4NE0CVf!#>^m8Ep3RZ>g0k z;f6@6I%Ickl+*cqGFh&v!4Yn{e3o;jp7=Y5r6LQjLCZ#x_^>d|c8@^H@g)Y~92taj zI60{XS*pHCBDrIc%Ys;xxFc@b4pBJjo9sFzNb%Cx%bn6zY6ligy9;AlEcsIjM=Gu< zHnf&KicuN(iN|H*`CmP66QS?z@|yKX*mybZ$(2riuCx!~t+rFMrR5G5iI|D6b9_$g zw)u06%I&vYpMIg9CGwH7V7`)tfiJS~xb(%jdiFV?!V=kWGKforySw(%u`>?Gxu#D$TQzs|Nj`zJo;vaXT}|XXTCLR zAR)DueS>-C?_bO_7k#eum-Ea#c*Yc-x!L8Jql77D!81cJL>-s@YK}e57sJ$DpQR^D zh6i%d*kcr{yQ%hT7?K8a!C8{*zmFVZ@cH3fj`i< zj_cg^+Yh4DiaVw{?x3!;F({!_qYfkWK)Y}mcocH_awNMn0i$v`hb66c@o~mnJs-21 zW3Dn1jxRov>sS1#$)ENN5eQt3;(9?C*7a09&yQPC;xqOMHwef?M;Xu;6HN0ZUnW&f zzfeznPjf|z`|hoI0j))}>*k7Y@M_-LT=7kLHa1sKrro@#x#9tNMw%Ja6&m#aNPkIu8RtZcXut)->1X?6;G=XLb97^C`39udw zBqT7Dz&!+1FC5Z=CNwpmT(F(jlk)=U(ZoyRImh2l+B(jyC$IM_-^GC^88XXP&L}tU zmu?d8z8ufZ!D2tZD288+u2!{Ndu+YI(HOMB`1x|&{tC{t2;CPDit++@6< z!%fhUu7$pX1mF<+vSFa_w&c$hXwG}%!=!zOdxY8h1_WAMIL6R0WWA?fnYmYk&HHVW z)aHGOx{qcirL4s-@Z0gOfA4ay9GPA8N9k?O@;kx%2(s3c9ZWfPP(&|?gRq*9R7bgY zHpm6F70N;XV)jU+zxGm)?n09ndpG9=i08X{RFpZV!7>(~hV zXYnwSg`+tc+9`BJck%Xg;R6H?j9i`1TlFjz7jWO-?+`!cKD@*wc2W>eVaGG_NueYq5U5 ztXE7pg|o#3n$DSIo}sK7hPBpyO`(OIsomr%I5|ZmZSfN;x0=L_X!6`>qRVez%!YF; z|D!bL7uMLdG?gY*6PM06tUZL!B%IM#0V0QbQ9lj5?xLm zM{v(8$ZDeSOgGIMl*YIr!Irfb=>d`jtG~ZjW@N(4^(jGu{VwKOZ~=XRBf)CF;bHuNAJJ1 z`^2RnX8l7lagb?`q*myE3=^wcYxUCZjAUAg)r8qbidJr)JJOh#AJ0pt3C}xUP%tV# z!8eok)u=Vb83mwXtpt%ssSO|j*;jq;Vq(E7?(;y%9mZH74bD0D1=bn+~d zuPv~kKug%7))GC3tA2c;c%d-vHcPY9IHrs0EFX%8Tj$fe;l3k!h`-P4F#XoGUKyLH zF-3B=Mdm2=6&;QU_BL{X$NypNUErgtuEqZ(GZO+yI6;Vlh>Q{xjc7DJf&)4OGjc`} z!D~@$QK=}U)wYz(fL>pLNi@T8dc9Vwt$J&#w^v(xYg-?H4>AelL3jl45x_?Pt7jY^ zfHeWB%>TRgo|y!Sx4(Noe?Ffu=j^keYp=cb+H0@Js{&EeDyP44wwG~Ac&$pirjj|@ z7_97;VQlNH_H-HzZIZYAT_vf*Z9Uvjw`m*w|dJkb@Fm}>m z=FVqrD5vhXWbUxFERSRS2&*zEC_I`?5Q+|ZORrjmP#kX(;u}@#SWs-S!~3W)bu$CE zny5w@h6JtYtlAPEVBEHzs%nU!9Tes4(znQHtrv64_zKKW2LTYX@?(W5XHc3PFGvn; zU&43o?25Xoqs+Ti`t!_Je|Zm|eJeHyo>!tPUjX_>uLX1d*|{H4XRP=_oH!)z0{9!M zt#^W=1da#EAR*6#(P?%~Y{tlyd3>yiO|yfstK1;dtYBd1^`TSs-}`kH7#4W9M*D-m~@Vtxh3Qe9RsJMAWBbV5{z!vDr}j8h11>0q!V#n;NS$uq(nMIeQC+FxJ+mrls&rI3cc?QNs8%43wd z)k3*HWy{SUlg*=HY44(xY0VK*Azt)hen!6po!gege*m=nfepf~T%-&EK_$@wD9)po z#Nm1|Ei)fIOllyM&=39sHnrPVAwhs-riYP*D`%>MJxeE3-Ad|3%Ixn>mfH7TruZi; zs5|W&=_bo}6ixgJrUdDfLgQFWq z*~`iO%JH-n9ciD&X)|NxPz|*xk560SEbukv22*i_&iTrt^Cz;8ZKtFuB~PVfa;=7U zgsw>^hOCnM?6ti1x+dL-znRb(+C$jEM^xtrDPz%%XK2?HtKlQOzL=S3{}Lq?ZNqyO zL9K6!f^Gocv{f-W48uW!_G9Uz71bPA0`N_F7&DAlYmt% zT!F;)f+u2H!c2nnbPM2GhG^z!aBb*~J3|s)pf{cy8Wq`<7b;jL8*kmxB=R<%S$_8{ zeP1k^2Ao-0=Xc^6F3SgK4}xao;+(*WT>+8U?FgS{4^!;i5T^>yQ12UD^@( z*MeLxo|Nw%A=Jiay$Pc2R||W#ofIA$s~6*Cr|BEFj`}&EJG?8ZxPVU*bhI~6|AEhV zxYb*ini$UaMKw$OCG z1`Pi}+DUZzq@N;?tQ(j1>rGucO5_$RBqHCf)h2ZKu<d`Fu(pWe8uZm&72wB<6EqIL4BITeLqD)hX-rfc2$Ft=+H5 z0>{17No7Getvu1<8DzXXQuJy$6-9aOw12F~Lin%V`d**)sh4<13nGUma^~9z&huC< z*Q%LPlzII_W{v2W!g&6Go=8CCRrBOwb%nI{N=XWp;JqZQTmU-yW0%!s*T+39X8dC9 zFqW@}pi}w9wS~sZExz*R#0!$(^XxPt56hEhyRrPY>fv$KQtc4(mB$leptC?Ki1M)N zD_S9|{@9#YBp-dAZe#f^@^uj%m9M&qro@%1?0d%Y8u_|6{Z&=mnmAv5q-X^XD;Lr8 z1)lEOVp^Rj!$^#fG9RjBx>m?r%r}HA#`5`KOUzuNy8HzY$fVC8eboYxRejk$;LEuK zO2h}Gj~bBv?11!Ksc9BGimC~bSGJ9h5U%UC7vGU-cbiJPjJ%7#mq}Yg+A1$wl%!sn zNqtsQdrr`)o=ob`RQb~+=jl4Fc5LEq5?7wc%nDQr)SR^>9q>G25q?H&+8Pv~M=co| zoAxX9z@m&Nk4wLid#MAn-$+x(>w=IOLU%h_rFqF(u*qMNbcs)CP+9C|B_>jmq#5%3iD)jDYQC0`+adw%m;c=W_W+vhD;iBlCEd* z%1m0aKkez28U-o+W`F8WGdbhgG-LS^LBDiM3jI{?jOEvpzEYzfwJ7vUfAMEafPU$; z3Y7->b%TECG&!uU)acg@`lVCzB~_ze_hL^bRRT@Ke4t-9=%;dmemjpsKfv7y`gNpm zE^uu0>rm*�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 OAuO@~bo_s1f&U9u&XLdn diff --git a/libs/WinPcap-413-173-b4/Bin/x64/wpcap.dll b/libs/WinPcap-413-173-b4/Bin/x64/wpcap.dll deleted file mode 100644 index 3c48c1a19bde6f76c54b6e50e7dbf43eda9de3c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 348672 zcmd?Sd3=+__CKC3p)-ygqUUa!f_nK^T2 z=FFLyGwU<_+69&*i^Y-*6Ny+X%V6`DEC0{@mz7|#H1D*cx#i==8#^ycaBu89vT*Wr z$F#fey!GxI?{G}Kaq84NJ&v0uIqvpObxfY>a9ugVamSrEPdYy}wMnKyx_0}pp({V? z+SW9U&;P3J3c!ue-_f?aw0E}s2zHmV_P6~4_So>b86QjAk@2RqJ7>HP`^s=;2E!)| z|3$`M`B7%uKGMHe#@o{Fn(>*m_q3(G@}rNWePy_t^uK!Y#6sqwp%NG5Su8g{*vK-t z&4E!SPPOG6N7KaS7K;NM{2)^fmoXV>_ynEeqrQ zvy&|IC=d<&&i70z@*r$NCm=CHEW1$-Gl~Pj=ihzvjh-7VmaLs98faQ}!OpBpI2U4e zzCyFqJcHP2R*R(_?BjI_0&ms%(-fjCBg$&&0le0*<9@lMclY$WC&Ewi1iZ1>0OXzy zZ_@2|0+BqjfLE3#u(eb02EzCM(?89BU8YU*dot6;Xuh8unqHylwOZLWZ?YC}X1V>& zzFHuC1X$qq=jXcha(5sfNL3>1!vu@It8A4g&AxP3$$E<=rMPUB{fb@T)^2@>Z3P>H zreEpEvoE!YV&H1JC$q0!sp;2cW^2CHj`5WnHfZ{4%|8~Y7p7_cX&IWo$l)C69PMOI zay9+A%mtt_T(5OLRPEA#ckAD4WqUn$X!<*u#R$+V%C>pV@zo@F9Zvg_s$~`kSft$T zAC{I^x=QokmSN8;_a}vud|iGkvoed2{aojG=MB#5P=?$QGP42eZA+6a zE`6J;=a%96u7|AlWyuzIU|_PIsOh^kePm{lvt%8TXbSolIdu!HzD_+iIp4R+2KQx} z?gS%%OlxFjmJ5H`V4mAQFwH;I797}&EOpwKf+3auff>3hb6Rj;UzeOPk;P4>CRkZXNS&vIW)vVG1k1e$e^q<2H7;nG)ys_3B*w?z>X?Q^~a zU|&kiPteV{>`PaLo@e-=_YW!*=Q?Lq$XymK)XlARC ziizZWX$qCe`I6xdB==Lf+>c5!vi=jC_9d5P`3~C44QcIV%2&X!a>c;I*>63#|D(p5Wh zqvt^P;YM$gvqAj$h-{=q&KqvHeq1FaAiNW4hqs9j(Rw$Ow6s_rf_WQe8O+bEESA-< zOVPNTF!KTb0h0vd2fPsWD44NlSuC}%w*t2W?&sj{1@jKv7T_I%|EqwV#DSj!ei?8# zhX2>FC&LVayB++u!2KB9FT$J$_&dNC!Tu3;IpVH`xeV}Nm{ge0;D0XcJ+N;@oQL7I zBqSy!TN|bH#?Qt-{2DiDD(z;ey?Zx@%bwP|cMI5Owd~!y73}oZ_`|PFM(^HjVYfTG zcklMFJ9O;byAx~&41b+r&gs&-ccz4T_wH)g=Nfi5*je3s_wLcVcTdAhTIU%+FT+0H zurHvUjWNmhQ(qB08i}9}?aMLB_mj;%ah+S=?ex_q+@FFP^{uv5YX0__W!vnfhbVq4 z&gv6Is31j z{<$+!!Li917#IPbeNGOd4ze$Cudh+Gi@#4Pu5DyrsQ9tq{x%j1%`1j^1NMHHwkU>a z7`79}l6dCd|1><|%;XdQl)k-_%=3l@@>@TCeYk%5^~3+C@G11=NU#31fVIV=R*M?^ z;idWA)bB=SrnxcdXSe}6MvSJ01(l&z3wSceE~og4_ur*jv`c)7dd|yPOO?>!)`Ob9 zUDIu1@+R3~WskqX&@0R&>*|l$I#jG{Y`&w3vnN283Z(XVHpwE2K(g$x{o&7$4!X!B z{p2lB9#s3#2PFWlHPA3vHia1!u`eBQLaH*kh^Ga{p?=zO@nP&ssUVo$(wL3Yq<1q1&?Vh821M`0!e*yw=g{ zcI8!}yuP5`>n3`ArMzxXURTnqTzS!rOcc=TJ>`|GyoS^3S>@GLd0k2`YLH0r zV&&D1US8!zH)yq@*G=$pM#_Ph4$zgf2?2HnlULoc6 z0==j#g4`bErPJ#KnjySCRbEx}I;6bbQC^?Wi_>XfJ+Hi8q1S5V^|11KgkG3%5o@mU znnf>aknk!}UX$siD=)f{)zS2#1_`WdmDeD8O;TRNlvg&ru2x=`DX$Lnx?FknQeI8y zb)NF-sJxCm1+TWs%dWf*(5sR1vM8^u^!fubjZCbC8~M7FUi*~S3gy*}UK^Fy+sdmI zy;dl%=ag3hylC}h{NPs&L(Y{4A^zD6%|qI8}23XBnnVLWf`c{LGNaucLKV`N&EcFV&)B+>v@=PxC3fx zp0AH{Ti|{e?mW1+!aWM^mat!jeH;9mfYyC*&xYF#{~+9t!hHnpelXv_ zT@BL%cy|N76m}WxvG5xT_Y{}|fX{_#2lsf`>kxJ?+@{W&jh~Hw_(5ltcC*y%?B;OU z)3UQ$z&@*Gc6KY+>8TC9(IS0+1Z_7J7D~jsf8|*BY?%CNr3@>T*G=TFAyO&{~Px}IMBv!UD9^amcB^3`xj#-%wIsbQP`fpmG zm%A+`VPnoV=Q38Q*zh!m{Y_%gI;`hZVf=q!eS!tcI#%DYCf*}EU3R|j*rnb!^x6%t{Ky)8 zSHACLBl~=69KK@_&s5NOPtx$VH`XhF{Em!|+}5+a&Qmky`WDuU`chNL<$4j-6^HYNN_U{o*KMqpFJ^*GG5yCm zujBB*JqgS}x|xCFaDZ1$S%OB9&1I1Xc01QJvY;|NXA$uytQ#=*GWB0H{mbyYs1W2r zxmz|3O1C&Cl4#L-?t{AE_$jI`Oh5>Az$|DdR9(=1e{<^*SopD#Dv&MUN?pFT z$Q_uUxsP-ii2|u_chXudX{+qF*hjVd8sb(1#(Hdu@B{Bq z4V|CKyt4~>vlt>t!RdGg`rPlp!s6@^tKwm567^hcJ zzZ)wCpxQKDXs9~&s*lB!`1(JJ1SDf@JRQXty(*I4U*+dq@m3!*6WQ?;9tQ<9T(KFI zAO4ul9JTR{Y~Q(kbG(gm`%X{rShYxHxEdNO77|b7_VrpklZNY?SfPc~J@uX9pC^zJ z@V1YJ5~0u5BCB%yUXL0Dx zDelJHX*jkNwDKR4eFu-D=>7ZOGZ1Q@uQJV_x*0gW+O+%gmvOse`#x=AHOsFBQDi@s ze$e0bck63%wsGEY&qDMiL4S_cf6a^wyZ6_Vv?QRYz5(mt>=DLSB44jPg6UB$dX5bM zo+j{<0n8`x9f7*PdiketcX$b<^Y=L)84S!$)AXiT&h^;DYipRZ9Ohn5pnj~Mz9j78 zgiy{8Wlb1UL*IbEx4>Qqc*0I1%WD;-P~DKnUURILpw)*!2)-qf{2+es^PPIepf{ zM_fEM0cjp*V4%Z|i1P(|Kd#$E*>~%g_1VW#G-rFq(mSQRz;A7hsLRlzBK?+<2c9H- z$TYvT74nWwprsag#Nfxd4@1ceqc$}}M&HX07#QdUQ^(Iowm{n6sTdT{9xKrv+oJL5 z+r<~7kq2&5SbN=%T<4~sTi4%%lG7(0TV?jLrx>AMpDN_So27Sn4)$^fawu9OPr=+Y z?h9)E;zh9hW3xc!1z_|;OZH^;>$ATYvD%BXYk{L%OA$gD9_cGeYvi@|o0f(C8@;we ztV?1hMxx*H4`h$*@F$AH$e6ebiRj;=2pOOhN#E8e$$~zHb8{>bzQL@*?I-0&-zwuK7navs$uiLKDi3TLVCL(6I$wa$OY*4*GhI zX`&l)rs+Co%X$r~-zpYWlF<6d<8sD_VP>xM067jW(M1KdpW}ewqg|7GdOn&q2DaU6uA1u6OzMd+Jp82Y_?HN8<>cjLEqWmA*AUft^7;MN}^!`%8-O)n>> zyZVYq-yO&W{oJv`{Wj8{r|2iR{f#LLdpVkq%(OZC4Rz_|$h6Zx5Dq{rz(5ygI5xFE zrCa)GE^i~vw`y!SS@Vfvt)I;sa{JRHa=Cw~D_@@@>&!1LbK%9vXI{=W?0P!&ihfQ> z+vzfLY_!*Wmd@Ng=Q zI{i+`q^N#varK)}r^4L*9A2UMGwQ|BePmU>Uvey8-;F&OUnJS?Yl7|=jKF@~VT3ya zGfvi7j}H``BtPs+nq9ym+n2a5NN_G=vzFXAZRy*fFEC607%-!y-@d@r?| z&Tc+*XDu+y!T!lI5-IqLGBjU5i>H-2pK77`?sZ@s9_sM^jv>aOy0wvvr*A?hDGRIo{L(|yP`-fsIdrUQyYi*v^0d3!r@?TMGZ_}Jr{RWzS0FN@noiBz|FFU+ROTS1R!vb%~#pU&E|lb_15`B06XhC@ zC}bgGFM?;#`XK&+4VN21%5_uJbsSZuiu|NWdk46L*aLwB>pLL8nuXBNM+ga8tq4$@ zI~y)TV3sMgQAB$}qJ4`ZF)(QTchvQ8G_@=T=?N>)7%EcOne z?Gm$n6!XFu=4OdG8JIl97J5@+vR)JyZNQ`}{8i9;9KMQC+u%~Xn2+czLC|_GNKo$# z@rX>&x)~@^+;5iR{*nPgZsB5s35}8gbE5&z!^Pa9F9T8K+L~mPpoJuQtr0h9on}(8 z%NWjRz?dkN-%y*1if&TDf+4cj3MeYiJ)+2~qsTXy$lUb^S`VUFiWMgeZU(JSMUi`( z$ahKPyAgnlB3c!YRjr%@4x&Ec7vq1sXia1z2Bv0~5YNK|t-S%NI-eU&_j_cLC_(F9 zxKv(tM_s>yR8tZNN|b7VI8O!S!63l48nlx4+&T|hpMgvHEsDC{LkujkTS5;?lr~1j zAw(Y|1lCoFkhQroa1V-$e1cLnT%;6wgwsVU`w3Otr3g@>u@Nq^IdmOn1VQWhKvDhn zLL+X_`W9R~v>ECLl)%7616~9$s#cY;}WJrPaS;{8BYt`UaocYB(3Ckpbry@mBx z!ybaLp!HvX6mEY57c+<~&MZ4&w^CH#4BCbTyDr4E8%EE;dOqwIU>tDY1e0|U_8VY6 zg>a@Dg4+-KJ=hn+Ty+VKsKQKx z-!*+LmS5m^Hr#DtFM(YRT0g*k3^>&=je&C>%yzi1gl$RafuA}PW9!kQag!cBQs~q0 z&)T%%u+xS#qpvl!ht1L)4m(om(Ic%#j}~W1yJf3Z>8)F}$!Oc|?Dh;f^_SM6qqUPG z>ffnVt5%)QF~Kf9GJEvs+M~xgJvy3R_3U$d*pOsqCh&mUEsMe3>&*D5FJfzAR%V9U zm4GUU6I3|fi7B(^e&0-+T;0p|+Qfx3!2LlsrAFrcM0K!Q0zu1-;H5su<{z9P&O?B2 zbFLP+!r||$k4SbV?eG_5XjluNl4)O{>GkzXO~-jp4_E20<0}0uEGYQo0=-IUZ&Hqsr{dZq&WBc4hv@vaBIZn?$y&CHz^XC*^29Kn5k?&PH)6H~n z@-YJb?GUehHF|b+_Q@h1JKNelF&OE(8&a}ZSf_V+*U6}PSpTbna?11S*4pBcJFbX6s z_R{I#p>IF|07wN@dG2O;n~FAGDpLL6uXx$*5T&C=0)}*0&qkr;p~4x zVdw4wXUjR;I5l2SKEmCLRM7W|6maj6|3d z=D|#fn-9ChUK*BlOL`RU~ zvT7ApxUhWXFTm>6PNAXCWn5B497a7gCt^Ql29tvcR>gM5e z)z0O%0y8lqKcb~f6Z?BAEx+a}i7@-##`@0XDNyOcDJ%W}3^w=8Ae+%wY-Dw`L+^`4 z1tT*igJsPQg;))=iDkc#Q(X2H0U&eJtU$Kxx>=P%j{Z?Asig+#8Bf1u7x8UW@dt)+)(ps&Qc(UF@5r{Aa--*N(^!W?HQu1%_Hh0<+Di zvDU})hH`vAwf%V$kk!^~e=St|^V}!f-W2$&N}%q^`ciUWrf2g1aR{uwnR154MwBx& zxLai_Lj|lC&&h63t_1zJ4X$&n<**)aYHif&dN!*Api4$E)2C@aTAAzQTCPtRa z7I#HLX#VM1*Y8qv>x%5@DmL1>WD_uY)=y+)(O{GMSF89Y6+HN7O=^;)C!5rza#U)l zNhy8f`dX+MLF@WSYHDOJtwl9SmBVOTRBTZCTsJu65KF&DD`U%u-@yTB5ziw;X&V@) zN5Ti=yoLQSRSXQ*kezsa)Sy1lA#O%QH}B&hUb+!4t#h%dAFMae%Qh50lL<4jLq(=s z%E;}J=q<7HCUxV>^;Q-n-;d#K-#*e%c|hmOyi-~wnRJj*`orn-zgWga`uri{0yE-Y zPCrdd01Y<=MMqFh!1dH1WG_xd1OHH?O$`0)Dyi-`mF}VWF+w_I9;6N$ulKZzU;pR+ zZo~RduGD|j2?f=yDft+HjNlH+-&rUsqDH+zVG?hDcN$qB_r;?Kp)6p7(k#$ntn;xz zl!lfl%`FSudSbq>$YIG36renkZoWU)Ax1JXmCdO7*3#I|I#d1~4dnlRq>KDNUQeo- z|M0i*`Oj9h$F&Zz6(LbszL`a5w*OjvLIN;ESww&|D3;M;oH2f^J&ZIXGDjxA*59(A z0r^FG9I`|QGn(6s_7~GT@C{`zT2aIQ6RW6ptSGbnHB?`V5&wUqzH&!VZ^aboT3qx6 zMO@FT_2Q%r4~A!rzaAG)Fnn|OPh(e95VW?zDz$8-xWm_8@=s*QykKvc{<`(VZ*nH2 z!jAtlu2SckOlreU!jP}ix9`=A$BLwAgWFJX{(?Nj>a*00&uY?B?`NKjh5-ID@lphU zW&{1B%Zy(DB&08K|5P4h=_ez;*}vu~5)@D=S(v~5Y5%%<_OpM+kBek}P#+TzlbO*|yI03}+FFuvHO$X{ z@2Oj#(aGpvY%d?1@l}1k`)e%iGt{SVKoZ3I0kXwj#&i6#f_TByA#O4$I#h|smMDAw zv^<$IcC3Dsh$Q|={YLADcaX)t-KW$I>loQdkaW&8elJE`**@4`8N!hUr;Lb222^S> zzy{^}W|?-4Bw@&>gXk3TzapQR_0lKzq5}RG(m$}PZrKt2ze;~G;+ySb0y3_rKJ#-- zB>udAxmm`K^)DQOWa0m!JZ8%LqyILPuH#raHsf!P(|;Q3zYpw$dTyv4`*2=1PVG38 z{(z;EeE$qvzW>fN-tYu)5BAP^oQMl5=&JMmQxSrm+UUR4dWUboeMkcg+wJM#8?f^i z$hoJLZ@>;Xu!$`$xrysrYXRx0mjKZhn&Ij03)z4i%Jj7G)pqb$aZ)4PL3F6Wf&P|a z^buIigq@I8WZ|eNjs)qc$HI&|8KgtaJ$4dkLIPG0@Y*$fge@Oa&WCCxHcqT~vJ6!u z*I@*DnxDF!<>qNeU)}W^thKT%J-B|0rP~=dBLC*n?L#}rS@_^;woUf=j4O34*lI5O zz+lg1`c~hefu3F^hh6|GN_wcHC#~ct))_6{QOmnBdU@sYE{5IHuz6;I{+*RwQkygZ zksT$qa%CY+&5*t6%f}dad?ADQ-IOiwcWS-?E3qGL@ia!Uw9u4$x#;)ssG1>n@)UN#)XU)}7QHA|2z0A8uqfc z5m#J}S)#n(WKw*BzTN42Wfa$QHu5kEJ7g#!h{j5|0LW^B+ZhRg;SH=@?1t*W?DPT_ zI739v=Sc|Oa#2Ms+AfH$|R)wcLzp^tI~v;-`Kd@a=#c_JKw z858Epl3!V;_ENq};QO_a=jxJQFDOD=?CSgV7EkMv$iPNy1}6|oUaV#b&Z6rZy5v&T z4!D@;ax@jx2ia?~mFpJa5>-cEBebD9N)vsMKa%~8WV2O_ug(}F$%sLT!}6X{`)10J zXe^OobuUfqkxd3wx<$N?K?bY8q2JNY)KZ7NGyusGhp|Qx`ls||oAO*~)L(m5f1W1d zD`Knw26Kti#75yaz@^r7uo8-UVKN`fIPjY}2^AxfDo_cKW$o9`t^PFy4ADg|WR@w+ z0cuR>65=aW|C-X7Y#{p1jJQkel~PHe79U_Fz#K`uA?=D#7)57dmO(>?tBP|jw_x0k zX8ki0!4er2MF2(=;aMPn;6d#1gr0}nHz0C=Gu^VO#}I(~L)eAGc~N`Wui!}NDE_ct zm2e|=k4rbJbII)q%rJm41g03ky#%f|fL93=7(f+)K?V>eaIpcjz6n5g1L#Mfy#ZWD zz-|C@2_zc8TLk{INoD720>S_+69McsfGz|!8Ngry}jxzM*{~V zM;n+XFfRih2Kxl;v9Kq>+zs;p%zT)qVS2;72J;V?RWKF6tp=?|NM|G9zrk#RpCzFS ze%v2VOib?5CAkp*`ZWBrS{n{)I3&f^1%nO3n=~bo4aqc(ab=moD}+hSvSr zQd?M4Q%%3Kh~5%ltMo3dTDP%fq_*MKdTM$H6N7de{w$`-B*=;iZ9W_BwVX>Q!(am;gNcG1hrg$<5Oy&`AZJa=YSfVZ$w zy!F-^SLQj`FB-_;a|1(@#HZWY=-jw)fU8qehoL>Fhb@d$xu2k?PerT2Lk|PKKqc7c zZooe-Fn#|jV#?=zEVgmzV{v=@-`8StlZ4yjNK9@Wv15>W2SzZikLGZVSoXgT5D8p~ zE^vrV?EIR|lySIuMGShQk7S-XORBSfgFUn>lf>TWDwlTx3A#cr+-*1}{QyMzH0vYVd@5V%g7r%7FF`4`!R&=u4RZj-l8j#h4gdb{ z{SxbtCX@tI*S8Kz6gVSJqA5hOKA}lBvX_>jR3(S@;NNqH?@*ej$ako@XL`xe=O2I% zZ~I7Hrlgh|ZK#MWAX=8AJC6<>52U#Q&Qy%vZN5_6tXzT77~{ggM3EfzdbSwRxB({l zeVNf^?*pRRD#8uWa^ryYK3mgr>QHr3iyvE%*4vcVn95Ay%HZ=A$gfSku#oH2L;CM| zyneTXsrW>K=U(}L8~^R4tE6vDg1xLI)E+#*GY=m6bD71kD10F45P!!&gIg_yE`1}< z6g!tuEn+BUu@YepXOP^*+a$)It2QKV8uFHl2O263vf&gsNZ6^b6`lSKnjmJJqQ@0$ zv!vW~jY>OoqDG=}n?ZiPs6l_+0D0#!l;D)SAHFeQC zJCycY|8gi-+PmZLI zmxPi@Xk>jt$qf-&w}s`Dgd!VA2zRGiGj?;*X;znx%7x5Oo#K?mh^!zHFj>5e(+LLQ z*WhQYK-A~u=_TqvXtsY+Roj4K$kahe{yIL27n7;OlPFV^C!4$vfQ4({(I)n}M0aJd~i;vK|8?7iC@`DSO(O9?Ei!~+|tG!W_Y*iF>Ei(nr+=-jMR4Unp z1V$Oa^#n8nm`9+$0sMo&`3CSUfzAZPcQ=DAw=DSQ1dC-B%(F0bzXo#_7|{vlJeYnk zgJDL%n0-0zQ~AjWg5qcH3zDCo-DL1nPd~gH3qBPolADrwPHP-fKLCgH^liY2RD}0N zx$|^A?)YQexnW&{Je^oC)`(cFDj5sgWbr&rB1@X%C>(DCb|jEs0R0I3yHbUWByi9G z?j*3s03IT+k$})AN}gt;;2XfNY8bkY!oCIebeLk80L(Kmufv!;J(Zs|QGQlGC;6Ft zvnii81UZ*+%mXvgYvc6+mP$(KL=;j=V)&aVCts|`lSg7aX|=XNPEM{D>zY`s*)mo= zPA^Ra> z;z_51v>Ux+LC()SjZ*_fGcXEk<1z)D;4*K=YA#nGuTfxlLVP;K(RAEcpt>6AIX)Vc5HV*PX$V_<^tTZm zIWRH|{({S3EY3%%J{=W?yedla&LDJ3t5G7+u}*%g(P0`KE<=LI>rfO6ODIo4*^Kh{ z(uVVkRZN-ReubPdeCaQAiRVC5p7@mqQ@DnT#dtL)s`0@P$cy5W*!cxSit`e@*%dF4 zzr_UdFbWkF$T7&RVmk%0JCckS$lcIrqq(02(x(Vy^66@r6P-%{hejEzkVf$+Zvq8e07 zGZ`rltbNfRWzho^SYp%fXW>WU%Lt^xe#9M_B z;?Y|z{F)k)6vAoWCL5x=O z6DwIPDtQgELnI)&6onP?*3LKJfMg&T85nv3f}bc(0wt6S#p|!I<}OI#f6to!(O7@N z8n)^vL#=TVzblS4z0lus#`LAx@5-{pYQC3bom>n}l&BRUUNikG#d}N&%`S==g(8+{ z_$3uR3BI!3Q7ZIxrZhkRupokN>ncScFe(EyLWLM*je&cUIJXvn?48-*cZt@3VaQH}GKW z{p4F2tDb(+_A00snJbijauITCI&Etz=`Dwt&Bjm0lY-u2Lj^dYrw#EDDY?C z+cz+DAAnr|`+AruFf(9EVIGCyGQkLWh9;Nuj|}@ikWQoX!{yAw+>ZA%3t zxouxs#g&!Q%-aG(lhLLdiFJ^B`%=zcBI!F;%jst!*FX@{SCPcX%c*f916i=5i!tap z6UD=_&0qjvk0e&1a2&;XmnYmSn zXz(#GDya@P;unh~M`p?9MvgFB@1ff@vNb54Ic(bX85+-=i|eGHi}X##Y>^MK2S$+* zk}0R;;HYc^W)9Aa<)B=S0h>fyY4g1XJt!A8@VcjLT$s-eKVej%+64U@K%*b|;WIkb z^g1p=`??WQV-c=iStkN!S;beN9X-2*?dTdj*s|db2z<*su+#}N1Mb~0Kf>V6J4=%F z)L$|tP3nDnUu~iX?;p3Ym%R&gS0KNdBFAQfO5k>kVof053b&LOZdFCZw@^NaIRTjA zzD_v~m@&;*64Q)^O<}teWW-`4W-emJ9YmKKye6_*UxYjdhBgw@5y4>H8=powF|JbF zFbYMF{$&5k`3sI?MGvWSbu3_=IUH{p9ZSTKyFmJ6xbdKYX3yJ#moJYQUcI6$0Ya(1%bS`7} zBGIM+jf-O0GT*zz0^}RuG-6_<-?@zHl)g#-S`3z$lreFeDqQ#+@{a={_RMUmn`j0I zuV6^ptFa}<*=m7$f(uIT1Sxx!jK;Z^b9tX)6^++{!@-z;BZHjuf8VKZMTuTLijyVp zqwLqYAyY#>R=xI}1THmzIRttcz!L-<2Ji-fmIm-CfkpU*-8hjUY z0m#-0*p0EH@f++*VfTU=0y7fkMwqEEufTMMSqt+S%nvX-V5(tGz%&7!HZb?WJrCx6 zm`uREVg3d)3}!6MB$&HlnC_pM2Y~Yg=&(^4?a6pg4ddQO2wI>|uc1l!G6Nn#+JmPh z7U`75T6wb2s~y0QwWq9KpBA|19&MPz-O2euZi5#e1>OJ$`+U}$%-sZIT&NAuZRe2Bp1ITpk!f-({f$QFwja3KT6BVaif)a9pR6iP;5 z=oH~?fG`4Y6Jr|)Y!?{%AJHFyAOx)hwF#diqPs-r;7z5S#*1Wth&jqknzmqE{i96R6HLedX7mnFq8zvoLEpw zEGQu~C_cgeh;j82JS_6-B)A?UnanGS9!iOiTO&Hvi+fb0)`|NF;!@|0uCiA~OL|i5 zPp@0jh}Z%jrSg%nSDOigN#{i+7EC@VUOy%36Lq4tIVD|L0wj(WG^JkT1TnTwM2Pb$rcG{62v>_g?G~0H%2n?maMV;Jyj=-(iy$`%rb> zS?=`7mDWVD4imHJI@uj4Q_fl}*cr=YSYwJU$zzE%(g{_}Z-jw0^1^t1{oVXr7>)>F z2RP!?t6kh*)P3%Ybb9I!aF8_#Ewh6VJzSHns)V zG#bblFZ#stCi=cFzi(0c4ygKmN$||(-&FkBOP{9KNo%_%7L^5gik z{Ky2Eqrve5F`3g!8g`^(kL?P%ne%AylRu zS@b>P%WYgMt>%l^-F(MzhuC+lg{N7`F^;hIG9Uh3`Wk&Z-bdbxE(etw&WDE*yNx0U zKY|>Jxv8>Cd?K;TPO=U1%5YKxiA6F{_Q@ySCAFO_(ACl@*Saul^IdNozwS$|Gndkd z7rwdI5P#4_b6h@8gBQ%y{s-j!vL@|0*4CtIq4rP&HVe=)YyQ zRX^&~w@|XwSu1@jIGTmZ!ZJn`nVW4?rx*%hS2(N!6)Lx~%<6IgllzyuL?_vXrAUlK zM;&86&v46!D^B|j$5CddoO2j2%k08&E&sGFc;Y9RTg4vPrKCJCx^du&Mm(Y|mZE9N z=D;Jzs!v|LEN+w-vY3e@AK3R2{id0N1@`#Xn4<+fqoaj*4V`$|&uA$>CwNBiuOI)$ z`A(p{ypAm3qk(w*5>GX}i+TfqJtDv?@^jIO6gPrM_-chJ?^}omRA6{OH2xiiPtT|i zH?rd5kfs)+`7UVYql>Y^K27h4Zl#EfmCtKlUnyQ0SYH6@$@dt8)eiXp>~FHWM1P_m z5|3}Bgx9dg?0IUB`KYXiO)kAs{~B+Aias)nHQ`Y>v!-?wlz#{KOE1}V5|sr?i57^% z=k7NQ9NB$JazDl-{!@g?9(1!vlTKcV(b0q6&K^`Gjh~eBBPdetqElWv*OE*N;kx zjmVc|>7=pPv#-A#{|Poeinj9#)V{YG&e=*HT8y-qhNx1suq zuCLaUPjui#XBy(x=Ct zZQuve=K&cwO|?k*rLHEp84;$m`)aM;P{29MBx`;3F@CN#^#xcOE&>jZ(#K~b+&x#t z-jA>^NgIf_lPx{BdQ`=j+b2d|x>p|6b+Y5N?jI9y)FK%!IuxO|D#9 zpLkr-e;5`}z$xTHt_S`YPzB*Fr z3nlnFd;%gf_lCM+LIO;Fs3X_8%z*@h$#Wnvd_$(kg$Z&K5Rm*3>S7$%_C*pQNfGSF z)DRlb^`m6!!35-u>Y&xqSv?CNnxa(PfyfP#fQ&g>#@t0@wntHja}I$k+sH4lh`l@n zmwNxlI7nFDh+bOI!mdclqrp4PH|kLU5D61Ys@ACeZ( zvP64{QcaWz3Wec=5srKIgERVrKF~D(j5P7vv)HA93e>gf+r3LnYb2?$q}J{C;PTP3D2#Gh9s@9zci#2kb_H{&<<8(=Ozn6V)jotI>V zuhusEm(R}vM!0n}dw{^G!D*kP4Jpc^4M|SiWO5S}_`LuPjMvh%iP&000$dox=LQ<% z(-ueoU)k0so|O5DtPwk(mhmHNf|j|GI`g2rH}uu~PUAt!k7FnWK+)4*e~&eg2g!wa zY{-quwH`x6w-FzRI++>^Y$%~&F%-1%xcDf8teGA$gp@i6A}to8@|Yy^_%dXrZXORV zikA13G?;0zCWgSekHtnN7(=`oL#UStU4;ZK6Y4~SM1s*%%|O<=qRRAoZi=kIO>xOX zF%&rbAn8PSs!ErL#%+R;$DwZFArVvzea5mTv1Lg(FgW6#xC$Sp>Kr$|0_iK%rRysV zqb#r-`Te)dI;2g+o1pI1eescd6&{460tKke|{0BMkEd53Pf%pcIb;G-0 z=EU{EI z)LNa6n_9TDg3lt#k6ppytrLu8mkz*K_2rXlVQ?e9wJDYvfFSU;0kpgbzzYQG{G`4r z&*#TZuJwh|8(opxizvK~96N@a5IgmVZp%2ziDS44@zEAD8b0l|v%w`ZoP^6#(uKHI z*-c-^t#6)*z_EKHm${>;LF*yjJt^Z?Cz#;^-%)J9yU7Y(BuF1}r`&l-UI-6k=SANr zw_R4MgHidmCvMkkgoCU0l*L zxyn~_o98UKOCbIRRAS|93s00)Te6YIi?EJS=irQ~>0@PGE@td}ftldSg-VuJ=Ed({ zAX&EHa4WUSE%z3VLu-+z0GSM~RT;$PM;pw!1XO=B1u;vKmJ^l_WfyC#kI00`1~b*r z9Hb|o1(1V27e*$Csqo8@Cp0*|s1+%!o-%DS1y0ASaa}J>v_MiUX<$qiB4-7zlq-!U z9#J?a2}@CCh9E;C=&0y%4}O1IQ*Y(Evse7;OOe z5Xd)x5(1YQz3nW^9{ld!6d_d1a=G99btY!{Fh+A3$p@dCd`8{$6zuLM!U?ggK&QZ z^F0jx|IGXXoX26y9NCiIkydQUA@fL}FNwr>q zJG1bqah4p9K)mgb?1YM7FI|m)r|)=*eQppgbSE`aB9Vc5=_^~FWq(o;*(X=*`=f2@ z){!{G6R8?d&G>UaL;oc|y`E@$4uSLMRLdCH`{g=i0*+Nd=H>imATY&CpK>b!LM`tp z?8k%`4TN9LYbv|_O(KF$lV=!?jb&$F8QP2_NoncrF-kU2l0>RR^?HfUR<_oN@w^eE zEH1{6=#h*V&9Mk1liwwtGGg3j#2675V|6S>`%TdplZ+Vsj2NBcV!RTIF_imNEaEPa zW5h^74ByFS_EI@|p@+ytFC5X}(C83z3sFAQ7*@}PWLGiBx&7~CegHP>C;7731eg8` zJ|>E9mbH5o{qTTp_>Xv7lpXe_24=U&3rtPK6x9Xnykvaq2e0GQwDFGTwCGw*AMW6n z%dje6ZsT`u9C^HA78F-~gJBtc+ldzV`k|iZ&^27)dk!CkW;pTmsyzKm-@1s{xtm4W zG8|QfCvrB4BTsOx0-YhWq7;*&%x)4Mf^VLBJ1U$O_R_`iIIjcHPlhvnC#~MI zqbM)KH%c!s`+;yWRvxpF-;0p{d4ES}3C1Bdnb+XX!vfS!u%X~bE^SITYx_|_E>&Sh zEp{xVvoh2iwHsfq8HmkW>)9+^UsbrbjKUQ%4|NL1k4{7jHyOZb3dc`zM{yqpMP}S~7tcRBh%?9_*ptA;F#`PwpBsY*5pErWhY@ZRgGUfPtVc^L z>HQdka~QrO2LHhVtRaj&ia_dl3|<-q2M~NiVh2(S2s|5$T1Z%r!9|4ci^1~<-xh-x z5gr$VW&B|=SjO)kgR_X=ld#O1tf%%-@D*k}RbmHHy#y=)2DYvoHGWVhFxbO@K=Rh;dMLh+m6(^aw{(@KiyVJ0JKxhTKT=`;ylP0G{j+(2 zae^3w1MRQD$A$No|6ub4ZSbjVTInpl6ko0OSb-g0jzvE3+^MhX8MH5{+WrGR!|1sI z-yQ>LM9*0Z`khSrt?i$$3N-U$z8c6Efo2*IK>J5$`F?ElR@(59cxTfJ5O?WY_yORG z@XEZNl}NM7xqUxATzF(lS*532_&R6*>KRioe&Xf0ZQgu9-$2f~?6TLS> zX>w;yaq8RPaAi(bSLxAVS;We1?4{%!gL?ruZHc{neA`<85~8~W=f3jM$7Rh^qAUQ5 zvk71`6yY^SxXlQ+ormyaa}gfW z`+P@}Jk5PalkH_c!7KD3{g0)1t%2!H!X2^khOGS&PWK(N((8e6Q*7s#y+Nc+cmhfe zHgg{Wh%G~m6`SSzafX`%O|S2x1I^t5InbCq$DIJ*v1Z6>sh6MK1^MfhysgR)+RFFY$|Bxh!nU3vedG3n z+xHoyb?n`ebUF6S<47}?+u=R5x{kMedW0GZ_CN5{`_URW?PXi=AKFUaKjY0BB5lI= zDoyUZ0S^=qB80?F?B`G{ft^a{)c-}cNG+rQqY8%N)8z47swy$A@IGW9wclY##;h_W ztN-i{;7$Ti*aNBW5}aU!Y25&fFo5X{8B9PVcSV;AJhmpf|2 zXt^gAxIJ?%HWyw(=`fACf2uK!$!n9dDo?L=;_S3P?>m^C?!fTP?m*s7f8JhPgvjGr zX-hEg2TWa{b=LZ?4+7~R%&#yis!6lT)ysE&Q56Cfx+``?vx!h`@CbH|@W_bb0KTO%ybX2r zA$&HhWc5oxoebn`dm>=8iCZ~^tpsS0PI-+dKf?thIAl+mV&^e z=dyR)DVoqrk(*1DqjLa9e`s@QBQOFvFo!KZnqZ&15$Tj4veB)$VJ&|qZc6&H%tm^j z>rlQ$c-=8^(PD6O{+wc1a&3$YJ=r4tU0!_~nR%(PE;H&g@&j)>M)|Hw#&sO*-{w`jT^Tu2B-Pok)V9mCqw=>#dVBCPm53@qOD{L#%qyj zuyDSMD~B3oslZo*Q}Fo2ov{*9__ma{0$5VsbZcj{FyAV_ujV}a+%J>iy_`qXEFh%W z|6XqQVT;7rr@6Bj62cv~8xii*uSkn7`j0}0Z(}Z+FdD*6f0q23R}1-lrug^C`F?Z0 zeg%$)&UBzPIvuAzSUb}ZT8GgcQg_!=_)e8u9=uT>5|c|0FCuC2;{(V@U^dd)5wuK* zWk&N|j*kYRfkgGchTbP%ObU$M46$W2yzjrc{(JRuM}wIb9*K`FDlYLVe5vngIyU`f zVP+cNHwdSTArcvzeTq-0y1~ZgNH2ttPx=mjmY(|fli2^mW(YopCK;AiKmEVJue%(f zXP_j3Ut6(RFWSGsa@FV8lG*=LetAgYzu=ck;{Qc{wUNlD|Xc%Py9mpHD}ppYLxS!T}PC$iR|;k_5aK zaT{{fpy=VnaV)IG=O89Q7cycU4xR}+*~E^?+ZpBat67F%ZDQj?D~NutxxRersqZ`r zE~XAemjmJZljeArLxeCE%M;c$;)M+?1C+O&;t%M1Q-j>KN0k7{*p&`2Qw3 z;Pl^+CbE&o=>B%TJ{sM?y$(q3P=}}W>EF-ieuBosyVwIlm#CV<8V*t%=f`nhVK1(% zh+FPc1Jy|!#SqsRKyQY)4PYdJ%MIWN(JmygK)iJw=vn@vG-C@98(lb-*$mUU=$GL01B20pZ*t>njcMxpd+vTthy48B zA8!9lbjerPOdn741sXmo9~XWX;^M|X(KQGFsUXET6wQAXh^2O2kPPL^1x&n4on3@^Y!FRx84!sfhT=9j^d@}W9bD8cjM8!hLdoyoSs;;-;TTGVyNtl<>^KF zVMKJkJjDp1;(S;NlJh!qJJUEHrgzvd9}0dT{rN|X6GBn>G|mTgJY^u4M9-OVok_#U&HawhSmonXhqDu zq4I%G-*ki|7ZyR1Q1lK*bQTKtpJ^`akYB>Y*wlu?1I)b?EqP}dz4|4PsTkm0q zVRR$bp@dx^98`K2?I2aP}9H`{?PAPqi6eN!F4 zl`;K}A6e+@$%vgtL}QOCf8O8S{=2}RIDJsl$Jn?JlN}qs;_+4Q&>@A56MX@$F0}Fm zhGuCKhor$JHhUrEsV)3e!>g2d8zMMytM9VMDdgoP-$Uwos&B1tZFK~ngoKc%emhSJ z`Hi?J8cg<4zMcO34F45qZE=~SeAUfAm)6jq$Pd)w13&pt<9Id#0^Ob~y_-F1Sn5Wg z!T@>@_=Es|Xrx)X^#-JmlcE=(t*uavvdZbZY#u(V5LwmL$ZwUesyea?t2BP=1qH{yv2g62fom`_R>mV`$DblrSqhN2kt`&o{qlS zzo}=pRYNNUiJ-*=l+Y{q%UR2XzHFSEl!pz>hansegyA}gT`ZRRig9=WAINL~pR*H* z@2QI~shd=z=e>DWA=`{Gux<>M&2OeNnojj;qwI!yk%Ub6AJeFqV}MLnOK8(DxHL2W$^Z z&H?4o7zpjeGPEn4L>U*FgxRE6@Ei_QsxFZQO3g&s3wJ_hoB%+*_M))NpHfoea$N#-wavjoutn^53gp~i}S2t!oWKR@)6js_^NNPfhhtw5ZOC@qElzVZHpVY`=8J9Q z2UNIhBYwo-qca!EM`t#`TOCzi`3zd(&uj`@e1uvOy@ZBmy?AdfoTUzREd(Ob_5lrd z?btv}Y}o_g$yu(T@+cC;u#ap2TPT53(CJI@=iNnhjLLe&+&J<78*&5juh4)e#s9hG zQv6F{)e--j=TOE?G9i4Z%_8PMt#|ZFC4(e4d z_7nO#*-7AlnO)q2>1Ff;Ut64xTh0PgiE5}SL=K3_*3Ujfc+owpH;L5yoL%DyR!t?- zK~3M-!0Eog@Z`8^7CTRvwD~AgThNB$jJc|K4^Gw+&K}}bzExNOjOKbG65$N|OfTkb zMn8;*#xs;9@zFC8oyXny!lzN_I(Lax4$%uqK@@$EL*z{{K+FJLBZtlE*sySsUs4bL-q$t~C@0wC@KV`KKz>1h7KwJ|=oT z70i>teQp!n!##F52`{QYY&_^sR zsaXjRzMrU`Lg&-YdKHg6qdug*9h!?lO!kI+LtC#vPa6xn%?!ixnRqy2DjsSx66=nX zFb*SK&0 zr>4nCfQ~DtB^cJaK8~jL24(;pOu4?PxPbmxtU%Aa+=8Q@!eaVw7O%?Qeoxuqq8v=R zFh7HoOP$uaJc9X&Df4*P4da_lJPCEo;Olzy!ai%?`;#rn;E~VTT)EhUp|ElZ21-&G>S2rCKGVL?v;IH7EDSn->Isy{w zzkLHPzZP7__w6o_x;gta@P>6OYuc=1mpUciJTNp-ya(|Q=jiF*qEdZFIg32n*mIWe zXrZT7U``sU0iT?>r*Zgh`N$+*PZC~b5yi@5-K|GXROag z+r#eVH#1M^$P-Sl>NRD1i+Z!8$5nTTc^1Swg5wNwHYf9g3x5BHw>N>0s>m9?JLxn8 zl6V6Wj0zGpjwqWXw3i-no6*rxMrUyw9Y;kL zN7H~LfI>h=L0rJ~wsAppAVHGawb!XrRi{p!I<-)Z1*)^g z{)(C0w02mY*Kf*kZ8Zu#|K!&y8h3+Jm#F7W@$ejnN7OSq+5rl&2iKSMi1MePoMX`%SWAQLgU(US!}~*ov>RTdWX5PpTpR zsN%MylVlS4*JYwuI-?5A#XrrJ34fIqNX_2B9Nt2Kyes;_m)zj+WZ|Wy9bf-aHOYCMv%rRI(kHNQNEok| zb2cL?LQ2jl)l!eD?nAd|{h>XbPTixj=KXRx4|PPODk*1TyM4i&V*|e`Hqz;5r$EM(#{C1Dwfhr>i==EJOJR^eHX}2zS#f2gT zyh06?Es=PxzJz8Ky>Km~ZLNwU=PQp8&5TV3VVnZ%Q#Ri2{cqoMzDQC_N?|c+w%Ypr z?EBVMK`11WzGLg?x_>H3AH>BAeGLdAt8bHQ$GZwBMc`L(BB`!_C&6(stWi8#usTdG z%$p`Al+clR4p7)ngn_rI-`FX`?IjmDHI%AZ1rHDhVhL7Og^-c)ym2$$LV5#&l{b{g zAzb)dg&RfgEvdv4h~r1BCg}>*;NETgGg9$SCqC#niJzZIa!@KssZJt@lqBjo>P-3b z?&|l+l-}si{rU3#kxC*IzQ-n61?#3WXR2P2dG`y5#`1i{UztyL^4sPKIp~ghwkh~s z{tDXZiG``phIn0N^=*6V&#NheYvjBgr2F$XBy*6@V`=_q&3nJjN%yARHMv($UPxr8 zC->YVZJwt;)U~n~rjnb~(IHhqv^D;tb(t4h-ZJ9N;2j7yQPOZmA*@j zkRn~|q>KLt{p(4UKa0dt*+GhCy}jvGy2(Ksuhy+Szc)=tKTA@1j{E26>E2XYJy@iF z92Ea|?L8xvUZ^+&$9wJ|`=C@3nR|BMA67x#G);_*`aRLpm&^|b5Dj{oOHO)zfP6G! z+C205&YT?V$IoLOW``ji`)2}aD6(X!fg$G`dBI9fabssQAL!j{)K{W!c5}?3snd{2 zjBiu6U+CMZd#)3+VYl8pS2Njl0(3Y)g#b$h*mXZrVr{Tb=wiB7OhX4>dW{tk*D5pQ7cd3b*zJl&!JM1y7}hWECwF%3*c!tGdEu=mAti z2ML~q^$?CDecrgI)i8(j>Ifrh4o5KNEQy?9Wbhq=ePv`XgC$}aH2v1PNTS?mUQHKs zwqrDluB9CETqJ*fAp+Z$*Tk#l`m3NdV-L*%5qQsq&W z)kW)GiBsgn29wu?gej@=qrxD`JAhWvMX7|h5txxmX~T6ckJMyKv7ujEMLWPQMTV}) zh=oAM$y+9M^6s|Br1Fl`v|TAl16I-Zzfwt!78v|wXPtd$H~SiRtM7%_&O94pvj>Tn zy_fo%>jb|f!N;rMe|PB=QSmBOULT5AuYbC~Bk|88-TjPN)AWRmG&yt(R6A#8*BVBg zTxpKf93eF`nm>VBxc)A;we^$Pm+y3h6B=1^HC~Jt1xDEu2yu4Fe^&FITyv&JBQ=|^ zP{3TJWq7Knf57JS2MLa7uc9eQW{465N;(7;t z$PU3OI9$}Jtq#l6BE1^Vj(Q&Cqs`Ob8GW+$&cr9?%Wv~s#Rqw^OIixbW4^tjo_F|w zCGMLV)5P=X)Z*`utMStH+piQ<`3v9i`~?`E?GxYMjTK zI6P6C^!%o7nFWj%dGy^XI*^v?Cl6Aoq4J*Qb^)6va|~J*?mewrMwy{(e>~xY(yv^wNdR* z+hCBAYd@?;aT+P@LY_axuxN-|MZ?HWXCxI7g4Q6)sC2+-F7juK$UX*#4< zfG-{3d;vB&zzhN25Wv3kTbW}!uwjckkP9W};-0`65TZ=9veni4N?Iw#(WdtLt)dIT zP;!Oe8hW0f%KF?IdM+Pz*7sJ;bfy-+^{ur%(#^H-$3R|?3&9rzV~4yulE$!`vgS0m zzbQh&*Mb%y*r$(O?#7rsC-(!0-n4@r@S=KZVM{D0q%L+NvA-wwk3htR zdW~6PdD>cOEos{P1M^4R?jPUWC-R{?{^8)rCd1wCUdc6XvMJMfEi{s?Oga!ab6n>w z{@68cm7|QaRE|;>`F-dj|M;e2u819iPtv`_hlVh8;pBvzQZI^<)2P^W?g-Zdnz;(d z>S-9We$Pkz!yMI+x11zf@N?EtnU*|P8Ua>2z-)x8@Dx*tnN* zed(x5elNi-!sP&`7GWh1j=zlowCg6)udKW~4p%eT>Hl(OGPOE&9;lba{T2x~-MP2Y zqUp?ER4-XN9xZ)ipZIUlh0zSssX4K+Wy*IrzCBpmk79_! z-AhuyWZC^xutLe?-IR9kFF{MlzfcM7R5enTyGy9M{qS*cMn+YV@<~eO$jtiWD{x737;{k%P zKYIttJR=V^#_Aen7M`)FosJcA5z~UPe@d{)#B^ye7H%}7&zFi>CJu#19g0%kQVOBmQT|eT7z}jRW*%q+22ddT@kv}4*4pc!a z8|tm^0>+pP<`t{U#Aij}#;LjB$tU!`dTW!peX|+=JjaaXObo<^v`UUgV2(`Y(xv7I zl#RJRVie}^UW&Ka7~r*Gaf8`i@UCW;$)pkf$c)7_KDfggtolY9t9W`)mMf54V`Bb_ zoV~%=D7w#2E0XP}#Hw!!#B%(Cgxf+O0mOZO2n<`&Z8TRg^v#CtKI4@Kr?qyvT}|H) zr)!Mn65>T_p6sBj!UOFGW5Osu1Vq|bByG)H0N1Vk;Q|V7RdJ)`Y5ehcDSOLCHzp5n zJ!ks|9N9M{%veo5B?hc*k@!xsZ9eLPkKC-=o1~p)e3RQ8u>~BB9}bGJx?vQa4BGsq z-lpz%$kCX!4tiwHx8}^s-^!PJ4R3a!j-KmFzOE>)&9h{UCP?-YkMb!?{ft0lIimoI z3q;zoeZ~MzS_%v9C3Gvm_`<|(Y(AuoeM+`a+Z9F&>spe0jpoZBP0WqB!zGsIN)oiR z-kKjCBs{Duv4*;|c_upL`P7?pn(Q0e=z=+3)dk(s1);+c;&uzlt}CJXQ+<(_yn?E% z@Bm`I(PA&{s zD+1Qs`>0DjS1w9Z^4rMueiz#GlR|yXSW_dRqM#bZuIGyI$8seU%Zt8BpWnEr)fe^o zd9tL^s{yayWQa{NEmvfQ-xcm-Mp`Fz=9m$?(G(rz&w|n1UarScP&lQfzxr{{r83lheF{W2SSK*%ci6YQ zmyziqlIdhJl>u1Zsz(ijCUGo&yB~%_=l&eM{a=s2#Er-veuntaA^N%U|3~y*WeEMv zKe=PJztkrmHXpTo^x@Z=sC9zHSAxa2b~z!g#G$(h@)A_*O5|q-DKAOlNqo1LE==W? z_V1H;7yp2Da+m69dbUG)HnCh{TYK3>ze=aMBNf(Fpd=q&7GhVT(*ZmJyzc;g1X$|;vZqNba{!TwCSG&^ zIZ#eK;Q;*w_=5wmmbnsh9YF08A`T$ilEk$RkSD-p4j^n#;yeeC&u#Bc|ot6hox9e|PMO6=tT%n+_bmIJVMxDww{0FntW3#%*fnFACH@QwrQ zE5PdxARCKBs{;%Z;5i2<5#TQlaG(J9I{@6JD>26bN(H#p0e&ICbO(?vcj96P*k6E2 z4j}jH65|{|HV}yu9pC@~j&^|I0+a$M+FQ6rcepn(Amz1uUCL`G2=`g~Qlvd>G&?5Y z*Vr36*T3@dVgn>}jb?0g1~yA;a)-dzsWSknY40V|2veS9Jv_FSG z-oj(aDB~m{aS6GwSTN!0@gw(PRjNciAqWo!y_NE)#zT!F+m-ekt}3yYed0T*ScCCF zl5dYp`{X!rZr_-SvlW7sI5W~doA6oKFq>^iGpe?_0oT~?m5ftG-81;z0!6ONAl@HINzRXH$vcSHVB(?Tu|Fqd7>1q_@u_9kmFPD~4;A z7IwaGx=B>9?AvTtUQRco>j_RP)H2dQuJ(h|Q%yP@Fu)~K?s9Drt0Ql)lXv?XU#e*R z#_hT+d^kn=8AO=6PA;j#{!=*{eWGNu&rwl)75X>yE&=Q}lxIeGRXjY=K7!(uk1wetRlbU6`KWTLy4Qq9 z7{eNg_rI&}e)i43rfza}0xjtGgsl~cy?e^-{;F5G;c)5y3PJnX`I!Yu!6;s<8)=YQ ztLm3k_6$~7F1K|hLk0G`(?qTy>rm$*M0qbq4B@S^&qzfvnop8$enCb1nrNyunU}9* zE=~>bQ@Q=%E3n&6hA2dE)?xpkrc<$28LOE#m_6DNtkm{YvP+{y)^VO(&R6}K8b2Ai zs!k56EJYk=Kc31mv6-axGKvb;ewhvNt*wJ}Qhj)J_)xiT{lB5N0&3%>cCN&Alq8u` z)YZDER579dWtXWkgd`Jt_mnZPcNtT|Bh%ymf88EAPfGk1P70260PT7Di)>fpODD)E zy(oMT_(E!ieC>EaB{5RNv!Yo=3B8{&Itgc_>R~H_jZ*qnP$qPj@JkU^A2n4}@GSvl z5->sq>}5ACNlhL5;sYzn=0*?!Q?S5(b73k_jt*o~M}!3g&9)b&gEkWc7hBFw|I7}1 z?b1||72022flxv7(?L%=K_wKVf*wc*-R%TPB~?&kI%tLyG&dD=aXRRHCul+{Xly#D z)(P^af{scD9qI(lO9c%|2jx3K7o>u^(|G!ZzN5Vhr=^14PY1n4kj&pd#8XJ%t$KV; zwl!BUAILt%*$jIVVm4Je4_cS1sJp*y>c_tV=M%QJ_Oph)Q7kOrx~ zU~A4C^E!&s#;ncCZ?NPk((tl$X6*$0>|U^uI{m-h500Q%kYe%!{W}2dawU#;0Q%OI zz>=kk2GzR~Lmfb7!9<}0FphXV)&bORW*a_|HIuO`k>F1cB6)ypu>J8zDMY?TU<#2S zYzqiO;KicO$=}~4%t|BdnRKGx5%4nz)9d&D%l&gO3V|x|SRkr|Wk_-QC{a$KBjFV3 zrV@lUekgWYuPrtT@d<2yS47376Oi{_A`;7BET``Co#;p?i6!E}eMH1qF&FWwd!-{< z+($%X$sSM2O3BF2gfnEd>l@?8MSwbGEQb4oDUmaPP%iHHqTvC)jR zh%`D_wMhigui1xiyeWE5T1L;?1|s$s^J@0)eWfb)z?6eIy5mzVm(O zDebR6eG1$6!Lj=IWQ_pp1W0=J4{(YQD?0r%7z5Td9tpM==#T>RPY5}jkfi53Q-FeJ zCHy`on-a;!a)3?=xy1qI3-D_PXcFKe2N?N2z*!FP^?Lwg9bmcuH4bpG0A&s^Nq~bL zAR@qE2lz^|?&kn;0e%=os}Pz|*8x(!F9ZhgtM)syHaEIZJ z!;QvGz@3k~9CsbA8Fwe{A>6aLWw@e`(Sg8)akt@qk9!LDGOh#nA#NKk_Y>Yk$Bo3D znBgAz#^rhj_Y!Ue?k(I$xN*dJ1otiOdMl#P438@g@N7YTUidw}Si4{N4i2 zw~+ovoV4k7V8KD=_wVqN_>c3u9Jd+QjT`iZ%XJiPEbd}lBklp*eB4^x7r33c{4X_r z_UCsv?pRzcPVzj3U%`{~iS&iwSa2yF#t}p&cfY?`!ntzxL0tm;Uv!u{BFZZo;w}C5%{O|5n`UpUdVB!Z>-7LW}zIj z6bD(DN>1Y?GRzTkMahgQYx3PTl1L;O+$9QHs{(RX%d%JE;-5Ok&$T~4O&OXmn}R*7 zpXkS8OPBjarnS<(qf1io96@WiP@krYf~r1J56S_%T*bEQkC6SB1jtODK66jiKBd1J zv;rJcw{mvMBc#k;??0@bsPnU$a@IV69qkGJ0m<-Qyl0ma{=&C_CJgHgm{R*>Yh6W7 zR(N|L7D$?IjCP)y+0 zV>w}u&sby+dn{Xj9Pn6HNcjxK+LSa)YqrXPZi#+ELLXK)ec{a#On7z_vtr2cbhFxt zn$~{xJoRNYmnwB2Ylm1bok!H5wOLq3UIN${8ijoz3qjit>;G=w$1|Gqv!#sv zNfUmZHv-Jq5sM$f9H>$E6(WbqnyIzi3fLYRgT?i8`OMIV7c<5sY$r>^E-`fQdXnB+ zUx`QfFf%E3MGq%|n2d>U%He$5tgHyHO2xGwn&@;gZwTK(-76P2gHx_V#H{svECPM3 z#GX_Bf^y(72c!4ew{7$^dW{TM*+--0Vp^8)^dLgnWt#|_MNsnY*{VIOY#$!6llwjX zJw0kPk0d*-%6znnsHp1*`yxoq%C+x5Q(n11-Io$y{R8}p)vhXFFE|L9N;@XJsui);?HgFexL0=FAMPBLk`NbN^;AlhG4oRL{w7P@Y=7OJ}8?COpYr zzg^X(AS0{F%&bPLtj6Wqmynm_IYsB$dA1q75!A2Zr#O0JiS6dt*RtoDT-WvltmEZ= z+41tW2e%+r+n;jQQe{u~n7mH#o*6BdSp5RgVS(t7(#`_Y`N#=Gt4n3n%+VAFYxMe) zQYz0rfk`aTdihDQMe_X9Pxag6ni7LL;Fy79aN93@CwVxyx9JFQKlBWZd(2{c0uN^3 zzWP9o`&mK>a<7g@H-gbJDvS^fG%jr9kNr!@lCJRhtmU028ijq0!cz*30WPC(ObO}; zg@9#fD3kzufy;m=0DFNi0OlzElxe{7JuTI(m3C0qt?Bfhy8Z2ejJnM$(cStkgdyDu zOFJlOj|d*rG5cZA(VchTM>GV(k-GtVG-cAg%LUPE7UmL+6;p~}i$ z$JGGxDVBClwEwR2`9vmDA`0FHWag8j>Nbv2#a`hF)X=oXQ8R%?Drl8ms_Wf(7{xK2 zUsHnhC$e7=8faQs6oa*PtG)AEGrBJa<_5|gDAuH9=S_Q4PPf)-Arelnj8)SWwiyh9zI%mFjYnkaPp_Z|NZ05COQR#8nE`*^4%#7donCK$Q z%6K|eCUkz4UE75&FYzJW2|~XmsT}O5;XvdC8H>&IHtE#;>BIByck5YChPL+rwk@p* ztawu%h0`0!qUVm40>dNhgC@&d-%g^(7H0P($|I4G-59bbu}uR6@iM7RxKQ>SMMacB z3

7iHG%`eJB@Ec!!P-p#f^m^H+>=hqs%_rKTJ8-u5Jmhs@0Ij{eHf7}5C23V&zD zs>jHTgWd_*zI>kyjW%A*TfbehyY>00{^;?N1>sCQ^-6x6+4(BJ z<`v!AUpcGgxxuu>;X3wS5bchnN6maJq^4Kz`{jt<|SE3cUG zFPj>v%nl7gsjVr_JdP3n!s%Z`_lfS^xxWRkFeqTgKkRGy2aSrlt>!`OD_zmP2fCd( zm6Bw;dHr9cmqTb zvvFG(Zl%JaP3LCu67egg%XpS*{RU1wip4JQXh zpa0g4%wfCF`al`)OC*cdBM6e|p}=_2EKU|Z3uwH!g{Vu3O2;IN=J$?qhl;VD3(^Pp zqQ|xMm1=SEyua1A>V2Q#Z;SR-g2T?icozDi2Pmkm?*O88W(%^;)1#FUplyCBE0zjL z(x1DjKR24X>#Z(YA&)JT>Mle>F;;Xib+nKBx15q>hc1(0HsE@hL)S}-j#+dBWeQ{Y z?sM|HMaUcfA_#lA(8XK!D&!OlR$g*gWq$t zaMo*7Ij^L4dd9}`q;!vMP<5;;>KCxWa1H4`V7~WF#{Rmyxz%XCNAM-CtV=OgY<*GK}nKB!&G)Z-IeP5O7z`3@k zCU~#9n;xmT4rNa|xI26VH1YL4&@JyI@MAXwvJlUlExMrGpOGJWyF|_CEOVw+P^9W{YV4&f!5_8moH-7nXH1R=?ft-NTi@!~kFj8N{>sEICH=0fbu zd-^_?e-@Fdi|DQ z!^G-(dEjI%x{kU4)iOJ zedvC{WVf{(M4mZMA<}Hwm7SgM#Kh+#$)jar+8j}qC-|}U((V_qR9ha`w@hos4 zzA4*Y1H%w(I9Kv&_3KG;9a?`iz>Q}ixRH%NcYY$T?W0BTq1NW>jquS?^npQ85^e(st_e5qv1WJU0T zAHO1ahxhJbceH)j0jzp*Gq-P^+&vt=6gx_r`lZD2zj7N3P))MrZiarVlqM4{tbM1u6b#_|nLZ3&MFm%Pda8y!xsW zs9U}&=>o}0eHkxPiQGuLH*TXiPp;*yO>%wK)wrV(ZR1F5q4Krw_$R`%sdN3*OI#Rt zD=zA|!}$F@E;Yh;;a_CBEa|bIZd%vpvfs77vEKJvJ7ZU~D`VgLS4!pT*XC_IlXD{{ z;SrTeT5IfAAUZnYs7TkqaIvxI(*e_Sj76OT_$r*fU(+fi<*v?wMohHLt#<3xH#W5_ z4`=7CxAu`c$zxJjzOF{0w%Ln4JMNPuH>-14?4KxpY;Wt7;?Dk!A9ihfXa5zE_yDH4 z0+rR$u-l*4l?TUgYl&2|h0EpG(MOXzHolPltM-HsvWMy#?khDkcd4P&wNS6u%!HGC z(fO^aU9fz<=tJ%58z!VK`tmaQ7B)mqWX@Z9^FXWpjZa#>3NOifuk&TQ;3ay%?kj(% z&Ta0O<+5;hIZohzIPQ1+dNtS6@ayWJRd5pXr}Tgqxd^h78K@?IXAO$W z>uRHQ{#>Ym5xl*TT&$?HId8W7?RUFmZ_SjJZ|^vGra=8>YMiLyMHb86fbrvLFvX$$`OXX|Zl1<@Z zFqfr$;Q|MDy#V5vGxI@y)TQ=1cRR0JMaLHVqFl)ydW`fQBfV}! zrgxvTxA6@AD(cpwxu{7x9bMRuR!S^i=deqy{DzU%QL;tPI+TO(D%mXjMkmhD{Cz-lhf{))ug z>Js}Q9Wp@niky%PpJ!SVnflg+**f1?$ez*j)&ug6nVSuqZ+k?>tW3dZ>w^!A1#O7Y zaxb5OhDb3#zRFP)c(r_4{?;5{*687SpO_FnpfHS}<#A{owO5DFCD+Ifd~ z-X1xD^X{(j{*j6c!-HAZD#sRw_p;vC)}Eq6>yOHDRUTuspv0JrRP+rGB8Z2?V6KNA zLy)!)CK2RPPrAPB?OXQ2qp9LqqJ})&G3y)>q-4cq|H#zmlgjj~*Iwaol>aB%Ki_EC z$XC5(5*;RTweqgyq@~^ph*$WV#3G5Hq=q`MuhH^XmF83;z}Wm=d4pckOcXED$bC%} zc(Vjr{kO$QCHFNOH*ad}_F^Q1Z)3}unI@w{PdqXQBM*|k z@|xk{UusnQ+D0pDXPsjsU4z1gHKy3{r!zW_i*%hHu2j*>3Gqco5106L;6=v@SmR)2 z)qV+S%%nh6?WU~vqeIsoA+sIgSXQ=@NOxWMV4ro`aN3fW5nosyU`eR+=%I^H(YAPQ zh!-XyjL7EgzUVmQB%_BzIozgGloN>MLp_bu#b=E!d@MIS!wTf6*$GFoJ@EtsEc;|t>s&T{FN8H`oImr3^T`L+D+V`GTt36dY>$FK`)e@tQmh`11 zFxE`$Ddsj1y<3V^bDA`}Cq#MKH^arI*d5LP$|%xC;(`qWu*E0GhddS2v_nYDm{p%6 z^K?PhS3Bk6TJwPW2FoehoTf?q2Hh)sT#I8ag) zB=-jI!+)W)l=n$z@m;NMYppxh*U3eg+`(-g<%H6Y#8mePG6F<{hcUP-J9H^qluX67LZS) zt<$_x?Pe)(3v$`rMDaC!D2pUz8O=}gK^-B?$#pXL<_dMiYFnY4>jv>q8o^ooR}ZDl zyhZ|>cFe=mXr3xSWJgJ;4}T|whdGtBZ`^&MX2Uq@>UrU}(x`S$#v)!~dsXX)Q#*osjE+>tUEFYOnCQhg z-CE|o8FX)CMNZU!M`{@D7pxcbJzPfe>G2$p-g&$94Uyv@;6ZZpMQ)1Aj6aue2FVqX zZf|I6Q};Z;(BznJlgUi3aVQAQHSYtFOQsjbeDef8K*QGzR=C6NtP$nqqZ78Fb$cME zc}?Aomt-rF?8+tb?B-5J`{MKkc?N7WXQ)8`PNNWRe!*6yz&3hun zX2YPF;&%|eGVEUIl@2x;IUS(^3;^EG^yWmz6h{kk4`cWXk)P%@no;IXMo;@mNmi{_ za_U!E%Ru1jcrsf1lYx*~WEn+1b&oDGRMgg2FjT(6@^|PW@5N}j&hIqx+e!7Kr~M>9 zYpl1^ZH@IyzB+RLOrv?NM9xPn*c%n>lkdY4#v{1l%qd6U8urd|JD@yw@#@gIk~ z7z*GK;F4_N&ZxGzp%`OSm@6`aejgv+mlr(ix6 z+^>J{{KP*q|2*J)!zd8{)W6Jd@#_WerKe!EA5iiKJ?Yxk7G+*QHvO_GL$|}44gUFQ ztd+)wSA5!sGO?-bb|51@!4 zP`H)9R3tM6{%FDCU%+;#<=Bi?XXblr(+ON^PN| zH@73o)h9WBS3ccX&gKXJ(_Jzs?VBEzXj3=|-5A;zI*@an5+%!rR7~q!7^;oo&#|zk z9$GH3U&C9==_MkPcP@gk9qBJkC~BD{JYBdzw}A$Ien^gMZL5jQJ%DT|jE#mlrK%bn z^V~H@N`6qk<=V8Ym6XUm^m${@io#G6%&WR`uFCpo3XeI#j4gbV0I@SLsjmEEIYAsQ zhA>O~)(&Bx4i!OeU(D5U1~P^#d5mLT(ZUVKA(J1&sp}YT=Pd}#(7kMwyo>>yj?eyB zeQ`)$*!Z3L^~^?LEKuVd<8@fIP$iqJz;;&ZHs6AQl1A=>Anhv- z#0F(sgZft%hTQ&W2^Xt#RO>%Z@pwFYa1Aox=Ojn#Nnv$G5n+f*UnibuA%;LJ|b!86W%*m z*^nC=8jLpN`lE-OR?6}X@3qPv`kfTA%6^skbld1c_4X2qN?=!=8^ZCOHe9bnOBolP zeJsV9M(H-%UE$kN3t1Qpt?!x7x|1w*Ik1R*;9%~TRFMD%ADNr zzL>-S$B`WaZ`$1Ex#nQFCH@7Yrxg0FBN`)O7T}QjJ47r_|8T-wz74CXDS2vL)xV7x z7k{C(F+5d1q;DOv-{zx~$CN_r3Rujgc!g2Qhs_zHR(xx%zj;HL*YC)0ZI`;hfb!D6 zlPlD~cw^J{4*$XHv2ifC-tsT&LZX(_vf}za+c%JbN474ms)W(9lwbA;#Xd_>R;6NG zjh3hI#!K*9sjwXG4;JNL4~xbbHUdV z!Pi;fD<6F27lwn$R)w!F@FiFZM6RENZG#gI(ugx!)-%TC#29Lj?tvPLt#W!(R{ol(0kDvC#n9a zxB3Svub;%8jUda7m4L^H30G7)ED*OnJa}De<;*l5Z8sulkhtn9@0S{d_p6WH*$7;| zEl_z(c#+zs2o8$RU0Sd0ECjHUU^K^xW91wn&;D;VuymXi`-ws%XX5|f( ze;1z4;f>GA&oUlO7?E4>^H=^}N(>zkjA=QtSYJ@`F-DLx*eR8yjl>R!ig~sfRRF{O z7>=XVObLH+n8=$sH7GVK&z^)qhv=!3I++SpJ5pQYO`YyQbYPpOzC?GnbZM`0e$roa zsGOkwzv-_FRNVhTf62`Or@t0U^QO*K{iSvlMvE{$|GCRPAx)~w_NkAZI%zlkrO3M; z6B$M`$2j9)zmVwkoO#awbZb_8()R%gKamZ3kR z9QiNGIvd3xNu%T@Yu76KI5sM#m6rW}PP%WSBIf%l>-yKxO}hCNx)u#ev+BoN(^(v( z=r=abv|nTsi>cIU_S5pwlh22uL0R?hTV9v?Oe67DMYn(y!4WVl{IGIa3WYmu|fdA68s_sKCLw59vgcWE|!c zl%r_RnG(UPBZNL+D8uiq3ylcGyd~Vl4OZrc2Bqg;9%JPl!!;w`+&rD<>V{*Gx1HY)|q=W@jX($_txKq^4(W|m&*6|D^;8l`Tkmee|MXZ zHz)mx_wnc%qA7iY=bNNDO5b3V&}oYQh>k8xF=-)8O^=(T^~J3Rr28z-%_OTFT^2^^ zOluMRWW1-0c%fHn)%@lLXQUr{5%obu2J49@kcB_?tDW@?pFod3wNkbuZ^0_IQawYn zF&2Q3=FX$Qz=*fPU;2_u{n4RrlGRmCDGQbQtT944bd5_7rQDeJzj!V&ii$hlgf;i&xjk8=aj5}Ref#5)&o+XvDTo~{>pO* z{{tRYZ6Vfq3bnw%svQn6+-QjqqNdbJ@1*ecsgl?A&*(l@AJ==1KKhM3oFZwAlhBUk{9U--wEQl|BI3aMN$0^+J1P zt0d!-3Y0PWB{l-$P~SQnncJv*-x!1FdtxEUSNuIPJ_DoD|{>@8nT zQMMj4db|kFNI{b=&rOm$^*t@KzBi#*r0Y9w5_S}&zV0r%3f+D|Y$5$0%7!m@&I7hs zqbrha?$M*%aW}gwQtL8xqk436qz2y8L>MsK^0+COEe!4Obg?2xb$%fgIk2Z9_QR?N zz*&ba@Bg8;<6en^9>TE=`Y947nD3FqG6TPR6Wo6fis`9AMD5ERSlr^{<-k9sDOkKLk6 zJyS}RBC9FVY$&*z$SS6Nk&bYFD#CCT!BbBJ;>jaToaCT(fWbQtbPs3Ck!G~0`zH2L z&tOo>b0{(W#xrqFGGjRdkz;TdB)&P@{_ItuD9;Z}9~_OS!Z%QLmd3Ssv1~OIJWnP> zN${uu6mZKyTy#e*G+T{dp7vge7FaNzOr)&Hq@9Z-e+d~v+O|pV|V?C z59{5Z){odK^LD@*P|tkHi7ZKLkw?^;L5M0gb{gOeKF3Aa_D10e<{m1BVE(#Q};1_{ahB1b9mT^-oyS5~WihFH$PS_cF#3 z;$bxi{=kC8s4|*kfEgp}RfaUYPXQQVhoTe~c_-W&Kgs6(Swcc=2Tw-EBbxX0n%DYK zsy=Y4gC9mY6FC`d5kB}Dn4j^Zl5zL=3ildwJ6f+Y6`_qj^h|=x5uP#f6Yp|IPxfNd zahTb#Mh}vc4wSL$FJ-2tXIjI#iEWCM(V`rmYyFG3MKUiGT1yxr(R}I}D5-jTdZ#>X z@3&r;rK9<4aL!?<(fkG<#*5ig(R{8gj*iZ;`lHk%Y9L079DiWp)@YW!X>80+e^tAd zpPQAJ=aP~_`6@J;SMbI9>9^jqV55!SJOV7#(xZ>Xt>F4t4mGLG4OFs^Rr~XLi8ep( zQ>F}khsSre&mPUuXls8i!N1W^((Uxql zkvVSq@s(GP3LnsR@+bhbiG{hVkV)H{K?&a3S7ayKqoecxDUqf|Ps{Cet0vvnDA}6c z5#zlh)+ARnb*n57i`>Gdx?kJL6%xJk36i^$ubK_7j(B})bkNdhaA}Sb-E`hHdz@Q; z%~n4dMKT;JE{C+g?}D`Jm>6S4jlg&xE#4pZcweTy_Y?2ed%Q2#-fr=p-{XC-_Wt5B zydM_t-v1nakMlvH^Wv0J^3di&nP0cgwLIsr#>y%+QPx_vK|xuJxrds?e<_o^;?QFQ!LtH7r!9@?AJ@U{8e-DIUE zH2ej5p!kE?-*}IPkkC`fSr}c)S1W zSXTt|I?!@0)KL5oI^AWyOtmDwO9BsG?S%bPJOe6BWp?nZ1e1T@;N`@~HS^ko2d_5f z*Y;KU<*nc+H<-7UNWtj9$c?#s88cr))5LhOHh*foHFqj{Q1})bGw0*Wl!MF)9j7I# zrfew-gL$o7l9ew4bj9M`CCYb+dGM?0C`(iYHc17DXvVt>&4am$xnsC^#Jh8wK9uSP z^Wwq0CG}iVqtGG7Odo}!pHR%(7Cwq_%Jt{9DmXXZRUF^pBt@X;&x`x>meg@IjnpN^ zOt(rsZiuy3=WfNxBd>#>F08#%90Y`WVo5|tqQqJY_ASsY zQ4>UM+AN=3VHka|Bwec#m5^w-G4r=NQK_;WG_D_od|0SbQbIzmJ&Zn7C+|sFTE|tR zn@B#=m?_8fqKWZ8Z0T@Pml-qn)u~7BCN($$b-CaP3~4;1@ibDDINyWT$z_x=Q-0OuyAq|E(KDf4<#^1`FjIv9}1l0skAjiB{7HQy`qB=!?-Yh8P&iVA~8gD>X_}ARl`5_n^o8ybL{va`?Pr+Wd z539~E4p7rVd`a$9>>6hqFD~JCz#)vZ#+&;l+av8iBwJac@)k0)xu%Y2pXy#aRq`E1 zOn+7D^nLtQ9n%N;M|Ai{wBi+Xw@dcd{BdbL;xKDnQ$i*%o=Qp#V>j8oclhvt#q_l@ zQBOm(vMQSv@py_`sLaL=^bkZA-ke=;JuEU8`~udNlsqmOZ^YsvSN-5+Xw0=kSZ~hyrE@EiIoUoO-7;32#E&wG zV}oG0x|(N3Un;dJjBQ1^R8XzPY;WvU$aQ6P=$qG?SV9tE@q*E(N*^O~q|0rzd<-S) zbJbYO+(MOu7SVIyTP7m2sLsJ?{s%F+0_L6lPqm3)#k_hSmATRUJAyd4#8j|+U`0>Z zM^WVq#*R3Z+Nb41YR?{vHG*!DX|h7gd807hCA=8qw%Ni-b&cjamC?9d`<55UG1ej} zoV$=%($57!$+&&Fgz0POdLUtOT_OfRkd_azS*oq57W)OT{?vqiTDoRI5Z+MhJ|SH`(lSeKi*fx0fwYY)Ch17qB5z?6V8f^sw6AkNOBb zV8=!(eMM&2PTq`>usC66^hB=wu|uMp73s)PdMq|~kOYDLpzeMl9O-%cF5MHMSDXZ9 zWK|M<&!jwLP#oUg_|nijh;d%1WO?&Y$?!aa%%<-JRYv4b6zHA(k_wPQ@Ki{of-nDp z+mm?Z)3V9b&&lZUbVi3~W^`djMp7?tF#4y`zeBr{1-T}R`gaLhHkm@?2TNIGoHCry z2V`Kez}~ibXVRCqEb*)&Dg;81<)SHcGNWdm%FJJSrBgwbfrAlGH<6^ITq^r4nbgD7 zX^`tfTMh%`iZ?czkCdDvCu;Kw;r@2V^Mcksow@dM_0?B1(MIzxi71BJ!MEoO(sES+UHCsXLHAB|p($s+YP<

s|Ky1j$*>Utrl(Z(@fkSu}xNHg#>e7MfQcWAKp6 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 M) - -#ifdef HAVE_AIRPCAP_API -#include -#else -#if !defined(AIRPCAP_HANDLE__EAE405F5_0171_9592_B3C2_C19EC426AD34__DEFINED_) -#define AIRPCAP_HANDLE__EAE405F5_0171_9592_B3C2_C19EC426AD34__DEFINED_ -typedef struct _AirpcapHandle *PAirpcapHandle; -#endif /* AIRPCAP_HANDLE__EAE405F5_0171_9592_B3C2_C19EC426AD34__DEFINED_ */ -#endif /* HAVE_AIRPCAP_API */ - -#ifdef HAVE_DAG_API -#include -#endif /* HAVE_DAG_API */ - -// Working modes -#define PACKET_MODE_CAPT 0x0 ///< Capture mode -#define PACKET_MODE_STAT 0x1 ///< Statistical mode -#define PACKET_MODE_MON 0x2 ///< Monitoring mode -#define PACKET_MODE_DUMP 0x10 ///< Dump mode -#define PACKET_MODE_STAT_DUMP MODE_DUMP | MODE_STAT ///< Statistical dump Mode - - -/// Alignment macro. Defines the alignment size. -#define Packet_ALIGNMENT sizeof(int) -/// Alignment macro. Rounds up to the next even multiple of Packet_ALIGNMENT. -#define Packet_WORDALIGN(x) (((x)+(Packet_ALIGNMENT-1))&~(Packet_ALIGNMENT-1)) - -#define NdisMediumNull -1 ///< Custom linktype: NDIS doesn't provide an equivalent -#define NdisMediumCHDLC -2 ///< Custom linktype: NDIS doesn't provide an equivalent -#define NdisMediumPPPSerial -3 ///< Custom linktype: NDIS doesn't provide an equivalent -#define NdisMediumBare80211 -4 ///< Custom linktype: NDIS doesn't provide an equivalent -#define NdisMediumRadio80211 -5 ///< Custom linktype: NDIS doesn't provide an equivalent -#define NdisMediumPpi -6 ///< Custom linktype: NDIS doesn't provide an equivalent - -// Loopback behaviour definitions -#define NPF_DISABLE_LOOPBACK 1 ///< Drop the packets sent by the NPF driver -#define NPF_ENABLE_LOOPBACK 2 ///< Capture the packets sent by the NPF driver - -/*! - \brief Network type structure. - - This structure is used by the PacketGetNetType() function to return information on the current adapter's type and speed. -*/ -typedef struct NetType -{ - UINT LinkType; ///< The MAC of the current network adapter (see function PacketGetNetType() for more information) - ULONGLONG LinkSpeed; ///< The speed of the network in bits per second -}NetType; - - -//some definitions stolen from libpcap - -#ifndef BPF_MAJOR_VERSION - -/*! - \brief A BPF pseudo-assembly program. - - The program will be injected in the kernel by the PacketSetBPF() function and applied to every incoming packet. -*/ -#ifndef lib_pcap_bpf_h -struct bpf_program -{ - UINT bf_len; ///< Indicates the number of instructions of the program, i.e. the number of struct bpf_insn that will follow. - struct bpf_insn *bf_insns; ///< A pointer to the first instruction of the program. -}; - -/*! - \brief A single BPF pseudo-instruction. - - bpf_insn contains a single instruction for the BPF register-machine. It is used to send a filter program to the driver. -*/ -struct bpf_insn -{ - USHORT code; ///< Instruction type and addressing mode. - UCHAR jt; ///< Jump if true - UCHAR jf; ///< Jump if false - int k; ///< Generic field used for various purposes. -}; -#endif // lib_pcap_bpf_h - -/*! - \brief Structure that contains a couple of statistics values on the current capture. - - It is used by packet.dll to return statistics about a capture session. -*/ -struct bpf_stat -{ - UINT bs_recv; ///< Number of packets that the driver received from the network adapter - ///< from the beginning of the current capture. This value includes the packets - ///< lost by the driver. - UINT bs_drop; ///< number of packets that the driver lost from the beginning of a capture. - ///< Basically, a packet is lost when the the buffer of the driver is full. - ///< In this situation the packet cannot be stored and the driver rejects it. - UINT ps_ifdrop; ///< drops by interface. XXX not yet supported - UINT bs_capt; ///< number of packets that pass the filter, find place in the kernel buffer and - ///< thus reach the application. -}; - -/*! - \brief Packet header. - - This structure defines the header associated with every packet delivered to the application. -*/ -struct bpf_hdr -{ - struct timeval bh_tstamp; ///< The timestamp associated with the captured packet. - ///< It is stored in a TimeVal structure. - UINT bh_caplen; ///< Length of captured portion. The captured portion can be different - ///< from the original packet, because it is possible (with a proper filter) - ///< to instruct the driver to capture only a portion of the packets. - UINT bh_datalen; ///< Original length of packet - USHORT bh_hdrlen; ///< Length of bpf header (this struct plus alignment padding). In some cases, - ///< a padding could be added between the end of this structure and the packet - ///< data for performance reasons. This filed can be used to retrieve the actual data - ///< of the packet. -}; - -/*! - \brief Dump packet header. - - This structure defines the header associated with the packets in a buffer to be used with PacketSendPackets(). - It is simpler than the bpf_hdr, because it corresponds to the header associated by WinPcap and libpcap to a - packet in a dump file. This makes straightforward sending WinPcap dump files to the network. -*/ -struct dump_bpf_hdr{ - struct timeval ts; ///< Time stamp of the packet - UINT caplen; ///< Length of captured portion. The captured portion can smaller than the - ///< the original packet, because it is possible (with a proper filter) to - ///< instruct the driver to capture only a portion of the packets. - UINT len; ///< Length of the original packet (off wire). -}; - - -#endif - -struct bpf_stat; - -#define DOSNAMEPREFIX TEXT("Packet_") ///< Prefix added to the adapters device names to create the WinPcap devices -#define MAX_LINK_NAME_LENGTH 64 //< Maximum length of the devices symbolic links -#define NMAX_PACKET 65535 - -/*! - \brief Addresses of a network adapter. - - This structure is used by the PacketGetNetInfoEx() function to return the IP addresses associated with - an adapter. -*/ -typedef struct npf_if_addr { - struct sockaddr_storage IPAddress; ///< IP address. - struct sockaddr_storage SubnetMask; ///< Netmask for that address. - struct sockaddr_storage Broadcast; ///< Broadcast address. -}npf_if_addr; - - -#define ADAPTER_NAME_LENGTH 256 + 12 ///< Maximum length for the name of an adapter. The value is the same used by the IP Helper API. -#define ADAPTER_DESC_LENGTH 128 ///< Maximum length for the description of an adapter. The value is the same used by the IP Helper API. -#define MAX_MAC_ADDR_LENGTH 8 ///< Maximum length for the link layer address of an adapter. The value is the same used by the IP Helper API. -#define MAX_NETWORK_ADDRESSES 16 ///< Maximum length for the link layer address of an adapter. The value is the same used by the IP Helper API. - - -typedef struct WAN_ADAPTER_INT WAN_ADAPTER; ///< Describes an opened wan (dialup, VPN...) network adapter using the NetMon API -typedef WAN_ADAPTER *PWAN_ADAPTER; ///< Describes an opened wan (dialup, VPN...) network adapter using the NetMon API - -#define INFO_FLAG_NDIS_ADAPTER 0 ///< Flag for ADAPTER_INFO: this is a traditional ndis adapter -#define INFO_FLAG_NDISWAN_ADAPTER 1 ///< Flag for ADAPTER_INFO: this is a NdisWan adapter, and it's managed by WANPACKET -#define INFO_FLAG_DAG_CARD 2 ///< Flag for ADAPTER_INFO: this is a DAG card -#define INFO_FLAG_DAG_FILE 6 ///< Flag for ADAPTER_INFO: this is a DAG file -#define INFO_FLAG_DONT_EXPORT 8 ///< Flag for ADAPTER_INFO: when this flag is set, the adapter will not be listed or openend by winpcap. This allows to prevent exporting broken network adapters, like for example FireWire ones. -#define INFO_FLAG_AIRPCAP_CARD 16 ///< Flag for ADAPTER_INFO: this is an airpcap card -#define INFO_FLAG_NPFIM_DEVICE 32 - -/*! - \brief Describes an opened network adapter. - - This structure is the most important for the functioning of packet.dll, but the great part of its fields - should be ignored by the user, since the library offers functions that avoid to cope with low-level parameters -*/ -typedef struct _ADAPTER { - HANDLE hFile; ///< \internal Handle to an open instance of the NPF driver. - CHAR SymbolicLink[MAX_LINK_NAME_LENGTH]; ///< \internal A string containing the name of the network adapter currently opened. - int NumWrites; ///< \internal Number of times a packets written on this adapter will be repeated - ///< on the wire. - HANDLE ReadEvent; ///< A notification event associated with the read calls on the adapter. - ///< It can be passed to standard Win32 functions (like WaitForSingleObject - ///< or WaitForMultipleObjects) to wait until the driver's buffer contains some - ///< data. It is particularly useful in GUI applications that need to wait - ///< concurrently on several events. In Windows NT/2000 the PacketSetMinToCopy() - ///< function can be used to define the minimum amount of data in the kernel buffer - ///< that will cause the event to be signalled. - - UINT ReadTimeOut; ///< \internal The amount of time after which a read on the driver will be released and - ///< ReadEvent will be signaled, also if no packets were captured - CHAR Name[ADAPTER_NAME_LENGTH]; - PWAN_ADAPTER pWanAdapter; - UINT Flags; ///< Adapter's flags. Tell if this adapter must be treated in a different way, using the Netmon API or the dagc API. - -#ifdef HAVE_AIRPCAP_API - PAirpcapHandle AirpcapAd; -#endif // HAVE_AIRPCAP_API - -#ifdef HAVE_NPFIM_API - void* NpfImHandle; -#endif // HAVE_NPFIM_API - -#ifdef HAVE_DAG_API - dagc_t *pDagCard; ///< Pointer to the dagc API adapter descriptor for this adapter - PCHAR DagBuffer; ///< Pointer to the buffer with the packets that is received from the DAG card - struct timeval DagReadTimeout; ///< Read timeout. The dagc API requires a timeval structure - unsigned DagFcsLen; ///< Length of the frame check sequence attached to any packet by the card. Obtained from the registry - DWORD DagFastProcess; ///< True if the user requests fast capture processing on this card. Higher level applications can use this value to provide a faster but possibly unprecise capture (for example, libpcap doesn't convert the timestamps). -#endif // HAVE_DAG_API -} ADAPTER, *LPADAPTER; - -/*! - \brief Structure that contains a group of packets coming from the driver. - - This structure defines the header associated with every packet delivered to the application. -*/ -typedef struct _PACKET { - HANDLE hEvent; ///< \deprecated Still present for compatibility with old applications. - OVERLAPPED OverLapped; ///< \deprecated Still present for compatibility with old applications. - PVOID Buffer; ///< Buffer with containing the packets. See the PacketReceivePacket() for - ///< details about the organization of the data in this buffer - UINT Length; ///< Length of the buffer - DWORD ulBytesReceived; ///< Number of valid bytes present in the buffer, i.e. amount of data - ///< received by the last call to PacketReceivePacket() - BOOLEAN bIoComplete; ///< \deprecated Still present for compatibility with old applications. -} PACKET, *LPPACKET; - -/*! - \brief Structure containing an OID request. - - It is used by the PacketRequest() function to send an OID to the interface card driver. - It can be used, for example, to retrieve the status of the error counters on the adapter, its MAC address, - the list of the multicast groups defined on it, and so on. -*/ -struct _PACKET_OID_DATA { - ULONG Oid; ///< OID code. See the Microsoft DDK documentation or the file ntddndis.h - ///< for a complete list of valid codes. - ULONG Length; ///< Length of the data field - UCHAR Data[1]; ///< variable-lenght field that contains the information passed to or received - ///< from the adapter. -}; -typedef struct _PACKET_OID_DATA PACKET_OID_DATA, *PPACKET_OID_DATA; - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * @} - */ - -/* -BOOLEAN QueryWinPcapRegistryStringA(CHAR *SubKeyName, - CHAR *Value, - UINT *pValueLen, - CHAR *DefaultVal); - -BOOLEAN QueryWinPcapRegistryStringW(WCHAR *SubKeyName, - WCHAR *Value, - UINT *pValueLen, - WCHAR *DefaultVal); -*/ - -//--------------------------------------------------------------------------- -// EXPORTED FUNCTIONS -//--------------------------------------------------------------------------- - -PCHAR PacketGetVersion(); -PCHAR PacketGetDriverVersion(); -BOOLEAN PacketSetMinToCopy(LPADAPTER AdapterObject,int nbytes); -BOOLEAN PacketSetNumWrites(LPADAPTER AdapterObject,int nwrites); -BOOLEAN PacketSetMode(LPADAPTER AdapterObject,int mode); -BOOLEAN PacketSetReadTimeout(LPADAPTER AdapterObject,int timeout); -BOOLEAN PacketSetBpf(LPADAPTER AdapterObject,struct bpf_program *fp); -BOOLEAN PacketSetLoopbackBehavior(LPADAPTER AdapterObject, UINT LoopbackBehavior); -INT PacketSetSnapLen(LPADAPTER AdapterObject,int snaplen); -BOOLEAN PacketGetStats(LPADAPTER AdapterObject,struct bpf_stat *s); -BOOLEAN PacketGetStatsEx(LPADAPTER AdapterObject,struct bpf_stat *s); -BOOLEAN PacketSetBuff(LPADAPTER AdapterObject,int dim); -BOOLEAN PacketGetNetType (LPADAPTER AdapterObject,NetType *type); -LPADAPTER PacketOpenAdapter(PCHAR AdapterName); -BOOLEAN PacketSendPacket(LPADAPTER AdapterObject,LPPACKET pPacket,BOOLEAN Sync); -INT PacketSendPackets(LPADAPTER AdapterObject,PVOID PacketBuff,ULONG Size, BOOLEAN Sync); -LPPACKET PacketAllocatePacket(void); -VOID PacketInitPacket(LPPACKET lpPacket,PVOID Buffer,UINT Length); -VOID PacketFreePacket(LPPACKET lpPacket); -BOOLEAN PacketReceivePacket(LPADAPTER AdapterObject,LPPACKET lpPacket,BOOLEAN Sync); -BOOLEAN PacketSetHwFilter(LPADAPTER AdapterObject,ULONG Filter); -BOOLEAN PacketGetAdapterNames(PTSTR pStr,PULONG BufferSize); -BOOLEAN PacketGetNetInfoEx(PCHAR AdapterName, npf_if_addr* buffer, PLONG NEntries); -BOOLEAN PacketRequest(LPADAPTER AdapterObject,BOOLEAN Set,PPACKET_OID_DATA OidData); -HANDLE PacketGetReadEvent(LPADAPTER AdapterObject); -BOOLEAN PacketSetDumpName(LPADAPTER AdapterObject, void *name, int len); -BOOLEAN PacketSetDumpLimits(LPADAPTER AdapterObject, UINT maxfilesize, UINT maxnpacks); -BOOLEAN PacketIsDumpEnded(LPADAPTER AdapterObject, BOOLEAN sync); -BOOL PacketStopDriver(); -VOID PacketCloseAdapter(LPADAPTER lpAdapter); -BOOLEAN PacketStartOem(PCHAR errorString, UINT errorStringLength); -BOOLEAN PacketStartOemEx(PCHAR errorString, UINT errorStringLength, ULONG flags); -PAirpcapHandle PacketGetAirPcapHandle(LPADAPTER AdapterObject); - -// -// Used by PacketStartOemEx -// -#define PACKET_START_OEM_NO_NETMON 0x00000001 - -#ifdef __cplusplus -} -#endif - -#endif //__PACKET32 diff --git a/libs/WinPcap-413-173-b4/Include/pcap/ipnet.h b/libs/WinPcap-413-173-b4/Include/pcap/ipnet.h deleted file mode 100644 index 53308470..00000000 --- a/libs/WinPcap-413-173-b4/Include/pcap/ipnet.h +++ /dev/null @@ -1,43 +0,0 @@ -/*- - * Copyright (c) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997 - * The Regents of the University of California. All rights reserved. - * - * This code is derived from the Stanford/CMU enet packet filter, - * (net/enet.c) distributed as part of 4.3BSD, and code contributed - * to Berkeley by Steven McCanne and Van Jacobson both of Lawrence - * Berkeley Laboratory. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#define IPH_AF_INET 2 /* Matches Solaris's AF_INET */ -#define IPH_AF_INET6 26 /* Matches Solaris's AF_INET6 */ - -#define IPNET_OUTBOUND 1 -#define IPNET_INBOUND 2 diff --git a/libs/WinPcap-413-173-b4/Include/pcap/nflog.h b/libs/WinPcap-413-173-b4/Include/pcap/nflog.h deleted file mode 100644 index 388dd0c5..00000000 --- a/libs/WinPcap-413-173-b4/Include/pcap/nflog.h +++ /dev/null @@ -1,92 +0,0 @@ -/* - * Copyright (c) 2013, Petar Alilovic, - * Faculty of Electrical Engineering and Computing, University of Zagreb - * All rights reserved - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH - * DAMAGE. - */ - -#ifndef _PCAP_NFLOG_H__ -#define _PCAP_NFLOG_H__ - -/* - * Structure of an NFLOG header and TLV parts, as described at - * http://www.tcpdump.org/linktypes/LINKTYPE_NFLOG.html - * - * The NFLOG header is big-endian. - * - * The TLV length and type are in host byte order. The value is either - * big-endian or is an array of bytes in some externally-specified byte - * order (text string, link-layer address, link-layer header, packet - * data, etc.). - */ -typedef struct nflog_hdr { - u_int8_t nflog_family; /* address family */ - u_int8_t nflog_version; /* version */ - u_int16_t nflog_rid; /* resource ID */ -} nflog_hdr_t; - -typedef struct nflog_tlv { - u_int16_t tlv_length; /* tlv length */ - u_int16_t tlv_type; /* tlv type */ - /* value follows this */ -} nflog_tlv_t; - -typedef struct nflog_packet_hdr { - u_int16_t hw_protocol; /* hw protocol */ - u_int8_t hook; /* netfilter hook */ - u_int8_t pad; /* padding to 32 bits */ -} nflog_packet_hdr_t; - -typedef struct nflog_hwaddr { - u_int16_t hw_addrlen; /* address length */ - u_int16_t pad; /* padding to 32-bit boundary */ - u_int8_t hw_addr[8]; /* address, up to 8 bytes */ -} nflog_hwaddr_t; - -typedef struct nflog_timestamp { - u_int64_t sec; - u_int64_t usec; -} nflog_timestamp_t; - -/* - * TLV types. - */ -#define NFULA_PACKET_HDR 1 /* nflog_packet_hdr_t */ -#define NFULA_MARK 2 /* packet mark from skbuff */ -#define NFULA_TIMESTAMP 3 /* nflog_timestamp_t for skbuff's time stamp */ -#define NFULA_IFINDEX_INDEV 4 /* ifindex of device on which packet received (possibly bridge group) */ -#define NFULA_IFINDEX_OUTDEV 5 /* ifindex of device on which packet transmitted (possibly bridge group) */ -#define NFULA_IFINDEX_PHYSINDEV 6 /* ifindex of physical device on which packet received (not bridge group) */ -#define NFULA_IFINDEX_PHYSOUTDEV 7 /* ifindex of physical device on which packet transmitted (not bridge group) */ -#define NFULA_HWADDR 8 /* nflog_hwaddr_t for hardware address */ -#define NFULA_PAYLOAD 9 /* packet payload */ -#define NFULA_PREFIX 10 /* text string - null-terminated, count includes NUL */ -#define NFULA_UID 11 /* UID owning socket on which packet was sent/received */ -#define NFULA_SEQ 12 /* sequence number of packets on this NFLOG socket */ -#define NFULA_SEQ_GLOBAL 13 /* sequence number of pakets on all NFLOG sockets */ -#define NFULA_GID 14 /* GID owning socket on which packet was sent/received */ -#define NFULA_HWTYPE 15 /* ARPHRD_ type of skbuff's device */ -#define NFULA_HWHEADER 16 /* skbuff's MAC-layer header */ -#define NFULA_HWLEN 17 /* length of skbuff's MAC-layer header */ - -#endif diff --git a/libs/WinPcap-413-173-b4/Include/pcap/pcap.h b/libs/WinPcap-413-173-b4/Include/pcap/pcap.h deleted file mode 100644 index 4c43d9f4..00000000 --- a/libs/WinPcap-413-173-b4/Include/pcap/pcap.h +++ /dev/null @@ -1,485 +0,0 @@ -/* -*- Mode: c; tab-width: 8; indent-tabs-mode: 1; c-basic-offset: 8; -*- */ -/* - * Copyright (c) 1993, 1994, 1995, 1996, 1997 - * The Regents of the University of California. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the Computer Systems - * Engineering Group at Lawrence Berkeley Laboratory. - * 4. Neither the name of the University nor of the Laboratory may be used - * to endorse or promote products derived from this software without - * specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#ifndef lib_pcap_pcap_h -#define lib_pcap_pcap_h - -#if defined(_WIN32) - #include -#elif defined(MSDOS) - #include - #include /* u_int, u_char etc. */ -#else /* UN*X */ - #include - #include -#endif /* _WIN32/MSDOS/UN*X */ - -#ifndef PCAP_DONT_INCLUDE_PCAP_BPF_H -#include -#endif - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/* - * Version number of the current version of the pcap file format. - * - * NOTE: this is *NOT* the version number of the libpcap library. - * To fetch the version information for the version of libpcap - * you're using, use pcap_lib_version(). - */ -#define PCAP_VERSION_MAJOR 2 -#define PCAP_VERSION_MINOR 4 - -#define PCAP_ERRBUF_SIZE 256 - -/* - * Compatibility for systems that have a bpf.h that - * predates the bpf typedefs for 64-bit support. - */ -#if BPF_RELEASE - 0 < 199406 -typedef int bpf_int32; -typedef u_int bpf_u_int32; -#endif - -typedef struct pcap pcap_t; -typedef struct pcap_dumper pcap_dumper_t; -typedef struct pcap_if pcap_if_t; -typedef struct pcap_addr pcap_addr_t; - -/* - * The first record in the file contains saved values for some - * of the flags used in the printout phases of tcpdump. - * Many fields here are 32 bit ints so compilers won't insert unwanted - * padding; these files need to be interchangeable across architectures. - * - * Do not change the layout of this structure, in any way (this includes - * changes that only affect the length of fields in this structure). - * - * Also, do not change the interpretation of any of the members of this - * structure, in any way (this includes using values other than - * LINKTYPE_ values, as defined in "savefile.c", in the "linktype" - * field). - * - * Instead: - * - * introduce a new structure for the new format, if the layout - * of the structure changed; - * - * send mail to "tcpdump-workers@lists.tcpdump.org", requesting - * a new magic number for your new capture file format, and, when - * you get the new magic number, put it in "savefile.c"; - * - * use that magic number for save files with the changed file - * header; - * - * make the code in "savefile.c" capable of reading files with - * the old file header as well as files with the new file header - * (using the magic number to determine the header format). - * - * Then supply the changes by forking the branch at - * - * https://github.com/the-tcpdump-group/libpcap/issues - * - * and issuing a pull request, so that future versions of libpcap and - * programs that use it (such as tcpdump) will be able to read your new - * capture file format. - */ -struct pcap_file_header { - bpf_u_int32 magic; - u_short version_major; - u_short version_minor; - bpf_int32 thiszone; /* gmt to local correction */ - bpf_u_int32 sigfigs; /* accuracy of timestamps */ - bpf_u_int32 snaplen; /* max length saved portion of each pkt */ - bpf_u_int32 linktype; /* data link type (LINKTYPE_*) */ -}; - -/* - * Macros for the value returned by pcap_datalink_ext(). - * - * If LT_FCS_LENGTH_PRESENT(x) is true, the LT_FCS_LENGTH(x) macro - * gives the FCS length of packets in the capture. - */ -#define LT_FCS_LENGTH_PRESENT(x) ((x) & 0x04000000) -#define LT_FCS_LENGTH(x) (((x) & 0xF0000000) >> 28) -#define LT_FCS_DATALINK_EXT(x) ((((x) & 0xF) << 28) | 0x04000000) - -typedef enum { - PCAP_D_INOUT = 0, - PCAP_D_IN, - PCAP_D_OUT -} pcap_direction_t; - -/* - * Generic per-packet information, as supplied by libpcap. - * - * The time stamp can and should be a "struct timeval", regardless of - * whether your system supports 32-bit tv_sec in "struct timeval", - * 64-bit tv_sec in "struct timeval", or both if it supports both 32-bit - * and 64-bit applications. The on-disk format of savefiles uses 32-bit - * tv_sec (and tv_usec); this structure is irrelevant to that. 32-bit - * and 64-bit versions of libpcap, even if they're on the same platform, - * should supply the appropriate version of "struct timeval", even if - * that's not what the underlying packet capture mechanism supplies. - */ -struct pcap_pkthdr { - struct timeval ts; /* time stamp */ - bpf_u_int32 caplen; /* length of portion present */ - bpf_u_int32 len; /* length this packet (off wire) */ -}; - -/* - * As returned by the pcap_stats() - */ -struct pcap_stat { - u_int ps_recv; /* number of packets received */ - u_int ps_drop; /* number of packets dropped */ - u_int ps_ifdrop; /* drops by interface -- only supported on some platforms */ -#ifdef _WIN32 - u_int bs_capt; /* number of packets that reach the application */ -#endif /* _WIN32 */ -}; - -#ifdef MSDOS -/* - * As returned by the pcap_stats_ex() - */ -struct pcap_stat_ex { - u_long rx_packets; /* total packets received */ - u_long tx_packets; /* total packets transmitted */ - u_long rx_bytes; /* total bytes received */ - u_long tx_bytes; /* total bytes transmitted */ - u_long rx_errors; /* bad packets received */ - u_long tx_errors; /* packet transmit problems */ - u_long rx_dropped; /* no space in Rx buffers */ - u_long tx_dropped; /* no space available for Tx */ - u_long multicast; /* multicast packets received */ - u_long collisions; - - /* detailed rx_errors: */ - u_long rx_length_errors; - u_long rx_over_errors; /* receiver ring buff overflow */ - u_long rx_crc_errors; /* recv'd pkt with crc error */ - u_long rx_frame_errors; /* recv'd frame alignment error */ - u_long rx_fifo_errors; /* recv'r fifo overrun */ - u_long rx_missed_errors; /* recv'r missed packet */ - - /* detailed tx_errors */ - u_long tx_aborted_errors; - u_long tx_carrier_errors; - u_long tx_fifo_errors; - u_long tx_heartbeat_errors; - u_long tx_window_errors; - }; -#endif - -/* - * Item in a list of interfaces. - */ -struct pcap_if { - struct pcap_if *next; - char *name; /* name to hand to "pcap_open_live()" */ - char *description; /* textual description of interface, or NULL */ - struct pcap_addr *addresses; - bpf_u_int32 flags; /* PCAP_IF_ interface flags */ -}; - -#define PCAP_IF_LOOPBACK 0x00000001 /* interface is loopback */ -#define PCAP_IF_UP 0x00000002 /* interface is up */ -#define PCAP_IF_RUNNING 0x00000004 /* interface is running */ - -/* - * Representation of an interface address. - */ -struct pcap_addr { - struct pcap_addr *next; - struct sockaddr *addr; /* address */ - struct sockaddr *netmask; /* netmask for that address */ - struct sockaddr *broadaddr; /* broadcast address for that address */ - struct sockaddr *dstaddr; /* P2P destination address for that address */ -}; - -typedef void (*pcap_handler)(u_char *, const struct pcap_pkthdr *, - const u_char *); - -/* - * Error codes for the pcap API. - * These will all be negative, so you can check for the success or - * failure of a call that returns these codes by checking for a - * negative value. - */ -#define PCAP_ERROR -1 /* generic error code */ -#define PCAP_ERROR_BREAK -2 /* loop terminated by pcap_breakloop */ -#define PCAP_ERROR_NOT_ACTIVATED -3 /* the capture needs to be activated */ -#define PCAP_ERROR_ACTIVATED -4 /* the operation can't be performed on already activated captures */ -#define PCAP_ERROR_NO_SUCH_DEVICE -5 /* no such device exists */ -#define PCAP_ERROR_RFMON_NOTSUP -6 /* this device doesn't support rfmon (monitor) mode */ -#define PCAP_ERROR_NOT_RFMON -7 /* operation supported only in monitor mode */ -#define PCAP_ERROR_PERM_DENIED -8 /* no permission to open the device */ -#define PCAP_ERROR_IFACE_NOT_UP -9 /* interface isn't up */ -#define PCAP_ERROR_CANTSET_TSTAMP_TYPE -10 /* this device doesn't support setting the time stamp type */ -#define PCAP_ERROR_PROMISC_PERM_DENIED -11 /* you don't have permission to capture in promiscuous mode */ -#define PCAP_ERROR_TSTAMP_PRECISION_NOTSUP -12 /* the requested time stamp precision is not supported */ - -/* - * Warning codes for the pcap API. - * These will all be positive and non-zero, so they won't look like - * errors. - */ -#define PCAP_WARNING 1 /* generic warning code */ -#define PCAP_WARNING_PROMISC_NOTSUP 2 /* this device doesn't support promiscuous mode */ -#define PCAP_WARNING_TSTAMP_TYPE_NOTSUP 3 /* the requested time stamp type is not supported */ - -/* - * Value to pass to pcap_compile() as the netmask if you don't know what - * the netmask is. - */ -#define PCAP_NETMASK_UNKNOWN 0xffffffff - -char *pcap_lookupdev(char *); -int pcap_lookupnet(const char *, bpf_u_int32 *, bpf_u_int32 *, char *); - -pcap_t *pcap_create(const char *, char *); -int pcap_set_snaplen(pcap_t *, int); -int pcap_set_promisc(pcap_t *, int); -int pcap_can_set_rfmon(pcap_t *); -int pcap_set_rfmon(pcap_t *, int); -int pcap_set_timeout(pcap_t *, int); -int pcap_set_tstamp_type(pcap_t *, int); -int pcap_set_immediate_mode(pcap_t *, int); -int pcap_set_buffer_size(pcap_t *, int); -int pcap_set_tstamp_precision(pcap_t *, int); -int pcap_get_tstamp_precision(pcap_t *); -int pcap_activate(pcap_t *); - -int pcap_list_tstamp_types(pcap_t *, int **); -void pcap_free_tstamp_types(int *); -int pcap_tstamp_type_name_to_val(const char *); -const char *pcap_tstamp_type_val_to_name(int); -const char *pcap_tstamp_type_val_to_description(int); - -/* - * Time stamp types. - * Not all systems and interfaces will necessarily support all of these. - * - * A system that supports PCAP_TSTAMP_HOST is offering time stamps - * provided by the host machine, rather than by the capture device, - * but not committing to any characteristics of the time stamp; - * it will not offer any of the PCAP_TSTAMP_HOST_ subtypes. - * - * PCAP_TSTAMP_HOST_LOWPREC is a time stamp, provided by the host machine, - * that's low-precision but relatively cheap to fetch; it's normally done - * using the system clock, so it's normally synchronized with times you'd - * fetch from system calls. - * - * PCAP_TSTAMP_HOST_HIPREC is a time stamp, provided by the host machine, - * that's high-precision; it might be more expensive to fetch. It might - * or might not be synchronized with the system clock, and might have - * problems with time stamps for packets received on different CPUs, - * depending on the platform. - * - * PCAP_TSTAMP_ADAPTER is a high-precision time stamp supplied by the - * capture device; it's synchronized with the system clock. - * - * PCAP_TSTAMP_ADAPTER_UNSYNCED is a high-precision time stamp supplied by - * the capture device; it's not synchronized with the system clock. - * - * Note that time stamps synchronized with the system clock can go - * backwards, as the system clock can go backwards. If a clock is - * not in sync with the system clock, that could be because the - * system clock isn't keeping accurate time, because the other - * clock isn't keeping accurate time, or both. - * - * Note that host-provided time stamps generally correspond to the - * time when the time-stamping code sees the packet; this could - * be some unknown amount of time after the first or last bit of - * the packet is received by the network adapter, due to batching - * of interrupts for packet arrival, queueing delays, etc.. - */ -#define PCAP_TSTAMP_HOST 0 /* host-provided, unknown characteristics */ -#define PCAP_TSTAMP_HOST_LOWPREC 1 /* host-provided, low precision */ -#define PCAP_TSTAMP_HOST_HIPREC 2 /* host-provided, high precision */ -#define PCAP_TSTAMP_ADAPTER 3 /* device-provided, synced with the system clock */ -#define PCAP_TSTAMP_ADAPTER_UNSYNCED 4 /* device-provided, not synced with the system clock */ - -/* - * Time stamp resolution types. - * Not all systems and interfaces will necessarily support all of these - * resolutions when doing live captures; all of them can be requested - * when reading a savefile. - */ -#define PCAP_TSTAMP_PRECISION_MICRO 0 /* use timestamps with microsecond precision, default */ -#define PCAP_TSTAMP_PRECISION_NANO 1 /* use timestamps with nanosecond precision */ - -pcap_t *pcap_open_live(const char *, int, int, int, char *); -pcap_t *pcap_open_dead(int, int); -pcap_t *pcap_open_dead_with_tstamp_precision(int, int, u_int); -pcap_t *pcap_open_offline_with_tstamp_precision(const char *, u_int, char *); -pcap_t *pcap_open_offline(const char *, char *); -#if defined(_WIN32) -pcap_t *pcap_hopen_offline_with_tstamp_precision(intptr_t, u_int, char *); -pcap_t *pcap_hopen_offline(intptr_t, char *); -#if !defined(LIBPCAP_EXPORTS) -#define pcap_fopen_offline_with_tstamp_precision(f,p,b) \ - pcap_hopen_offline_with_tstamp_precision(_get_osfhandle(_fileno(f)), p, b) -#define pcap_fopen_offline(f,b) \ - pcap_hopen_offline(_get_osfhandle(_fileno(f)), b) -#else /*LIBPCAP_EXPORTS*/ -static pcap_t *pcap_fopen_offline_with_tstamp_precision(FILE *, u_int, char *); -static pcap_t *pcap_fopen_offline(FILE *, char *); -#endif -#else /*_WIN32*/ -pcap_t *pcap_fopen_offline_with_tstamp_precision(FILE *, u_int, char *); -pcap_t *pcap_fopen_offline(FILE *, char *); -#endif /*_WIN32*/ - -void pcap_close(pcap_t *); -int pcap_loop(pcap_t *, int, pcap_handler, u_char *); -int pcap_dispatch(pcap_t *, int, pcap_handler, u_char *); -const u_char* - pcap_next(pcap_t *, struct pcap_pkthdr *); -int pcap_next_ex(pcap_t *, struct pcap_pkthdr **, const u_char **); -void pcap_breakloop(pcap_t *); -int pcap_stats(pcap_t *, struct pcap_stat *); -int pcap_setfilter(pcap_t *, struct bpf_program *); -int pcap_setdirection(pcap_t *, pcap_direction_t); -int pcap_getnonblock(pcap_t *, char *); -int pcap_setnonblock(pcap_t *, int, char *); -int pcap_inject(pcap_t *, const void *, size_t); -int pcap_sendpacket(pcap_t *, const u_char *, int); -const char *pcap_statustostr(int); -const char *pcap_strerror(int); -char *pcap_geterr(pcap_t *); -void pcap_perror(pcap_t *, char *); -int pcap_compile(pcap_t *, struct bpf_program *, const char *, int, - bpf_u_int32); -int pcap_compile_nopcap(int, int, struct bpf_program *, - const char *, int, bpf_u_int32); -void pcap_freecode(struct bpf_program *); -int pcap_offline_filter(const struct bpf_program *, - const struct pcap_pkthdr *, const u_char *); -int pcap_datalink(pcap_t *); -int pcap_datalink_ext(pcap_t *); -int pcap_list_datalinks(pcap_t *, int **); -int pcap_set_datalink(pcap_t *, int); -void pcap_free_datalinks(int *); -int pcap_datalink_name_to_val(const char *); -const char *pcap_datalink_val_to_name(int); -const char *pcap_datalink_val_to_description(int); -int pcap_snapshot(pcap_t *); -int pcap_is_swapped(pcap_t *); -int pcap_major_version(pcap_t *); -int pcap_minor_version(pcap_t *); - -/* XXX */ -FILE *pcap_file(pcap_t *); -int pcap_fileno(pcap_t *); - -pcap_dumper_t *pcap_dump_open(pcap_t *, const char *); -pcap_dumper_t *pcap_dump_fopen(pcap_t *, FILE *fp); -pcap_dumper_t *pcap_dump_open_append(pcap_t *, const char *); -FILE *pcap_dump_file(pcap_dumper_t *); -long pcap_dump_ftell(pcap_dumper_t *); -int pcap_dump_flush(pcap_dumper_t *); -void pcap_dump_close(pcap_dumper_t *); -void pcap_dump(u_char *, const struct pcap_pkthdr *, const u_char *); - -int pcap_findalldevs(pcap_if_t **, char *); -void pcap_freealldevs(pcap_if_t *); - -const char *pcap_lib_version(void); - -/* - * On at least some versions of NetBSD and QNX, we don't want to declare - * bpf_filter() here, as it's also be declared in , with a - * different signature, but, on other BSD-flavored UN*Xes, it's not - * declared in , so we *do* want to declare it here, so it's - * declared when we build pcap-bpf.c. - */ -#if !defined(__NetBSD__) && !defined(__QNX__) -u_int bpf_filter(const struct bpf_insn *, const u_char *, u_int, u_int); -#endif -int bpf_validate(const struct bpf_insn *f, int len); -char *bpf_image(const struct bpf_insn *, int); -void bpf_dump(const struct bpf_program *, int); - -#if defined(_WIN32) - -/* - * Win32 definitions - */ - -int pcap_setbuff(pcap_t *p, int dim); -int pcap_setmode(pcap_t *p, int mode); -int pcap_setmintocopy(pcap_t *p, int size); -struct _ADAPTER* pcap_get_adapter(pcap_t *p); - -#ifdef WPCAP -/* Include file with the wpcap-specific extensions */ -#include -#endif /* WPCAP */ - -#define MODE_CAPT 0 -#define MODE_STAT 1 -#define MODE_MON 2 - -#elif defined(MSDOS) - -/* - * MS-DOS definitions - */ - -int pcap_stats_ex (pcap_t *, struct pcap_stat_ex *); -void pcap_set_wait (pcap_t *p, void (*yield)(void), int wait); -u_long pcap_mac_packets (void); - -#else /* UN*X */ - -/* - * UN*X definitions - */ - -int pcap_get_selectable_fd(pcap_t *); - -#endif /* _WIN32/MSDOS/UN*X */ - -#ifdef __cplusplus -} -#endif - -#endif /* lib_pcap_pcap_h */ diff --git a/libs/WinPcap-413-173-b4/Lib/Packet.lib b/libs/WinPcap-413-173-b4/Lib/Packet.lib deleted file mode 100644 index 34bb7b3232a02ed691711af4293d90aaa7b1973d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8446 zcmcIpOK%iM5U#a(Wg*7K@AqO*9v5Q6E;cBN{3Nzm8*6t-#D!(NI}W4l?o4LKB%C5~ zL^*Ke2Ov%yIOd3Q;(!o`h_j{q0Sj@+DWrOPreD)DtQmWx^7d3!*Vo-s)m7a-`>o+t z?tYj4CL=#H+3d{p^rhLEtjwSGUuS0L{N|lB04xD?xd7dd0eW5o3}2-*xCcO}zeH*H z8S;@v-cuUg0wB~oL22kV0HHoKNoZt*Qtu;_BaJ_x)Ym{c(#S(fV~9s+^bMuV6ab;Y z0iUqnAkx4brOD?2geKlnnw-aXr2dzbCbp4}H1L#C2C)f^9MtD4OyRTNO&g<8$77@n!Ktjeg)TEp^m+9IFIueqkyuE?jF1+!w} z;_1vPBC4`fvzw-N;baNbE}Guzuh*?_fH{mnQ z4bv;#cg&C`ZZM;EDDZOlCd7^c2zNqs+7reHg@Vix|XMY6jT%>;%L_z z+qPzAINm_QY_D65lD%X*_vP7KSI4e?EeJ&y+XTt*xp53n7knkU2qDz;T#-;Q5b}A=!XF~3Mb(#9D(ETIrP8@ z_zZgC3}j#uPQw(8!7z-#5DsqwQqYmuMrRPQ`rTW%KZf^X@}+26@^`_g&&&AQ^oC|a z!A5y>BVoNmVS`$c8x`xtQZ40#6OhKc)f#|y)udZ(-U)5$JS9^@JQ=eLi{Y{;?cmCm zAC6W(gy~KY*cDP3V?~7_8VGG$gxA_+S?|!Ui7NWtS;;L$Vebl8VIQs1q%^5|shC1# zUlk>y$BO)r->Smc%}McLrLW-0VTm>|3SO=Bh)K(0?bCOCv~A}ZteVZ zzDQp&>tW-M;Kl!)hwjA-R@Lx~^A`gVCO*KU8|?awPW+vR=@-7bqO1)Q1lN9O*$GGPVu~W;_qj8tvVH)0!K>=?pko zqJs=zIyufEd@Lo{L#$(^!QKhhCcYiyxtGtiJukVKz2e_Y5HIOydC8wRCOTHodP!B7 z0ci?eaw!lIFTumU^bjv0b`SdNxART0WW#lixI_@#u+3GQy)3L6jjg{CA#T-TVk;Lc z6Y)b5TjC?cRyN=hy*I&&|9gK_)`DUK!_Ad;Zv zf`4WxD~Z=7c;CUkns^i!;CQpmoh2qWba6E0tiw@0VPA=v-)W90o}dIc-fVMz7xgia z!PV^MX!5a)g9u*Q9$q#mU6ikf7h|ovDnIiD_Z~@*Vj}JgpBXEI1pvF`uBN8gV>JZ@eeGZEA%~2VTT%ZV0 yyxFF&#LR3=LgKeF9Ap1c7k45Vm+-{9o+OBImEMGe7~CKo7TTnM#_y#>wEqEMru4=D diff --git a/libs/WinPcap-413-173-b4/Lib/wpcap.lib b/libs/WinPcap-413-173-b4/Lib/wpcap.lib deleted file mode 100644 index 59152fafa9dc4719fe50cbb3c094a63ab2072e03..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19144 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 Xys(OHoZ^W)q9ekZP+02XiD3N)5oFSe diff --git a/libs/WinPcap-413-173-b4/Lib/x64/wpcap.lib b/libs/WinPcap-413-173-b4/Lib/x64/wpcap.lib deleted file mode 100644 index e81d334055ce249825364ffd58b46c7fa755d8b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18726 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 diff --git a/libs/WinPcap-413-173-b4/docs/html/Packet_8h.html b/libs/WinPcap-413-173-b4/docs/html/Packet_8h.html deleted file mode 100644 index 26909883..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/Packet_8h.html +++ /dev/null @@ -1,333 +0,0 @@ - - - - - - -WinPcap: Packet.h File Reference - - - - - - -

-
- -
-
Packet.h File Reference
-
-
-
#include "win_bpf.h"
-
-

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Data Structures

struct  packet_file_header
 Header of a libpcap dump file. More...
 
struct  sf_pkthdr
 Header associated to a packet in the driver's buffer when the driver is in dump mode. Similar to the bpf_hdr structure, but simpler. More...
 
struct  _PACKET_OID_DATA
 Structure containing an OID request. More...
 
struct  _INTERNAL_REQUEST
 Stores an OID request. More...
 
struct  _PACKET_RESERVED
 Contains a NDIS packet. More...
 
struct  _DEVICE_EXTENSION
 Port device extension. More...
 
struct  __CPU_Private_Data
 Kernel buffer of each CPU. More...
 
struct  _OPEN_INSTANCE
 Contains the state of a running instance of the NPF driver. More...
 
struct  PacketHeader
 Structure prepended to each packet in the kernel buffer pool. More...
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Macros

#define MAX_REQUESTS   32
 Maximum number of simultaneous IOCTL requests. More...
 
#define Packet_ALIGNMENT   sizeof(int)
 Alignment macro. Defines the alignment size. More...
 
#define Packet_WORDALIGN(x)   (((x)+(Packet_ALIGNMENT-1))&~(Packet_ALIGNMENT-1))
 even multiple of Packet_ALIGNMENT. More...
 
#define KERNEL_EVENT_NAMESPACE   L"\\BaseNamedObjects\\"
 
#define MODE_CAPT   0x0
 Capture working mode. More...
 
#define MODE_STAT   0x1
 Statistical working mode. More...
 
#define MODE_MON   0x2
 Kernel monitoring mode. More...
 
#define MODE_DUMP   0x10
 Kernel dump working mode. More...
 
#define IMMEDIATE   1
 Immediate timeout. Forces a read call to return immediately. More...
 
#define NDIS_FLAGS_SKIP_LOOPBACK_W2K   0x400
 This is an undocumented flag for NdisSetPacketFlags() that allows to disable loopback reception. More...
 
#define TCPDUMP_MAGIC   0xa1b2c3d4
 Libpcap magic number. Used by programs like tcpdump to recognize a driver's generated dump file. More...
 
#define PCAP_VERSION_MAJOR   2
 Major libpcap version of the dump file. Used by programs like tcpdump to recognize a driver's generated dump file. More...
 
#define PCAP_VERSION_MINOR   4
 Minor libpcap version of the dump file. Used by programs like tcpdump to recognize a driver's generated dump file. More...
 
#define NPF_DISABLE_LOOPBACK   1
 Tells the driver to drop the packets sent by itself. This is usefult when building applications like bridges. More...
 
#define NPF_ENABLE_LOOPBACK   2
 Tells the driver to capture the packets sent by itself. More...
 
#define C_ASSERT(a)
 
#define RESERVED(_p)   ((PPACKET_RESERVED)((_p)->ProtocolReserved))
 Macro to obtain a NDIS_PACKET from a PACKET_RESERVED. More...
 
#define TRANSMIT_PACKETS   256
 of packets that can be transmitted at the same time or with a single call to NdisSendPackets. More...
 
#define EXIT_SUCCESS(quantity)
 Macro used in the I/O routines to return the control to user-mode with a success status. More...
 
#define EXIT_FAILURE(quantity)
 Macro used in the I/O routines to return the control to user-mode with a failure status. More...
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Typedefs

typedef struct _PACKET_OID_DATA PACKET_OID_DATA
 Structure containing an OID request. More...
 
typedef struct _PACKET_OID_DATAPPACKET_OID_DATA
 
typedef struct _INTERNAL_REQUEST INTERNAL_REQUEST
 Stores an OID request. More...
 
typedef struct _INTERNAL_REQUESTPINTERNAL_REQUEST
 
typedef struct _PACKET_RESERVED PACKET_RESERVED
 Contains a NDIS packet. More...
 
typedef struct _PACKET_RESERVEDPPACKET_RESERVED
 
typedef struct _DEVICE_EXTENSION DEVICE_EXTENSION
 Port device extension. More...
 
typedef struct _DEVICE_EXTENSIONPDEVICE_EXTENSION
 
typedef struct __CPU_Private_Data CpuPrivateData
 Kernel buffer of each CPU. More...
 
typedef struct _OPEN_INSTANCE OPEN_INSTANCE
 Contains the state of a running instance of the NPF driver. More...
 
typedef struct _OPEN_INSTANCEPOPEN_INSTANCE
 
- - - -

-Enumerations

enum  ADAPTER_BINDING_STATUS { ADAPTER_UNBOUND, -ADAPTER_BOUND, -ADAPTER_UNBINDING - }
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

 C_ASSERT (sizeof(PACKET_OID_DATA)==12)
 
NTSTATUS DriverEntry (IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath)
 The initialization routine of the driver. More...
 
PWCHAR getAdaptersList (VOID)
 Returns the list of the MACs available on the system. More...
 
PKEY_VALUE_PARTIAL_INFORMATION getTcpBindings (VOID)
 Returns the MACs that bind to TCP/IP. More...
 
BOOLEAN NPF_CreateDevice (IN OUT PDRIVER_OBJECT adriverObjectP, IN PUNICODE_STRING amacNameP)
 Creates a device for a given MAC. More...
 
NTSTATUS NPF_Open (IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
 Opens a new instance of the driver. More...
 
VOID NPF_OpenAdapterComplete (IN NDIS_HANDLE ProtocolBindingContext, IN NDIS_STATUS Status, IN NDIS_STATUS OpenErrorStatus)
 Ends the opening of an adapter. More...
 
NTSTATUS NPF_Cleanup (IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
 Closes an instance of the driver. More...
 
NTSTATUS NPF_Close (IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
 
VOID NPF_CloseAdapterComplete (IN NDIS_HANDLE ProtocolBindingContext, IN NDIS_STATUS Status)
 Ends the closing of an adapter. More...
 
NDIS_STATUS NPF_tap (IN NDIS_HANDLE ProtocolBindingContext, IN NDIS_HANDLE MacReceiveContext, IN PVOID HeaderBuffer, IN UINT HeaderBufferSize, IN PVOID LookAheadBuffer, IN UINT LookaheadBufferSize, IN UINT PacketSize)
 Callback invoked by NDIS when a packet arrives from the network. More...
 
VOID NPF_TransferDataComplete (IN NDIS_HANDLE ProtocolBindingContext, IN PNDIS_PACKET Packet, IN NDIS_STATUS Status, IN UINT BytesTransferred)
 Ends the transfer of a packet. More...
 
VOID NPF_ReceiveComplete (IN NDIS_HANDLE ProtocolBindingContext)
 Callback function that signals the end of a packet reception. More...
 
NTSTATUS NPF_IoControl (IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
 Handles the IOCTL calls. More...
 
VOID NPF_RequestComplete (IN NDIS_HANDLE ProtocolBindingContext, IN PNDIS_REQUEST pRequest, IN NDIS_STATUS Status)
 Ends an OID request. More...
 
NTSTATUS NPF_Write (IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
 Writes a raw packet to the network. More...
 
INT NPF_BufferedWrite (IN PIRP Irp, IN PCHAR UserBuff, IN ULONG UserBuffSize, BOOLEAN sync)
 Writes a buffer of raw packets to the network. More...
 
VOID NPF_WaitEndOfBufferedWrite (POPEN_INSTANCE Open)
 Waits the completion of all the sends performed by NPF_BufferedWrite. More...
 
VOID NPF_SendComplete (IN NDIS_HANDLE ProtocolBindingContext, IN PNDIS_PACKET pPacket, IN NDIS_STATUS Status)
 Ends a send operation. More...
 
VOID NPF_ResetComplete (IN NDIS_HANDLE ProtocolBindingContext, IN NDIS_STATUS Status)
 Ends a reset of the adapter. More...
 
VOID NPF_Status (IN NDIS_HANDLE ProtocolBindingContext, IN NDIS_STATUS Status, IN PVOID StatusBuffer, IN UINT StatusBufferSize)
 Callback for NDIS StatusHandler. Not used by NPF. More...
 
VOID NPF_StatusComplete (IN NDIS_HANDLE ProtocolBindingContext)
 Callback for NDIS StatusCompleteHandler. Not used by NPF. More...
 
VOID NPF_Unload (IN PDRIVER_OBJECT DriverObject)
 Function called by the OS when NPF is unloaded. More...
 
NTSTATUS NPF_Read (IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
 Function that serves the user's reads. More...
 
NTSTATUS NPF_ReadRegistry (IN PWSTR *MacDriverName, IN PWSTR *PacketDriverName, IN PUNICODE_STRING RegistryPath)
 Reads the registry keys associated woth NPF if the driver is manually installed via the control panel. More...
 
NTSTATUS NPF_QueryRegistryRoutine (IN PWSTR ValueName, IN ULONG ValueType, IN PVOID ValueData, IN ULONG ValueLength, IN PVOID Context, IN PVOID EntryContext)
 Function used by NPF_ReadRegistry() to quesry the registry keys associated woth NPF if the driver is manually installed via the control panel. More...
 
VOID NPF_BindAdapter (OUT PNDIS_STATUS Status, IN NDIS_HANDLE BindContext, IN PNDIS_STRING DeviceName, IN PVOID SystemSpecific1, IN PVOID SystemSpecific2)
 Callback for NDIS BindAdapterHandler. Not used by NPF. More...
 
VOID NPF_UnbindAdapter (OUT PNDIS_STATUS Status, IN NDIS_HANDLE ProtocolBindingContext, IN NDIS_HANDLE UnbindContext)
 Callback for NDIS UnbindAdapterHandler. More...
 
NTSTATUS NPF_OpenDumpFile (POPEN_INSTANCE Open, PUNICODE_STRING fileName, BOOLEAN append)
 Creates the file that will receive the packets when the driver is in dump mode. More...
 
NTSTATUS NPF_StartDump (POPEN_INSTANCE Open)
 Starts dump to file. More...
 
VOID NPF_DumpThread (PVOID Open)
 The dump thread. More...
 
NTSTATUS NPF_SaveCurrentBuffer (POPEN_INSTANCE Open)
 Saves the content of the packet buffer to the file associated with current instance. More...
 
VOID NPF_WriteDumpFile (PFILE_OBJECT FileObject, PLARGE_INTEGER Offset, ULONG Length, PMDL Mdl, PIO_STATUS_BLOCK IoStatusBlock)
 Writes a block of packets on the dump file. More...
 
NTSTATUS NPF_CloseDumpFile (POPEN_INSTANCE Open)
 Closes the dump file associated with an instance of the driver. More...
 
BOOLEAN NPF_StartUsingBinding (IN POPEN_INSTANCE pOpen)
 
VOID NPF_StopUsingBinding (IN POPEN_INSTANCE pOpen)
 
VOID NPF_CloseBinding (IN POPEN_INSTANCE pOpen)
 
BOOLEAN NPF_StartUsingOpenInstance (IN POPEN_INSTANCE pOpen)
 
VOID NPF_StopUsingOpenInstance (IN POPEN_INSTANCE pOpen)
 
VOID NPF_CloseOpenInstance (IN POPEN_INSTANCE pOpen)
 
NTSTATUS NPF_GetDeviceMTU (IN POPEN_INSTANCE pOpen, IN PIRP pIrp, OUT PUINT pMtu)
 
UINT GetBuffOccupation (POPEN_INSTANCE Open)
 Returns the amount of bytes present in the packet buffer. More...
 
- - - - - - - - - -

-Variables

ULONG g_NCpu
 
NDIS_HANDLE g_NdisProtocolHandle
 
struct time_conv G_Start_Time
 
UINT g_SendPacketFlags
 
-
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/Packet_8h_source.html b/libs/WinPcap-413-173-b4/docs/html/Packet_8h_source.html deleted file mode 100644 index 76fd6c60..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/Packet_8h_source.html +++ /dev/null @@ -1,727 +0,0 @@ - - - - - - -WinPcap: Packet.h Source File - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - - - -
-
-
-
Packet.h
-
-
-Go to the documentation of this file.
1 /*
-
2  * Copyright (c) 1999 - 2005 NetGroup, Politecnico di Torino (Italy)
-
3  * Copyright (c) 2005 - 2010 CACE Technologies, Davis (California)
-
4  * All rights reserved.
-
5  *
-
6  * Redistribution and use in source and binary forms, with or without
-
7  * modification, are permitted provided that the following conditions
-
8  * are met:
-
9  *
-
10  * 1. Redistributions of source code must retain the above copyright
-
11  * notice, this list of conditions and the following disclaimer.
-
12  * 2. Redistributions in binary form must reproduce the above copyright
-
13  * notice, this list of conditions and the following disclaimer in the
-
14  * documentation and/or other materials provided with the distribution.
-
15  * 3. Neither the name of the Politecnico di Torino, CACE Technologies
-
16  * nor the names of its contributors may be used to endorse or promote
-
17  * products derived from this software without specific prior written
-
18  * permission.
-
19  *
-
20  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-
21  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-
22  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-
23  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-
24  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-
25  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-
26  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-
27  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-
28  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-
29  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-
30  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
31  *
-
32  */
-
33 
-
42 #ifndef __PACKET_INCLUDE______
-
43 #define __PACKET_INCLUDE______
-
44 
-
45 #if !defined(NDIS30) && !defined(NDIS50)
-
46 #error NDIS30 or NDIS50 should be defined
-
47 #endif
-
48 
-
49 #ifdef _X86_
-
50 #define NTKERNEL
-
51 #include "jitter.h"
-
52 #endif
-
53 
-
54 #ifdef HAVE_BUGGY_TME_SUPPORT
-
55 #ifndef _X86_
-
56 #error TME support is available only on x86 architectures
-
57 #endif // _X86_
-
58 #endif //HAVE_BUGGY_TME_SUPPORT
-
59 
-
60 
-
61 //
-
62 // Needed to disable a warning due to the #pragma prefast directives,
-
63 // that are ignored by the normal DDK compiler
-
64 //
-
65 #ifndef _PREFAST_
-
66 #pragma warning(disable:4068)
-
67 #endif
-
68 
-
69 #include "win_bpf.h"
-
70 
-
71 #define MAX_REQUESTS 32
-
72 
-
73 #define Packet_ALIGNMENT sizeof(int)
-
74 #define Packet_WORDALIGN(x) (((x)+(Packet_ALIGNMENT-1))&~(Packet_ALIGNMENT-1))
-
75 
-
77 #define KERNEL_EVENT_NAMESPACE L"\\BaseNamedObjects\\"
-
78 
-
79 
-
80 // Working modes
-
81 #define MODE_CAPT 0x0
-
82 #define MODE_STAT 0x1
-
83 #define MODE_MON 0x2
-
84 #define MODE_DUMP 0x10
-
85 
-
86 
-
87 #define IMMEDIATE 1
-
88 
-
89 #define NDIS_FLAGS_SKIP_LOOPBACK_W2K 0x400
-
90 
-
91 // The following definitions are used to provide compatibility
-
92 // of the dump files with the ones of libpcap
-
93 #define TCPDUMP_MAGIC 0xa1b2c3d4
-
94 #define PCAP_VERSION_MAJOR 2
-
95 #define PCAP_VERSION_MINOR 4
-
96 
-
97 // Loopback behaviour definitions
-
98 #define NPF_DISABLE_LOOPBACK 1
-
99 #define NPF_ENABLE_LOOPBACK 2
-
100 
-
101 
- -
107 {
-
108  UINT magic;
-
109  USHORT version_major;
-
110  USHORT version_minor;
-
111  UINT thiszone;
-
112  UINT sigfigs;
-
113  UINT snaplen;
-
114  UINT linktype;
-
115 };
-
116 
-
121 struct sf_pkthdr {
-
122  struct timeval ts;
-
123  UINT caplen;
-
124  UINT len;
-
127 };
-
128 
-
129 //
-
130 // NT4 DDK doesn't have C_ASSERT
-
131 //
-
132 #ifndef C_ASSERT
-
133 #define C_ASSERT(a)
-
134 #endif
-
135 
-
143 typedef struct _PACKET_OID_DATA {
-
144  ULONG Oid;
-
145  ULONG Length;
-
147  UCHAR Data[1];
-
148 }
- -
151 
-
152 C_ASSERT(sizeof(PACKET_OID_DATA) == 12);
-
153 
-
163 typedef struct _INTERNAL_REQUEST {
-
164  LIST_ENTRY ListElement;
-
165 // PIRP Irp; ///< Irp that performed the request
-
166 // BOOLEAN Internal; ///< True if the request is for internal use of npf.sys. False if the request is performed by the user through an IOCTL.
- -
168  NDIS_REQUEST Request;
-
169  NDIS_STATUS RequestStatus;
-
170 
- -
172 
-
180 typedef struct _PACKET_RESERVED {
-
181  LIST_ENTRY ListElement;
-
182  PIRP Irp;
-
183  PMDL pMdl;
- -
185  ULONG Cpu;
- -
188 
-
189 #define RESERVED(_p) ((PPACKET_RESERVED)((_p)->ProtocolReserved))
-
190 
-
191 
-
196 typedef struct _DEVICE_EXTENSION {
-
197  NDIS_STRING AdapterName;
-
198  PWSTR ExportString;
- -
201 
-
207 typedef struct __CPU_Private_Data
-
208 {
-
209  ULONG P;
-
210  ULONG C;
-
211  ULONG Free;
-
212  PUCHAR Buffer;
-
213  ULONG Accepted;
-
214  ULONG Received;
-
218  ULONG Dropped;
-
222  NDIS_SPIN_LOCK BufferLock;
- - -
228  ULONG NewP;
-
229 }
- -
231 
-
232 
-
240 typedef struct _OPEN_INSTANCE
-
241 {
-
242  PDEVICE_EXTENSION DeviceExtension;
-
243  NDIS_HANDLE AdapterHandle;
-
245  UINT Medium;
-
246  NDIS_HANDLE PacketPool;
-
248  KSPIN_LOCK RequestSpinLock;
-
249  LIST_ENTRY RequestList;
-
250  LIST_ENTRY ResetIrpList;
- -
252  PMDL BufferMdl;
-
253  PKEVENT ReadEvent;
-
254  PUCHAR bpfprogram;
-
255 #ifdef _X86_
-
260  JIT_BPF_Filter *Filter;
-
261 #endif //_X86_
-
263  UINT MinToCopy;
-
264  LARGE_INTEGER TimeOut;
-
266 
-
268  int mode;
-
269  LARGE_INTEGER Nbytes;
-
270  LARGE_INTEGER Npackets;
-
271  NDIS_SPIN_LOCK CountersLock;
-
272  UINT Nwrites;
-
273  ULONG Multiple_Write_Counter;
-
275  NDIS_EVENT WriteEvent;
-
276  BOOLEAN WriteInProgress;
-
277  NDIS_SPIN_LOCK WriteLock;
-
279  NDIS_EVENT NdisRequestEvent;
-
280  BOOLEAN SkipSentPackets;
-
281  NDIS_STATUS IOStatus;
-
282  HANDLE DumpFileHandle;
-
283  PFILE_OBJECT DumpFileObject;
-
284  PKTHREAD DumpThreadObject;
- -
286  NDIS_EVENT DumpEvent;
-
287  LARGE_INTEGER DumpOffset;
-
288  UNICODE_STRING DumpFileName;
- -
290  UINT MaxDumpPacks;
-
292  BOOLEAN DumpLimitReached;
-
295 #ifdef HAVE_BUGGY_TME_SUPPORT
-
297  MEM_TYPE mem_ex;
-
298  TME_CORE tme;
-
299 #endif //HAVE_BUGGY_TME_SUPPORT
-
300 
-
301  NDIS_SPIN_LOCK MachineLock;
- -
303  //
-
305  // KAFFINITY is used as a bit mask for the affinity in the system. So on every supported OS is big enough for all the CPUs on the system (32 bits on x86, 64 on x64?).
-
306  // We use its size to compute the max number of CPUs.
-
307  //
-
308  CpuPrivateData CpuData[sizeof(KAFFINITY) * 8];
-
309  ULONG ReaderSN;
-
310  ULONG WriterSN;
-
311  ULONG Size;
- -
314  NDIS_SPIN_LOCK AdapterHandleLock;
- -
316 
- - -
319  NTSTATUS OpenCloseStatus;
- - -
322  BOOLEAN ClosePending;
-
323  NDIS_SPIN_LOCK OpenInUseLock;
-
324 }
- -
326 
- -
328 {
- - - -
332 };
-
333 
- -
342 {
-
343  ULONG SN;
-
344  struct bpf_hdr header;
-
345 };
-
346 
-
347 extern ULONG g_NCpu;
-
348 extern NDIS_HANDLE g_NdisProtocolHandle;
-
349 extern struct time_conv G_Start_Time; // from openclos.c
-
350 extern UINT g_SendPacketFlags;
-
351 
-
352 #define TRANSMIT_PACKETS 256
-
353 
-
355 
-
357 #define EXIT_SUCCESS(quantity) Irp->IoStatus.Information=quantity;\
-
358  Irp->IoStatus.Status = STATUS_SUCCESS;\
-
359  IoCompleteRequest(Irp, IO_NO_INCREMENT);\
-
360  return STATUS_SUCCESS;\
-
361 
-
362 #define EXIT_FAILURE(quantity) Irp->IoStatus.Information=quantity;\
-
364  Irp->IoStatus.Status = STATUS_UNSUCCESSFUL;\
-
365  IoCompleteRequest(Irp, IO_NO_INCREMENT);\
-
366  return STATUS_UNSUCCESSFUL;\
-
367 
-
368 
-
373 /***************************/
-
374 /* Prototypes */
-
375 /***************************/
-
376 
-
393 NTSTATUS
- -
395  IN PDRIVER_OBJECT DriverObject,
-
396  IN PUNICODE_STRING RegistryPath
-
397  );
-
398 
-
408 PWCHAR getAdaptersList(VOID);
-
409 
-
416 PKEY_VALUE_PARTIAL_INFORMATION getTcpBindings(VOID);
-
417 
-
428 BOOLEAN NPF_CreateDevice(
-
429  IN OUT PDRIVER_OBJECT adriverObjectP,
-
430  IN PUNICODE_STRING amacNameP
-
431  );
-
443 NTSTATUS
-
444 NPF_Open(
-
445  IN PDEVICE_OBJECT DeviceObject,
-
446  IN PIRP Irp
-
447  );
-
448 
-
458 VOID
- -
460  IN NDIS_HANDLE ProtocolBindingContext,
-
461  IN NDIS_STATUS Status,
-
462  IN NDIS_STATUS OpenErrorStatus
-
463  );
-
464 
-
475 NTSTATUS
- -
477  IN PDEVICE_OBJECT DeviceObject,
-
478  IN PIRP Irp
-
479  );
-
480 
-
481 NTSTATUS
-
482 NPF_Close(
-
483  IN PDEVICE_OBJECT DeviceObject,
-
484  IN PIRP Irp
-
485  );
-
486 
-
487 
-
488 
-
497 VOID
- -
499  IN NDIS_HANDLE ProtocolBindingContext,
-
500  IN NDIS_STATUS Status
-
501  );
-
502 
-
525 NDIS_STATUS
-
526 NPF_tap(
-
527  IN NDIS_HANDLE ProtocolBindingContext,
-
528  IN NDIS_HANDLE MacReceiveContext,
-
529  IN PVOID HeaderBuffer,
-
530  IN UINT HeaderBufferSize,
-
531  IN PVOID LookAheadBuffer,
-
532  IN UINT LookaheadBufferSize,
-
533  IN UINT PacketSize
-
534  );
-
535 
-
546 VOID
- -
548  IN NDIS_HANDLE ProtocolBindingContext,
-
549  IN PNDIS_PACKET Packet,
-
550  IN NDIS_STATUS Status,
-
551  IN UINT BytesTransferred
-
552  );
-
553 
-
560 VOID
-
561 NPF_ReceiveComplete(IN NDIS_HANDLE ProtocolBindingContext);
-
562 
-
586 NTSTATUS
- -
588  IN PDEVICE_OBJECT DeviceObject,
-
589  IN PIRP Irp
-
590  );
-
591 
-
592 VOID
-
593 
- -
604  IN NDIS_HANDLE ProtocolBindingContext,
-
605  IN PNDIS_REQUEST pRequest,
-
606  IN NDIS_STATUS Status
-
607  );
-
608 
-
621 NTSTATUS
-
622 NPF_Write(
-
623  IN PDEVICE_OBJECT DeviceObject,
-
624  IN PIRP Irp
-
625  );
-
626 
-
627 
-
647 INT NPF_BufferedWrite(IN PIRP Irp,
-
648  IN PCHAR UserBuff,
-
649  IN ULONG UserBuffSize,
-
650  BOOLEAN sync);
-
651 
-
659 VOID NPF_WaitEndOfBufferedWrite(POPEN_INSTANCE Open);
-
660 
-
670 VOID
- -
672  IN NDIS_HANDLE ProtocolBindingContext,
-
673  IN PNDIS_PACKET pPacket,
-
674  IN NDIS_STATUS Status
-
675  );
-
676 
-
686 VOID
- -
688  IN NDIS_HANDLE ProtocolBindingContext,
-
689  IN NDIS_STATUS Status
-
690  );
-
691 
-
695 VOID
-
696 NPF_Status(
-
697  IN NDIS_HANDLE ProtocolBindingContext,
-
698  IN NDIS_STATUS Status,
-
699  IN PVOID StatusBuffer,
-
700  IN UINT StatusBufferSize
-
701  );
-
702 
-
703 
-
707 VOID
-
708 NPF_StatusComplete(IN NDIS_HANDLE ProtocolBindingContext);
-
709 
-
718 VOID
-
719 NPF_Unload(IN PDRIVER_OBJECT DriverObject);
-
720 
-
721 
-
740 NTSTATUS
-
741 NPF_Read(
-
742  IN PDEVICE_OBJECT DeviceObject,
-
743  IN PIRP Irp
-
744  );
-
745 
-
751 NTSTATUS
- -
753  IN PWSTR *MacDriverName,
-
754  IN PWSTR *PacketDriverName,
-
755  IN PUNICODE_STRING RegistryPath
-
756  );
-
757 
-
764 NTSTATUS
- -
766  IN PWSTR ValueName,
-
767  IN ULONG ValueType,
-
768  IN PVOID ValueData,
-
769  IN ULONG ValueLength,
-
770  IN PVOID Context,
-
771  IN PVOID EntryContext
-
772  );
-
773 
-
779 VOID NPF_BindAdapter(
-
780  OUT PNDIS_STATUS Status,
-
781  IN NDIS_HANDLE BindContext,
-
782  IN PNDIS_STRING DeviceName,
-
783  IN PVOID SystemSpecific1,
-
784  IN PVOID SystemSpecific2
-
785  );
-
786 
-
798 VOID
- -
800  OUT PNDIS_STATUS Status,
-
801  IN NDIS_HANDLE ProtocolBindingContext,
-
802  IN NDIS_HANDLE UnbindContext
-
803  );
-
804 
-
805 
-
813 NTSTATUS NPF_OpenDumpFile(POPEN_INSTANCE Open , PUNICODE_STRING fileName, BOOLEAN append);
-
814 
-
823 NTSTATUS NPF_StartDump(POPEN_INSTANCE Open);
-
824 
-
832 VOID NPF_DumpThread(PVOID Open);
-
833 
-
840 NTSTATUS NPF_SaveCurrentBuffer(POPEN_INSTANCE Open);
-
841 
-
854 VOID NPF_WriteDumpFile(PFILE_OBJECT FileObject,
-
855  PLARGE_INTEGER Offset,
-
856  ULONG Length,
-
857  PMDL Mdl,
-
858  PIO_STATUS_BLOCK IoStatusBlock);
-
859 
-
860 
-
861 
-
867 NTSTATUS NPF_CloseDumpFile(POPEN_INSTANCE Open);
-
868 
-
869 BOOLEAN
- -
871  IN POPEN_INSTANCE pOpen);
-
872 
-
873 VOID
- -
875  IN POPEN_INSTANCE pOpen);
-
876 
-
877 VOID
- -
879  IN POPEN_INSTANCE pOpen);
-
880 
-
881 BOOLEAN
- -
883  IN POPEN_INSTANCE pOpen);
-
884 
-
885 VOID
- -
887  IN POPEN_INSTANCE pOpen);
-
888 
-
889 VOID
- -
891  IN POPEN_INSTANCE pOpen);
-
892 
-
893 NTSTATUS
- -
895  IN POPEN_INSTANCE pOpen,
-
896  IN PIRP pIrp,
-
897  OUT PUINT pMtu);
-
898 
-
903 UINT GetBuffOccupation(POPEN_INSTANCE Open);
-
904 
-
916 #ifdef NDIS50
-
917 NDIS_STATUS NPF_PowerChange(IN NDIS_HANDLE ProtocolBindingContext, IN PNET_PNP_EVENT pNetPnPEvent);
-
918 #endif
-
919 
-
920 //
-
921 // Old registry based WinPcap names
-
922 //
-
924 // \brief Helper function to query a value from the global WinPcap registry key
-
925 //*/
-
926 //VOID NPF_QueryWinpcapRegistryString(PWSTR SubKeyName,
-
927 // WCHAR *Value,
-
928 // UINT ValueLen,
-
929 // WCHAR *DefaultValue);
-
930 //
-
931 
-
932 
-
941 #endif /*main ifndef/define*/
-
BOOLEAN DumpLimitReached
Definition: Packet.h:294
-
NTSTATUS NPF_OpenDumpFile(POPEN_INSTANCE Open, PUNICODE_STRING fileName, BOOLEAN append)
Creates the file that will receive the packets when the driver is in dump mode.
-
BOOLEAN NPF_CreateDevice(IN OUT PDRIVER_OBJECT adriverObjectP, IN PUNICODE_STRING amacNameP)
Creates a device for a given MAC.
-
PMDL TransferMdl2
Second MDL used to map the portion of the buffer that will contain an incoming packet.
Definition: Packet.h:227
-
struct _PACKET_OID_DATA * PPACKET_OID_DATA
- -
LARGE_INTEGER TimeOut
Definition: Packet.h:265
-
VOID NPF_StopUsingOpenInstance(IN POPEN_INSTANCE pOpen)
-
UINT MaxDumpPacks
Definition: Packet.h:291
-
NDIS_SPIN_LOCK BufferLock
It protects the buffer associated with this CPU.
Definition: Packet.h:225
-
ULONG g_NCpu
-
ULONG NewP
Used by NdisTransferData() (when we call NdisTransferData, p index must be updated only in the Transf...
Definition: Packet.h:228
-
Structure describing a x86 filtering program created by the jitter.
Definition: jitter.h:95
-
ULONG SN
Sequence number of the packet.
Definition: Packet.h:343
-
VOID NPF_Status(IN NDIS_HANDLE ProtocolBindingContext, IN NDIS_STATUS Status, IN PVOID StatusBuffer, IN UINT StatusBufferSize)
Callback for NDIS StatusHandler. Not used by NPF.
-
ULONG TransmitPendingPackets
Specifies the number of packets that are pending to be transmitted, i.e. have been submitted to NdisS...
Definition: Packet.h:320
-
PWSTR ExportString
Definition: Packet.h:198
-
Contains a NDIS packet.
Definition: Packet.h:180
-
BOOLEAN NPF_StartUsingBinding(IN POPEN_INSTANCE pOpen)
-
ULONG Size
Size of each kernel buffer contained in the CpuData field.
Definition: Packet.h:312
-
ULONG AdapterHandleUsageCounter
Definition: Packet.h:313
-
NDIS_SPIN_LOCK OpenInUseLock
Definition: Packet.h:323
-
struct _PACKET_OID_DATA PACKET_OID_DATA
Structure containing an OID request.
-
PDEVICE_EXTENSION DeviceExtension
Definition: Packet.h:242
-
struct timeval ts
time stamp
Definition: Packet.h:122
-
NTSTATUS NPF_IoControl(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
Handles the IOCTL calls.
-
LIST_ENTRY ListElement
Used to handle lists of packets.
Definition: Packet.h:181
-
INTERNAL_REQUEST Requests[MAX_REQUESTS]
Array of structures that wrap every single OID request.
Definition: Packet.h:251
-
BOOLEAN FreeBufAfterWrite
Definition: Packet.h:184
-
VOID NPF_SendComplete(IN NDIS_HANDLE ProtocolBindingContext, IN PNDIS_PACKET pPacket, IN NDIS_STATUS Status)
Ends a send operation.
-
VOID NPF_StopUsingBinding(IN POPEN_INSTANCE pOpen)
-
NTSTATUS NPF_Close(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
-
LIST_ENTRY ListElement
Used to handle lists of requests.
Definition: Packet.h:164
-
BOOLEAN WriteInProgress
Definition: Packet.h:276
-
NDIS_SPIN_LOCK AdapterHandleLock
Definition: Packet.h:314
- -
VOID NPF_WaitEndOfBufferedWrite(POPEN_INSTANCE Open)
Waits the completion of all the sends performed by NPF_BufferedWrite.
-
ADAPTER_BINDING_STATUS
Definition: Packet.h:327
-
struct _INTERNAL_REQUEST INTERNAL_REQUEST
Stores an OID request.
-
Header associated to a packet in the driver's buffer when the driver is in dump mode. Similar to the bpf_hdr structure, but simpler.
Definition: Packet.h:121
-
PMDL BufferMdl
Pointer to a Memory descriptor list (MDL) that maps the circular buffer's memory. ...
Definition: Packet.h:252
-
CpuPrivateData CpuData[sizeof(KAFFINITY)*8]
Pool of kernel buffer structures, one for each CPU.
Definition: Packet.h:308
-
LIST_ENTRY RequestList
List of pending OID requests.
Definition: Packet.h:249
-
BOOLEAN NPF_StartUsingOpenInstance(IN POPEN_INSTANCE pOpen)
-
LARGE_INTEGER Npackets
Number of packets accepted by the filter when this instance is in statistical mode.
Definition: Packet.h:270
-
NTSTATUS NPF_QueryRegistryRoutine(IN PWSTR ValueName, IN ULONG ValueType, IN PVOID ValueData, IN ULONG ValueLength, IN PVOID Context, IN PVOID EntryContext)
Function used by NPF_ReadRegistry() to quesry the registry keys associated woth NPF if the driver is ...
-
struct _INTERNAL_REQUEST * PINTERNAL_REQUEST
-
NDIS_EVENT NdisOpenCloseCompleteEvent
Definition: Packet.h:317
-
NDIS_HANDLE AdapterHandle
NDIS idetifier of the adapter used by this instance.
Definition: Packet.h:244
-
VOID NPF_StatusComplete(IN NDIS_HANDLE ProtocolBindingContext)
Callback for NDIS StatusCompleteHandler. Not used by NPF.
-
UINT thiszone
Gmt to local correction.
Definition: Packet.h:111
-
USHORT version_major
Libpcap major version.
Definition: Packet.h:109
-
PFILE_OBJECT DumpFileObject
Pointer to the object of the file used in dump mode.
Definition: Packet.h:283
-
PUCHAR bpfprogram
Definition: Packet.h:254
-
VOID NPF_Unload(IN PDRIVER_OBJECT DriverObject)
Function called by the OS when NPF is unloaded.
-
UINT MaxFrameSize
Definition: Packet.h:302
-
NDIS_SPIN_LOCK CountersLock
SpinLock that protects the statistical mode counters.
Definition: Packet.h:271
-
NTSTATUS NPF_CloseDumpFile(POPEN_INSTANCE Open)
Closes the dump file associated with an instance of the driver.
-
UINT Nwrites
Definition: Packet.h:272
-
NTSTATUS NPF_Write(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
Writes a raw packet to the network.
-
ULONG WriterSN
Definition: Packet.h:310
-
PKEY_VALUE_PARTIAL_INFORMATION getTcpBindings(VOID)
Returns the MACs that bind to TCP/IP.
-
Port device extension.
Definition: Packet.h:196
-
ULONG C
Zero-based index of the consumer in the buffer. It indicates the first free byte to be read...
Definition: Packet.h:210
-
NDIS_EVENT NdisRequestEvent
Event used to synchronize I/O requests with the callback structure of NDIS.
Definition: Packet.h:279
-
PMDL pMdl
MDL mapping the buffer of the packet.
Definition: Packet.h:183
-
Structure prepended to each packet in the kernel buffer pool.
Definition: Packet.h:341
-
USHORT version_minor
Libpcap minor version.
Definition: Packet.h:110
-
Structure containing an OID request.
Definition: Packet.h:143
-
PKEVENT ReadEvent
Pointer to the event on which the read calls on this instance must wait.
Definition: Packet.h:253
-
VOID NPF_TransferDataComplete(IN NDIS_HANDLE ProtocolBindingContext, IN PNDIS_PACKET Packet, IN NDIS_STATUS Status, IN UINT BytesTransferred)
Ends the transfer of a packet.
-
VOID NPF_DumpThread(PVOID Open)
The dump thread.
-
VOID NPF_RequestComplete(IN NDIS_HANDLE ProtocolBindingContext, IN PNDIS_REQUEST pRequest, IN NDIS_STATUS Status)
Ends an OID request.
-
NDIS_HANDLE PacketPool
Pool of NDIS_PACKET structures used to transfer the packets from and to the NIC driver.
Definition: Packet.h:247
-
NTSTATUS NPF_SaveCurrentBuffer(POPEN_INSTANCE Open)
Saves the content of the packet buffer to the file associated with current instance.
-
ULONG Length
Length of the data field.
Definition: Packet.h:146
-
BOOLEAN ClosePending
Definition: Packet.h:322
-
ULONG Multiple_Write_Counter
Counts the number of times a single write has already physically repeated.
Definition: Packet.h:274
-
UINT g_SendPacketFlags
-
UINT GetBuffOccupation(POPEN_INSTANCE Open)
Returns the amount of bytes present in the packet buffer.
-
INT NPF_BufferedWrite(IN PIRP Irp, IN PCHAR UserBuff, IN ULONG UserBuffSize, BOOLEAN sync)
Writes a buffer of raw packets to the network.
-
HANDLE DumpThreadHandle
Handle of the thread created by dump mode to asynchronously move the buffer to disk.
Definition: Packet.h:285
-
ULONG NumPendingIrps
Definition: Packet.h:321
-
NDIS_SPIN_LOCK WriteLock
SpinLock that protects the WriteInProgress variable.
Definition: Packet.h:278
-
UINT caplen
Definition: Packet.h:123
-
NDIS_EVENT DumpEvent
Event used to synchronize the dump thread with the tap when the instance is in dump mode...
Definition: Packet.h:286
-
VOID NPF_CloseBinding(IN POPEN_INSTANCE pOpen)
-
LARGE_INTEGER DumpOffset
Current offset in the dump file.
Definition: Packet.h:287
- -
KSPIN_LOCK RequestSpinLock
SpinLock used to synchronize the OID requests.
Definition: Packet.h:248
-
PKTHREAD DumpThreadObject
Pointer to the object of the thread used in dump mode.
Definition: Packet.h:284
-
NTSTATUS NPF_StartDump(POPEN_INSTANCE Open)
Starts dump to file.
-
UNICODE_STRING DumpFileName
String containing the name of the dump file.
Definition: Packet.h:288
-
VOID NPF_UnbindAdapter(OUT PNDIS_STATUS Status, IN NDIS_HANDLE ProtocolBindingContext, IN NDIS_HANDLE UnbindContext)
Callback for NDIS UnbindAdapterHandler.
-
NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath)
The initialization routine of the driver.
-
VOID NPF_ReceiveComplete(IN NDIS_HANDLE ProtocolBindingContext)
Callback function that signals the end of a packet reception.
-
struct _OPEN_INSTANCE * POPEN_INSTANCE
-
UINT Medium
Definition: Packet.h:245
-
VOID NPF_BindAdapter(OUT PNDIS_STATUS Status, IN NDIS_HANDLE BindContext, IN PNDIS_STRING DeviceName, IN PVOID SystemSpecific1, IN PVOID SystemSpecific2)
Callback for NDIS BindAdapterHandler. Not used by NPF.
-
BOOLEAN SkipSentPackets
True if this instance should not capture back the packets that it transmits.
Definition: Packet.h:280
-
ULONG ReaderSN
Sequence number of the next packet to be read from the pool of kernel buffers.
Definition: Packet.h:309
-
struct _DEVICE_EXTENSION DEVICE_EXTENSION
Port device extension.
-
NDIS_STRING AdapterName
Name of the adapter.
Definition: Packet.h:197
- -
struct bpf_hdr header
bpf header, created by the tap, and copied unmodified to user level programs.
Definition: Packet.h:344
-
VOID NPF_ResetComplete(IN NDIS_HANDLE ProtocolBindingContext, IN NDIS_STATUS Status)
Ends a reset of the adapter.
-
PUCHAR Buffer
Pointer to the kernel buffer used to capture packets.
Definition: Packet.h:212
-
Kernel buffer of each CPU.
Definition: Packet.h:207
-
UINT len
Length of the original packet (off wire).
Definition: Packet.h:126
-
#define C_ASSERT(a)
Definition: Packet.h:133
-
NDIS_EVENT WriteEvent
Event used to synchronize the multiple write process.
Definition: Packet.h:275
-
VOID NPF_CloseAdapterComplete(IN NDIS_HANDLE ProtocolBindingContext, IN NDIS_STATUS Status)
Ends the closing of an adapter.
-
PIRP Irp
Irp that performed the request.
Definition: Packet.h:182
-
NDIS_HANDLE g_NdisProtocolHandle
-
UINT linktype
Data link type (DLT_*). See win_bpf.h for details.
Definition: Packet.h:114
-
struct __CPU_Private_Data CpuPrivateData
Kernel buffer of each CPU.
-
HANDLE DumpFileHandle
Handle of the file used in dump mode.
Definition: Packet.h:282
-
NDIS_EVENT NdisWriteCompleteEvent
Event that is signalled when all the packets have been successfully sent by NdisSend (and corresponfi...
Definition: Packet.h:318
- -
NDIS_STATUS IOStatus
Maintains the status of and OID request call, that will be passed to the application.
Definition: Packet.h:281
-
UINT magic
Libpcap magic number.
Definition: Packet.h:108
- -
LIST_ENTRY ResetIrpList
List of pending adapter reset requests.
Definition: Packet.h:250
-
NDIS_REQUEST Request
The structure with the actual request, that will be passed to NdisRequest().
Definition: Packet.h:168
-
ULONG Free
Number of the free bytes in the buffer.
Definition: Packet.h:211
-
NDIS_EVENT InternalRequestCompletedEvent
Definition: Packet.h:167
-
NDIS_SPIN_LOCK MachineLock
SpinLock that protects the BPF filter and the TME engine, if in use.
Definition: Packet.h:301
-
UINT sigfigs
Accuracy of timestamps.
Definition: Packet.h:112
-
Contains the state of a running instance of the NPF driver.
Definition: Packet.h:240
-
LARGE_INTEGER Nbytes
Amount of bytes accepted by the filter when this instance is in statistical mode. ...
Definition: Packet.h:269
-
int mode
Working mode of the driver. See PacketSetMode() for details.
Definition: Packet.h:268
-
NTSTATUS NPF_Open(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
Opens a new instance of the driver.
-
ULONG AdapterBindingStatus
Specifies if NPF is still bound to the adapter used by this instance, it's unbinding or it's not boun...
Definition: Packet.h:315
-
NTSTATUS NPF_Cleanup(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
Closes an instance of the driver.
-
struct time_conv G_Start_Time
-
VOID NPF_CloseOpenInstance(IN POPEN_INSTANCE pOpen)
-
struct _PACKET_RESERVED * PPACKET_RESERVED
-
NDIS_STATUS RequestStatus
Definition: Packet.h:169
-
Header of a libpcap dump file.
Definition: Packet.h:106
-
VOID NPF_OpenAdapterComplete(IN NDIS_HANDLE ProtocolBindingContext, IN NDIS_STATUS Status, IN NDIS_STATUS OpenErrorStatus)
Ends the opening of an adapter.
-
ULONG Cpu
The CPU on which the packet was pulled out of the linked list of free packets.
Definition: Packet.h:186
-
NTSTATUS NPF_GetDeviceMTU(IN POPEN_INSTANCE pOpen, IN PIRP pIrp, OUT PUINT pMtu)
-
ULONG P
Zero-based index of the producer in the buffer. It indicates the first free byte to be written...
Definition: Packet.h:209
-
struct _OPEN_INSTANCE OPEN_INSTANCE
Contains the state of a running instance of the NPF driver.
-
PMDL TransferMdl1
MDL used to map the portion of the buffer that will contain an incoming packet.
Definition: Packet.h:226
-
UINT MinToCopy
Definition: Packet.h:263
-
NTSTATUS OpenCloseStatus
Definition: Packet.h:319
- -
NTSTATUS NPF_Read(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
Function that serves the user's reads.
-
UINT MaxDumpBytes
Definition: Packet.h:289
-
#define MAX_REQUESTS
Maximum number of simultaneous IOCTL requests.
Definition: Packet.h:71
-
Stores an OID request.
Definition: Packet.h:163
-
UINT snaplen
Length of the max saved portion of each packet.
Definition: Packet.h:113
-
struct _DEVICE_EXTENSION * PDEVICE_EXTENSION
-
VOID NPF_WriteDumpFile(PFILE_OBJECT FileObject, PLARGE_INTEGER Offset, ULONG Length, PMDL Mdl, PIO_STATUS_BLOCK IoStatusBlock)
Writes a block of packets on the dump file.
-
NDIS_STATUS NPF_tap(IN NDIS_HANDLE ProtocolBindingContext, IN NDIS_HANDLE MacReceiveContext, IN PVOID HeaderBuffer, IN UINT HeaderBufferSize, IN PVOID LookAheadBuffer, IN UINT LookaheadBufferSize, IN UINT PacketSize)
Callback invoked by NDIS when a packet arrives from the network.
-
NTSTATUS NPF_ReadRegistry(IN PWSTR *MacDriverName, IN PWSTR *PacketDriverName, IN PUNICODE_STRING RegistryPath)
Reads the registry keys associated woth NPF if the driver is manually installed via the control panel...
-
struct _PACKET_RESERVED PACKET_RESERVED
Contains a NDIS packet.
-
UCHAR Data[1]
Definition: Packet.h:147
-
PWCHAR getAdaptersList(VOID)
Returns the list of the MACs available on the system.
-
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/Win32-Extensions_8h.html b/libs/WinPcap-413-173-b4/docs/html/Win32-Extensions_8h.html deleted file mode 100644 index b976efbf..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/Win32-Extensions_8h.html +++ /dev/null @@ -1,736 +0,0 @@ - - - - - - -WinPcap: Win32-Extensions.h File Reference - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - - - -
-
- -
-
Win32-Extensions.h File Reference
-
-
- -

Go to the source code of this file.

- - - - - -

-Data Structures

struct  pcap_send_queue
 A queue of raw packets that will be sent to the network with pcap_sendqueue_transmit(). More...
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Macros

#define AIRPCAP_HANDLE__EAE405F5_0171_9592_B3C2_C19EC426AD34__DEFINED_
 This typedef is a support for the pcap_get_airpcap_handle() function. More...
 
#define BPF_MEM_EX_IMM   0xc0
 
#define BPF_MEM_EX_IND   0xe0
 
#define BPF_MEM_EX   0xc0
 
#define BPF_TME   0x08
 
#define BPF_LOOKUP   0x90
 
#define BPF_EXECUTE   0xa0
 
#define BPF_INIT   0xb0
 
#define BPF_VALIDATE   0xc0
 
#define BPF_SET_ACTIVE   0xd0
 
#define BPF_RESET   0xe0
 
#define BPF_SET_MEMORY   0x80
 
#define BPF_GET_REGISTER_VALUE   0x70
 
#define BPF_SET_REGISTER_VALUE   0x60
 
#define BPF_SET_WORKING   0x50
 
#define BPF_SET_ACTIVE_READ   0x40
 
#define BPF_SET_AUTODELETION   0x30
 
#define BPF_SEPARATION   0xff
 
- - - - - -

-Typedefs

typedef struct pcap_send_queue pcap_send_queue
 
typedef struct _AirpcapHandle * PAirpcapHandle
 
- - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

pcap_send_queuepcap_sendqueue_alloc (u_int memsize)
 
void pcap_sendqueue_destroy (pcap_send_queue *queue)
 
int pcap_sendqueue_queue (pcap_send_queue *queue, const struct pcap_pkthdr *pkt_header, const u_char *pkt_data)
 
u_int pcap_sendqueue_transmit (pcap_t *p, pcap_send_queue *queue, int sync)
 
HANDLE pcap_getevent (pcap_t *p)
 
struct pcap_statpcap_stats_ex (pcap_t *p, int *pcap_stat_size)
 
int pcap_setuserbuffer (pcap_t *p, int size)
 
int pcap_live_dump (pcap_t *p, char *filename, int maxsize, int maxpacks)
 
int pcap_live_dump_ended (pcap_t *p, int sync)
 
int pcap_offline_filter (const struct bpf_program *prog, const struct pcap_pkthdr *header, const u_char *pkt_data)
 
int pcap_start_oem (char *err_str, int flags)
 
PAirpcapHandle pcap_get_airpcap_handle (pcap_t *p)
 
-

Macro Definition Documentation

- -
-
- - - - -
#define AIRPCAP_HANDLE__EAE405F5_0171_9592_B3C2_C19EC426AD34__DEFINED_
-
- -

This typedef is a support for the pcap_get_airpcap_handle() function.

- -

Definition at line 59 of file Win32-Extensions.h.

- -
-
- -
-
- - - - -
#define BPF_EXECUTE   0xa0
-
- -

Definition at line 71 of file Win32-Extensions.h.

- -
-
- -
-
- - - - -
#define BPF_GET_REGISTER_VALUE   0x70
-
- -

Definition at line 77 of file Win32-Extensions.h.

- -
-
- -
-
- - - - -
#define BPF_INIT   0xb0
-
- -

Definition at line 72 of file Win32-Extensions.h.

- -
-
- -
-
- - - - -
#define BPF_LOOKUP   0x90
-
- -

Definition at line 70 of file Win32-Extensions.h.

- -
-
- -
-
- - - - -
#define BPF_MEM_EX   0xc0
-
- -

Definition at line 67 of file Win32-Extensions.h.

- -
-
- -
-
- - - - -
#define BPF_MEM_EX_IMM   0xc0
-
- -

Definition at line 63 of file Win32-Extensions.h.

- -
-
- -
-
- - - - -
#define BPF_MEM_EX_IND   0xe0
-
- -

Definition at line 64 of file Win32-Extensions.h.

- -
-
- -
-
- - - - -
#define BPF_RESET   0xe0
-
- -

Definition at line 75 of file Win32-Extensions.h.

- -
-
- -
-
- - - - -
#define BPF_SEPARATION   0xff
-
- -

Definition at line 82 of file Win32-Extensions.h.

- -
-
- -
-
- - - - -
#define BPF_SET_ACTIVE   0xd0
-
- -

Definition at line 74 of file Win32-Extensions.h.

- -
-
- -
-
- - - - -
#define BPF_SET_ACTIVE_READ   0x40
-
- -

Definition at line 80 of file Win32-Extensions.h.

- -
-
- -
-
- - - - -
#define BPF_SET_AUTODELETION   0x30
-
- -

Definition at line 81 of file Win32-Extensions.h.

- -
-
- -
-
- - - - -
#define BPF_SET_MEMORY   0x80
-
- -

Definition at line 76 of file Win32-Extensions.h.

- -
-
- -
-
- - - - -
#define BPF_SET_REGISTER_VALUE   0x60
-
- -

Definition at line 78 of file Win32-Extensions.h.

- -
-
- -
-
- - - - -
#define BPF_SET_WORKING   0x50
-
- -

Definition at line 79 of file Win32-Extensions.h.

- -
-
- -
-
- - - - -
#define BPF_TME   0x08
-
- -

Definition at line 68 of file Win32-Extensions.h.

- -
-
- -
-
- - - - -
#define BPF_VALIDATE   0xc0
-
- -

Definition at line 73 of file Win32-Extensions.h.

- -
-
-

Typedef Documentation

- -
-
- - - - -
typedef struct _AirpcapHandle* PAirpcapHandle
-
- -

Definition at line 60 of file Win32-Extensions.h.

- -
-
- -
-
- - - - -
typedef struct pcap_send_queue pcap_send_queue
-
- -

Definition at line 53 of file Win32-Extensions.h.

- -
-
-

Function Documentation

- -
-
- - - - - - - - -
PAirpcapHandle pcap_get_airpcap_handle (pcap_tp)
-
- -
-
- -
-
- - - - - - - - -
HANDLE pcap_getevent (pcap_tp)
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
int pcap_live_dump (pcap_tp,
char * filename,
int maxsize,
int maxpacks 
)
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
int pcap_live_dump_ended (pcap_tp,
int sync 
)
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
int pcap_offline_filter (const struct bpf_program * prog,
const struct pcap_pkthdrheader,
const u_char * pkt_data 
)
-
- -
-
- -
-
- - - - - - - - -
pcap_send_queue* pcap_sendqueue_alloc (u_int memsize)
-
- -
-
- -
-
- - - - - - - - -
void pcap_sendqueue_destroy (pcap_send_queuequeue)
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
int pcap_sendqueue_queue (pcap_send_queuequeue,
const struct pcap_pkthdrpkt_header,
const u_char * pkt_data 
)
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
u_int pcap_sendqueue_transmit (pcap_tp,
pcap_send_queuequeue,
int sync 
)
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
int pcap_setuserbuffer (pcap_tp,
int size 
)
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
int pcap_start_oem (char * err_str,
int flags 
)
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
struct pcap_stat* pcap_stats_ex (pcap_tp,
int * pcap_stat_size 
)
-
- -
-
-
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/Win32-Extensions_8h_source.html b/libs/WinPcap-413-173-b4/docs/html/Win32-Extensions_8h_source.html deleted file mode 100644 index 7927e5d3..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/Win32-Extensions_8h_source.html +++ /dev/null @@ -1,188 +0,0 @@ - - - - - - -WinPcap: Win32-Extensions.h Source File - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - - - -
-
-
-
Win32-Extensions.h
-
-
-Go to the documentation of this file.
1 /*
-
2  * Copyright (c) 1999 - 2005 NetGroup, Politecnico di Torino (Italy)
-
3  * Copyright (c) 2005 - 2006 CACE Technologies, Davis (California)
-
4  * All rights reserved.
-
5  *
-
6  * Redistribution and use in source and binary forms, with or without
-
7  * modification, are permitted provided that the following conditions
-
8  * are met:
-
9  *
-
10  * 1. Redistributions of source code must retain the above copyright
-
11  * notice, this list of conditions and the following disclaimer.
-
12  * 2. Redistributions in binary form must reproduce the above copyright
-
13  * notice, this list of conditions and the following disclaimer in the
-
14  * documentation and/or other materials provided with the distribution.
-
15  * 3. Neither the name of the Politecnico di Torino, CACE Technologies
-
16  * nor the names of its contributors may be used to endorse or promote
-
17  * products derived from this software without specific prior written
-
18  * permission.
-
19  *
-
20  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-
21  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-
22  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-
23  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-
24  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-
25  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-
26  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-
27  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-
28  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-
29  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-
30  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
31  *
-
32  */
-
33 
-
34 #ifndef __WIN32_EXTENSIONS_H__
-
35 #define __WIN32_EXTENSIONS_H__
-
36 
-
37 #ifdef __cplusplus
-
38 extern "C" {
-
39 #endif
-
40 
-
41 /* Definitions */
-
42 
- -
47 {
-
48  u_int maxlen;
-
49  u_int len;
-
50  char *buffer;
-
51 };
-
52 
- -
54 
-
58 #if !defined(AIRPCAP_HANDLE__EAE405F5_0171_9592_B3C2_C19EC426AD34__DEFINED_)
-
59 #define AIRPCAP_HANDLE__EAE405F5_0171_9592_B3C2_C19EC426AD34__DEFINED_
-
60 typedef struct _AirpcapHandle *PAirpcapHandle;
-
61 #endif
-
62 
-
63 #define BPF_MEM_EX_IMM 0xc0
-
64 #define BPF_MEM_EX_IND 0xe0
-
65 
-
66 /*used for ST*/
-
67 #define BPF_MEM_EX 0xc0
-
68 #define BPF_TME 0x08
-
69 
-
70 #define BPF_LOOKUP 0x90
-
71 #define BPF_EXECUTE 0xa0
-
72 #define BPF_INIT 0xb0
-
73 #define BPF_VALIDATE 0xc0
-
74 #define BPF_SET_ACTIVE 0xd0
-
75 #define BPF_RESET 0xe0
-
76 #define BPF_SET_MEMORY 0x80
-
77 #define BPF_GET_REGISTER_VALUE 0x70
-
78 #define BPF_SET_REGISTER_VALUE 0x60
-
79 #define BPF_SET_WORKING 0x50
-
80 #define BPF_SET_ACTIVE_READ 0x40
-
81 #define BPF_SET_AUTODELETION 0x30
-
82 #define BPF_SEPARATION 0xff
-
83 
-
84 /* Prototypes */
- -
86 
- -
88 
-
89 int pcap_sendqueue_queue(pcap_send_queue* queue, const struct pcap_pkthdr *pkt_header, const u_char *pkt_data);
-
90 
-
91 u_int pcap_sendqueue_transmit(pcap_t *p, pcap_send_queue* queue, int sync);
-
92 
-
93 HANDLE pcap_getevent(pcap_t *p);
-
94 
-
95 struct pcap_stat *pcap_stats_ex(pcap_t *p, int *pcap_stat_size);
-
96 
-
97 int pcap_setuserbuffer(pcap_t *p, int size);
-
98 
-
99 int pcap_live_dump(pcap_t *p, char *filename, int maxsize, int maxpacks);
-
100 
-
101 int pcap_live_dump_ended(pcap_t *p, int sync);
-
102 
-
103 int pcap_offline_filter(const struct bpf_program *prog, const struct pcap_pkthdr *header, const u_char *pkt_data);
-
104 
-
105 int pcap_start_oem(char* err_str, int flags);
-
106 
-
107 PAirpcapHandle pcap_get_airpcap_handle(pcap_t *p);
-
108 
-
109 #ifdef __cplusplus
-
110 }
-
111 #endif
-
112 
-
113 #endif //__WIN32_EXTENSIONS_H__
-
Header of a packet in the dump file.
Definition: incs/pcap.h:126
-
int pcap_setuserbuffer(pcap_t *p, int size)
-
int pcap_live_dump_ended(pcap_t *p, int sync)
-
int pcap_start_oem(char *err_str, int flags)
-
u_int pcap_sendqueue_transmit(pcap_t *p, pcap_send_queue *queue, int sync)
-
A queue of raw packets that will be sent to the network with pcap_sendqueue_transmit().
-
struct pcap pcap_t
Descriptor of an open capture instance. This structure is opaque to the user, that handles its conten...
Definition: incs/pcap.h:70
-
char * buffer
Buffer containing the packets to be sent.
-
Structure that keeps statistical values on an interface.
Definition: incs/pcap.h:136
-
pcap_send_queue * pcap_sendqueue_alloc(u_int memsize)
-
int pcap_sendqueue_queue(pcap_send_queue *queue, const struct pcap_pkthdr *pkt_header, const u_char *pkt_data)
-
PAirpcapHandle pcap_get_airpcap_handle(pcap_t *p)
-
int pcap_live_dump(pcap_t *p, char *filename, int maxsize, int maxpacks)
-
void pcap_sendqueue_destroy(pcap_send_queue *queue)
-
struct _AirpcapHandle * PAirpcapHandle
-
struct pcap_stat * pcap_stats_ex(pcap_t *p, int *pcap_stat_size)
-
int pcap_offline_filter(const struct bpf_program *prog, const struct pcap_pkthdr *header, const u_char *pkt_data)
-
u_int len
Current size of the queue, in bytes.
-
HANDLE pcap_getevent(pcap_t *p)
-
u_int maxlen
Maximum size of the the queue, in bytes. This variable contains the size of the buffer field...
-
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/annotated.html b/libs/WinPcap-413-173-b4/docs/html/annotated.html deleted file mode 100644 index 79493ece..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/annotated.html +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - -WinPcap: Data Structures - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - - -
-
-
-
Data Structures
-
-
-
Here are the data structures with brief descriptions:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 C__CPU_Private_DataKernel buffer of each CPU
 C_DEVICE_EXTENSIONPort device extension
 C_INTERNAL_REQUESTStores an OID request
 C_OPEN_INSTANCEContains the state of a running instance of the NPF driver
 C_PACKET_OID_DATAStructure containing an OID request
 C_PACKET_RESERVEDContains a NDIS packet
 CactivehostsKeeps a list of all the opened connections in the active mode
 Cbinary_streamA stream of X86 binary code
 CJIT_BPF_FilterStructure describing a x86 filtering program created by the jitter
 Cpacket_file_headerHeader of a libpcap dump file
 CPacketHeaderStructure prepended to each packet in the kernel buffer pool
 Cpcap_addrRepresentation of an interface address, used by pcap_findalldevs()
 Cpcap_file_headerHeader of a libpcap dump file
 Cpcap_ifItem in a list of interfaces, used by pcap_findalldevs()
 Cpcap_pkthdrHeader of a packet in the dump file
 Cpcap_send_queueA queue of raw packets that will be sent to the network with pcap_sendqueue_transmit()
 Cpcap_statStructure that keeps statistical values on an interface
 Crpcap_authStructure that keeps the data required for the authentication on the remote host
 Crpcap_filterGeneral header used for the pcap_setfilter() command; keeps just the number of BPF instructions
 Crpcap_filterbpf_insnStructure that keeps a single BPF instuction; it is repeated 'ninsn' times according to the 'rpcap_filterbpf' header
 Crpcap_findalldevs_ifFormat of the message for the interface description (findalldevs command)
 Crpcap_findalldevs_ifaddrFormat of the message for the address listing (findalldevs command)
 Crpcap_headerCommon header for all the RPCAP messages
 Crpcap_openreplyFormat of the message of the connection opening reply (open command)
 Crpcap_pkthdrFormat of the header which encapsulates captured packets when transmitted on the network
 Crpcap_samplingStructure that is needed to set sampling parameters
 Crpcap_startcapreplyFormat of the reply message that devoted to start a remote capture (startcap reply command)
 Crpcap_startcapreqFormat of the message that starts a remote capture (startcap command)
 Crpcap_statsStructure that keeps the statistics about the number of packets captured, dropped, etc
 Csf_pkthdrHeader associated to a packet in the driver's buffer when the driver is in dump mode. Similar to the bpf_hdr structure, but simpler
-
-
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/bc_s.png b/libs/WinPcap-413-173-b4/docs/html/bc_s.png deleted file mode 100644 index 224b29aa9847d5a4b3902efd602b7ddf7d33e6c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 676 zcmV;V0$crwP)y__>=_9%My z{n931IS})GlGUF8K#6VIbs%684A^L3@%PlP2>_sk`UWPq@f;rU*V%rPy_ekbhXT&s z(GN{DxFv}*vZp`F>S!r||M`I*nOwwKX+BC~3P5N3-)Y{65c;ywYiAh-1*hZcToLHK ztpl1xomJ+Yb}K(cfbJr2=GNOnT!UFA7Vy~fBz8?J>XHsbZoDad^8PxfSa0GDgENZS zuLCEqzb*xWX2CG*b&5IiO#NzrW*;`VC9455M`o1NBh+(k8~`XCEEoC1Ybwf;vr4K3 zg|EB<07?SOqHp9DhLpS&bzgo70I+ghB_#)K7H%AMU3v}xuyQq9&Bm~++VYhF09a+U zl7>n7Jjm$K#b*FONz~fj;I->Bf;ule1prFN9FovcDGBkpg>)O*-}eLnC{6oZHZ$o% zXKW$;0_{8hxHQ>l;_*HATI(`7t#^{$(zLe}h*mqwOc*nRY9=?Sx4OOeVIfI|0V(V2 zBrW#G7Ss9wvzr@>H*`r>zE z+e8bOBgqIgldUJlG(YUDviMB`9+DH8n-s9SXRLyJHO1!=wY^79WYZMTa(wiZ!zP66 zA~!21vmF3H2{ngD;+`6j#~6j;$*f*G_2ZD1E;9(yaw7d-QnSCpK(cR1zU3qU0000< KMNUMnLSTYoA~SLT diff --git a/libs/WinPcap-413-173-b4/docs/html/bdwn.png b/libs/WinPcap-413-173-b4/docs/html/bdwn.png deleted file mode 100644 index 940a0b950443a0bb1b216ac03c45b8a16c955452..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 147 zcmeAS@N?(olHy`uVBq!ia0vp^>_E)H!3HEvS)PKZC{Gv1kP61Pb5HX&C2wk~_T - - - - - -WinPcap: Data Structure Index - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - - -
-
-
-
Data Structure Index
-
-
-
A | B | J | P | R | S | _
- - - - - - - - - - - - - -
  J  
-
_DEVICE_EXTENSION   
  p  
-
  r  
-
rpcap_pkthdr   
_INTERNAL_REQUEST   rpcap_sampling   
JIT_BPF_Filter   _OPEN_INSTANCE   packet_file_header   rpcap_auth   rpcap_startcapreply   
  P  
-
_PACKET_OID_DATA   pcap_addr   rpcap_filter   rpcap_startcapreq   
_PACKET_RESERVED   pcap_file_header   rpcap_filterbpf_insn   rpcap_stats   
PacketHeader   
  a  
-
pcap_if   rpcap_findalldevs_if   
  s  
-
  _  
-
pcap_pkthdr   rpcap_findalldevs_ifaddr   
activehosts   pcap_send_queue   rpcap_header   sf_pkthdr   
__CPU_Private_Data   
  b  
-
pcap_stat   rpcap_openreply   
binary_stream   
-
A | B | J | P | R | S | _
-
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/closed.png b/libs/WinPcap-413-173-b4/docs/html/closed.png deleted file mode 100644 index 98cc2c909da37a6df914fbf67780eebd99c597f5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 132 zcmeAS@N?(olHy`uVBq!ia0vp^oFL4>1|%O$WD@{V-kvUwAr*{o@8{^CZMh(5KoB^r_<4^zF@3)Cp&&t3hdujKf f*?bjBoY!V+E))@{xMcbjXe@)LtDnm{r-UW|*e5JT diff --git a/libs/WinPcap-413-173-b4/docs/html/deprecated.html b/libs/WinPcap-413-173-b4/docs/html/deprecated.html deleted file mode 100644 index 6490980d..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/deprecated.html +++ /dev/null @@ -1,59 +0,0 @@ - - - - - - -WinPcap: Deprecated List - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - -
-
-
-
Deprecated List
-
-
-
-
Global pcap_file (pcap_t *p)
-
Due to incompatibilities between the C Runtime (CRT) used to compile WinPcap and the one used by WinPcap-based applications, this function may return an invalid FILE pointer, i.e. a descriptor that causes all the standard I/O stream functions (ftell, fseek, fclose...) to fail. The function is still available for backwards binary compatibility, only.
-
Global pcap_lookupdev (char *errbuf)
-
Use pcap_findalldevs() or pcap_findalldevs_ex() instead.
-
Global pcap_lookupnet (const char *device, bpf_u_int32 *netp, bpf_u_int32 *maskp, char *errbuf)
-
Use pcap_findalldevs() or pcap_findalldevs_ex() instead.
-
-
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/dir_1d0b26b30525be7735e8363d5b4dcb01.html b/libs/WinPcap-413-173-b4/docs/html/dir_1d0b26b30525be7735e8363d5b4dcb01.html deleted file mode 100644 index e6223611..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/dir_1d0b26b30525be7735e8363d5b4dcb01.html +++ /dev/null @@ -1,63 +0,0 @@ - - - - - - -WinPcap: wpcap Directory Reference - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - - -
-
-
-
wpcap Directory Reference
-
-
- - - - - - -

-Directories

directory  libpcap
 
directory  Win32-Extensions
 
-
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/dir_4ee79fd2d246ba2ad1fa267b628a7962.html b/libs/WinPcap-413-173-b4/docs/html/dir_4ee79fd2d246ba2ad1fa267b628a7962.html deleted file mode 100644 index 97c380b7..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/dir_4ee79fd2d246ba2ad1fa267b628a7962.html +++ /dev/null @@ -1,63 +0,0 @@ - - - - - - -WinPcap: libpcap Directory Reference - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - - -
-
-
-
libpcap Directory Reference
-
-
- - - - - - -

-Directories

directory  funcs
 
directory  incs
 
-
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/dir_727ab9403fd1ff980053b79c3716665a.html b/libs/WinPcap-413-173-b4/docs/html/dir_727ab9403fd1ff980053b79c3716665a.html deleted file mode 100644 index 637bc1f6..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/dir_727ab9403fd1ff980053b79c3716665a.html +++ /dev/null @@ -1,61 +0,0 @@ - - - - - - -WinPcap: incs Directory Reference - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - - -
-
-
-
incs Directory Reference
-
-
- - - - -

-Files

file  incs/pcap.h [code]
 
-
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/dir_9a2aa2d3a350e553d14931ec4e0c1514.html b/libs/WinPcap-413-173-b4/docs/html/dir_9a2aa2d3a350e553d14931ec4e0c1514.html deleted file mode 100644 index 4540a4e0..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/dir_9a2aa2d3a350e553d14931ec4e0c1514.html +++ /dev/null @@ -1,61 +0,0 @@ - - - - - - -WinPcap: libpcap Directory Reference - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - - -
-
-
-
libpcap Directory Reference
-
-
- - - - -

-Files

file  pcap-remote.h [code]
 
-
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/dir_9a623c46ccb35c88e86317a093d60fd6.html b/libs/WinPcap-413-173-b4/docs/html/dir_9a623c46ccb35c88e86317a093d60fd6.html deleted file mode 100644 index b9e3455f..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/dir_9a623c46ccb35c88e86317a093d60fd6.html +++ /dev/null @@ -1,61 +0,0 @@ - - - - - - -WinPcap: Win32-Extensions Directory Reference - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - - -
-
-
-
Win32-Extensions Directory Reference
-
-
- - - - -

-Files

file  Win32-Extensions.h [code]
 
-
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/dir_a1b0b199cde94c7dd9a3a0ee49bcda2f.html b/libs/WinPcap-413-173-b4/docs/html/dir_a1b0b199cde94c7dd9a3a0ee49bcda2f.html deleted file mode 100644 index 9fd9f2a1..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/dir_a1b0b199cde94c7dd9a3a0ee49bcda2f.html +++ /dev/null @@ -1,63 +0,0 @@ - - - - - - -WinPcap: driver Directory Reference - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - - -
-
-
-
driver Directory Reference
-
-
- - - - - - -

-Files

file  jitter.h [code]
 
file  Packet.h [code]
 
-
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/dir_bfdf43d97a736b6e7ff8b75a9a91328c.html b/libs/WinPcap-413-173-b4/docs/html/dir_bfdf43d97a736b6e7ff8b75a9a91328c.html deleted file mode 100644 index cfb3d5b8..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/dir_bfdf43d97a736b6e7ff8b75a9a91328c.html +++ /dev/null @@ -1,61 +0,0 @@ - - - - - - -WinPcap: packetntx Directory Reference - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - - -
-
-
-
packetntx Directory Reference
-
-
- - - - -

-Directories

directory  driver
 
-
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/dir_c57c37b343d3a4fff0db7d2b1fca2561.html b/libs/WinPcap-413-173-b4/docs/html/dir_c57c37b343d3a4fff0db7d2b1fca2561.html deleted file mode 100644 index bbd65d4f..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/dir_c57c37b343d3a4fff0db7d2b1fca2561.html +++ /dev/null @@ -1,61 +0,0 @@ - - - - - - -WinPcap: packetNtx Directory Reference - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - - -
-
-
-
packetNtx Directory Reference
-
-
- - - - -

-Directories

directory  driver
 
-
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/dir_dea2d635c47186b23668f72adc643e04.html b/libs/WinPcap-413-173-b4/docs/html/dir_dea2d635c47186b23668f72adc643e04.html deleted file mode 100644 index 31c58873..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/dir_dea2d635c47186b23668f72adc643e04.html +++ /dev/null @@ -1,61 +0,0 @@ - - - - - - -WinPcap: funcs Directory Reference - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - - -
-
-
-
funcs Directory Reference
-
-
- - - - -

-Files

file  funcs/pcap.h [code]
 
-
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/dir_ec5e29f73a75356204c75c00d090044c.html b/libs/WinPcap-413-173-b4/docs/html/dir_ec5e29f73a75356204c75c00d090044c.html deleted file mode 100644 index 042b431a..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/dir_ec5e29f73a75356204c75c00d090044c.html +++ /dev/null @@ -1,61 +0,0 @@ - - - - - - -WinPcap: driver Directory Reference - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - - -
-
-
-
driver Directory Reference
-
-
- - - - -

-Files

file  ioctls.h [code]
 
-
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/doxygen.png b/libs/WinPcap-413-173-b4/docs/html/doxygen.png deleted file mode 100644 index 3ff17d807fd8aa003bed8bb2a69e8f0909592fd1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3779 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 diff --git a/libs/WinPcap-413-173-b4/docs/html/doxygen__groups_8txt.html b/libs/WinPcap-413-173-b4/docs/html/doxygen__groups_8txt.html deleted file mode 100644 index e9ff6d2d..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/doxygen__groups_8txt.html +++ /dev/null @@ -1,57 +0,0 @@ - - - - - - -WinPcap: doxygen_groups.txt File Reference - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - - -
-
-
-
doxygen_groups.txt File Reference
-
-
-
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/dynsections.js b/libs/WinPcap-413-173-b4/docs/html/dynsections.js deleted file mode 100644 index 1e6bf07f..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/dynsections.js +++ /dev/null @@ -1,104 +0,0 @@ -function toggleVisibility(linkObj) -{ - var base = $(linkObj).attr('id'); - var summary = $('#'+base+'-summary'); - var content = $('#'+base+'-content'); - var trigger = $('#'+base+'-trigger'); - var src=$(trigger).attr('src'); - if (content.is(':visible')===true) { - content.hide(); - summary.show(); - $(linkObj).addClass('closed').removeClass('opened'); - $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png'); - } else { - content.show(); - summary.hide(); - $(linkObj).removeClass('closed').addClass('opened'); - $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); - } - return false; -} - -function updateStripes() -{ - $('table.directory tr'). - removeClass('even').filter(':visible:even').addClass('even'); -} - -function toggleLevel(level) -{ - $('table.directory tr').each(function() { - var l = this.id.split('_').length-1; - var i = $('#img'+this.id.substring(3)); - var a = $('#arr'+this.id.substring(3)); - if (l - - - - - -WinPcap: File List - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - - -
-
-
-
File List
-
-
-
Here is a list of all files with brief descriptions:
-
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/ftv2blank.png b/libs/WinPcap-413-173-b4/docs/html/ftv2blank.png deleted file mode 100644 index 63c605bb4c3d941c921a4b6cfa74951e946bcb48..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 86 zcmeAS@N?(olHy`uVBq!ia0vp^0zfRr!3HExu9B$%QnH>djv*C{Z|`mdau^P8_z}#X h?B8GEpdi4(BFDx$je&7RrDQEg&ePS;Wt~$(69Dh@6T1Ka diff --git a/libs/WinPcap-413-173-b4/docs/html/ftv2doc.png b/libs/WinPcap-413-173-b4/docs/html/ftv2doc.png deleted file mode 100644 index 17edabff95f7b8da13c9516a04efe05493c29501..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 746 zcmV7=@pnbNXRFEm&G8P!&WHG=d)>K?YZ1bzou)2{$)) zumDct!>4SyxL;zgaG>wy`^Hv*+}0kUfCrz~BCOViSb$_*&;{TGGn2^x9K*!Sf0=lV zpP=7O;GA0*Jm*tTYj$IoXvimpnV4S1Z5f$p*f$Db2iq2zrVGQUz~yq`ahn7ck(|CE z7Gz;%OP~J6)tEZWDzjhL9h2hdfoU2)Nd%T<5Kt;Y0XLt&<@6pQx!nw*5`@bq#?l*?3z{Hlzoc=Pr>oB5(9i6~_&-}A(4{Q$>c>%rV&E|a(r&;?i5cQB=} zYSDU5nXG)NS4HEs0it2AHe2>shCyr7`6@4*6{r@8fXRbTA?=IFVWAQJL&H5H{)DpM#{W(GL+Idzf^)uRV@oB8u$ z8v{MfJbTiiRg4bza<41NAzrl{=3fl_D+$t+^!xlQ8S}{UtY`e z;;&9UhyZqQRN%2pot{*Ei0*4~hSF_3AH2@fKU!$NSflS>{@tZpDT4`M2WRTTVH+D? z)GFlEGGHe?koB}i|1w45!BF}N_q&^HJ&-tyR{(afC6H7|aml|tBBbv}55C5DNP8p3 z)~jLEO4Z&2hZmP^i-e%(@d!(E|KRafiU8Q5u(wU((j8un3OR*Hvj+t diff --git a/libs/WinPcap-413-173-b4/docs/html/ftv2folderclosed.png b/libs/WinPcap-413-173-b4/docs/html/ftv2folderclosed.png deleted file mode 100644 index bb8ab35edce8e97554e360005ee9fc5bffb36e66..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 616 zcmV-u0+;=XP)a9#ETzayK)T~Jw&MMH>OIr#&;dC}is*2Mqdf&akCc=O@`qC+4i z5Iu3w#1M@KqXCz8TIZd1wli&kkl2HVcAiZ8PUn5z_kG@-y;?yK06=cA0U%H0PH+kU zl6dp}OR(|r8-RG+YLu`zbI}5TlOU6ToR41{9=uz^?dGTNL;wIMf|V3`d1Wj3y!#6` zBLZ?xpKR~^2x}?~zA(_NUu3IaDB$tKma*XUdOZN~c=dLt_h_k!dbxm_*ibDM zlFX`g{k$X}yIe%$N)cn1LNu=q9_CS)*>A zsX_mM4L@`(cSNQKMFc$RtYbx{79#j-J7hk*>*+ZZhM4Hw?I?rsXCi#mRWJ=-0LGV5a-WR0Qgt<|Nqf)C-@80`5gIz45^_20000IqP)X=#(TiCT&PiIIVc55T}TU}EUh*{q$|`3@{d>{Tc9Bo>e= zfmF3!f>fbI9#GoEHh0f`i5)wkLpva0ztf%HpZneK?w-7AK@b4Itw{y|Zd3k!fH?q2 zlhckHd_V2M_X7+)U&_Xcfvtw60l;--DgZmLSw-Y?S>)zIqMyJ1#FwLU*%bl38ok+! zh78H87n`ZTS;uhzAR$M`zZ`bVhq=+%u9^$5jDplgxd44}9;IRqUH1YHH|@6oFe%z( zo4)_>E$F&^P-f(#)>(TrnbE>Pefs9~@iN=|)Rz|V`sGfHNrJ)0gJb8xx+SBmRf@1l zvuzt=vGfI)<-F9!o&3l?>9~0QbUDT(wFdnQPv%xdD)m*g%!20>Bc9iYmGAp<9YAa( z0QgYgTWqf1qN++Gqp z8@AYPTB3E|6s=WLG?xw0tm|U!o=&zd+H0oRYE;Dbx+Na9s^STqX|Gnq%H8s(nGDGJ j8vwW|`Ts`)fSK|Kx=IK@RG@g200000NkvXXu0mjfauFEA diff --git a/libs/WinPcap-413-173-b4/docs/html/ftv2lastnode.png b/libs/WinPcap-413-173-b4/docs/html/ftv2lastnode.png deleted file mode 100644 index 63c605bb4c3d941c921a4b6cfa74951e946bcb48..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 86 zcmeAS@N?(olHy`uVBq!ia0vp^0zfRr!3HExu9B$%QnH>djv*C{Z|`mdau^P8_z}#X h?B8GEpdi4(BFDx$je&7RrDQEg&ePS;Wt~$(69Dh@6T1Ka diff --git a/libs/WinPcap-413-173-b4/docs/html/ftv2link.png b/libs/WinPcap-413-173-b4/docs/html/ftv2link.png deleted file mode 100644 index 17edabff95f7b8da13c9516a04efe05493c29501..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 746 zcmV7=@pnbNXRFEm&G8P!&WHG=d)>K?YZ1bzou)2{$)) zumDct!>4SyxL;zgaG>wy`^Hv*+}0kUfCrz~BCOViSb$_*&;{TGGn2^x9K*!Sf0=lV zpP=7O;GA0*Jm*tTYj$IoXvimpnV4S1Z5f$p*f$Db2iq2zrVGQUz~yq`ahn7ck(|CE z7Gz;%OP~J6)tEZWDzjhL9h2hdfoU2)Nd%T<5Kt;Y0XLt&<@6pQx!nw*5`@bq#?l*?3z{Hlzoc=Pr>oB5(9i6~_&-}A(4{Q$>c>%rV&E|a(r&;?i5cQB=} zYSDU5nXG)NS4HEs0it2AHe2>shCyr7`6@4*6{r@8fXRbTA?=IFVWAQJL&H5H{)DpM#{W(GL+Idzf^)uRV@oB8u$ z8v{MfJbTiiRg4bza<41NAzrl{=3fl_D+$t+^!xlQ8S}{UtY`e z;;&9UhyZqQRN%2pot{*Ei0*4~hSF_3AH2@fKU!$NSflS>{@tZpDT4`M2WRTTVH+D? z)GFlEGGHe?koB}i|1w45!BF}N_q&^HJ&-tyR{(afC6H7|aml|tBBbv}55C5DNP8p3 z)~jLEO4Z&2hZmP^i-e%(@d!(E|KRafiU8Q5u(wU((j8un3OR*Hvj+t diff --git a/libs/WinPcap-413-173-b4/docs/html/ftv2mlastnode.png b/libs/WinPcap-413-173-b4/docs/html/ftv2mlastnode.png deleted file mode 100644 index 0b63f6d38c4b9ec907b820192ebe9724ed6eca22..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 246 zcmVkw!R34#Lv2LOS^S2tZA31X++9RY}n zChwn@Z)Wz*WWHH{)HDtJnq&A2hk$b-y(>?@z0iHr41EKCGp#T5?07*qoM6N<$f(V3Pvj6}9 diff --git a/libs/WinPcap-413-173-b4/docs/html/ftv2mnode.png b/libs/WinPcap-413-173-b4/docs/html/ftv2mnode.png deleted file mode 100644 index 0b63f6d38c4b9ec907b820192ebe9724ed6eca22..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 246 zcmVkw!R34#Lv2LOS^S2tZA31X++9RY}n zChwn@Z)Wz*WWHH{)HDtJnq&A2hk$b-y(>?@z0iHr41EKCGp#T5?07*qoM6N<$f(V3Pvj6}9 diff --git a/libs/WinPcap-413-173-b4/docs/html/ftv2node.png b/libs/WinPcap-413-173-b4/docs/html/ftv2node.png deleted file mode 100644 index 63c605bb4c3d941c921a4b6cfa74951e946bcb48..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 86 zcmeAS@N?(olHy`uVBq!ia0vp^0zfRr!3HExu9B$%QnH>djv*C{Z|`mdau^P8_z}#X h?B8GEpdi4(BFDx$je&7RrDQEg&ePS;Wt~$(69Dh@6T1Ka diff --git a/libs/WinPcap-413-173-b4/docs/html/ftv2plastnode.png b/libs/WinPcap-413-173-b4/docs/html/ftv2plastnode.png deleted file mode 100644 index c6ee22f937a07d1dbfc27c669d11f8ed13e2f152..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 229 zcmV^P)R?RzRoKvklcaQ%HF6%rK2&ZgO(-ihJ_C zzrKgp4jgO( fd_(yg|3PpEQb#9`a?Pz_00000NkvXXu0mjftR`5K diff --git a/libs/WinPcap-413-173-b4/docs/html/ftv2pnode.png b/libs/WinPcap-413-173-b4/docs/html/ftv2pnode.png deleted file mode 100644 index c6ee22f937a07d1dbfc27c669d11f8ed13e2f152..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 229 zcmV^P)R?RzRoKvklcaQ%HF6%rK2&ZgO(-ihJ_C zzrKgp4jgO( fd_(yg|3PpEQb#9`a?Pz_00000NkvXXu0mjftR`5K diff --git a/libs/WinPcap-413-173-b4/docs/html/ftv2splitbar.png b/libs/WinPcap-413-173-b4/docs/html/ftv2splitbar.png deleted file mode 100644 index fe895f2c58179b471a22d8320b39a4bd7312ec8e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 314 zcmeAS@N?(olHy`uVBq!ia0vp^Yzz!63>-{AmhX=Jf(#6djGiuzAr*{o?=JLmPLyc> z_*`QK&+BH@jWrYJ7>r6%keRM@)Qyv8R=enp0jiI>aWlGyB58O zFVR20d+y`K7vDw(hJF3;>dD*3-?v=<8M)@x|EEGLnJsniYK!2U1 Y!`|5biEc?d1`HDhPgg&ebxsLQ02F6;9RL6T diff --git a/libs/WinPcap-413-173-b4/docs/html/ftv2vertline.png b/libs/WinPcap-413-173-b4/docs/html/ftv2vertline.png deleted file mode 100644 index 63c605bb4c3d941c921a4b6cfa74951e946bcb48..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 86 zcmeAS@N?(olHy`uVBq!ia0vp^0zfRr!3HExu9B$%QnH>djv*C{Z|`mdau^P8_z}#X h?B8GEpdi4(BFDx$je&7RrDQEg&ePS;Wt~$(69Dh@6T1Ka diff --git a/libs/WinPcap-413-173-b4/docs/html/funcs_2pcap_8h.html b/libs/WinPcap-413-173-b4/docs/html/funcs_2pcap_8h.html deleted file mode 100644 index d47607ab..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/funcs_2pcap_8h.html +++ /dev/null @@ -1,270 +0,0 @@ - - - - - - -WinPcap: pcap.h File Reference - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - - - -
-
-
-
funcs/pcap.h File Reference
-
-
- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

Windows-specific Extensions

The functions in this section extend libpcap to offer advanced functionalities (like remote packet capture, packet buffer size variation or high-precision packet injection). Howerver, at the moment they can be used only in Windows.

-
PAirpcapHandle pcap_get_airpcap_handle (pcap_t *p)
 Returns the AirPcap handler associated with an adapter. This handler can be used to change the wireless-related settings of the CACE Technologies AirPcap wireless capture adapters. More...
 
int pcap_offline_filter (struct bpf_program *prog, const struct pcap_pkthdr *header, const u_char *pkt_data)
 Returns if a given filter applies to an offline packet. More...
 
int pcap_live_dump (pcap_t *p, char *filename, int maxsize, int maxpacks)
 Save a capture to file. More...
 
int pcap_live_dump_ended (pcap_t *p, int sync)
 Return the status of the kernel dump process, i.e. tells if one of the limits defined with pcap_live_dump() has been reached. More...
 
struct pcap_statpcap_stats_ex (pcap_t *p, int *pcap_stat_size)
 Return statistics on current capture. More...
 
int pcap_setbuff (pcap_t *p, int dim)
 Set the size of the kernel buffer associated with an adapter. More...
 
int pcap_setmode (pcap_t *p, int mode)
 Set the working mode of the interface p to mode. More...
 
int pcap_setmintocopy (pcap_t *p, int size)
 Set the minumum amount of data received by the kernel in a single call. More...
 
HANDLE pcap_getevent (pcap_t *p)
 Return the handle of the event associated with the interface p. More...
 
pcap_send_queuepcap_sendqueue_alloc (u_int memsize)
 Allocate a send queue. More...
 
void pcap_sendqueue_destroy (pcap_send_queue *queue)
 Destroy a send queue. More...
 
int pcap_sendqueue_queue (pcap_send_queue *queue, const struct pcap_pkthdr *pkt_header, const u_char *pkt_data)
 Add a packet to a send queue. More...
 
u_int pcap_sendqueue_transmit (pcap_t *p, pcap_send_queue *queue, int sync)
 Send a queue of raw packets to the network. More...
 
int pcap_findalldevs_ex (char *source, struct pcap_rmtauth *auth, pcap_if_t **alldevs, char *errbuf)
 Create a list of network devices that can be opened with pcap_open(). More...
 
int pcap_createsrcstr (char *source, int type, const char *host, const char *port, const char *name, char *errbuf)
 Accept a set of strings (host name, port, ...), and it returns the complete source string according to the new format (e.g. 'rpcap://1.2.3.4/eth0'). More...
 
int pcap_parsesrcstr (const char *source, int *type, char *host, char *port, char *name, char *errbuf)
 Parse the source string and returns the pieces in which the source can be split. More...
 
pcap_tpcap_open (const char *source, int snaplen, int flags, int read_timeout, struct pcap_rmtauth *auth, char *errbuf)
 Open a generic source in order to capture / send (WinPcap only) traffic. More...
 
struct pcap_samp * pcap_setsampling (pcap_t *p)
 Define a sampling method for packet capture. More...
 
SOCKET pcap_remoteact_accept (const char *address, const char *port, const char *hostlist, char *connectinghost, struct pcap_rmtauth *auth, char *errbuf)
 Block until a network connection is accepted (active mode only). More...
 
int pcap_remoteact_close (const char *host, char *errbuf)
 Drop an active connection (active mode only). More...
 
void pcap_remoteact_cleanup ()
 Clean the socket that is currently used in waiting active connections. More...
 
int pcap_remoteact_list (char *hostlist, char sep, int size, char *errbuf)
 Return the hostname of the host that have an active connection with us (active mode only). More...
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Unix-compatible Functions

These functions are part of the libpcap library, and therefore work both on Windows and on Linux.

Note
errbuf in pcap_open_live(), pcap_open_dead(), pcap_open_offline(), pcap_setnonblock(), pcap_getnonblock(), pcap_findalldevs(), pcap_lookupdev(), and pcap_lookupnet() is assumed to be able to hold at least PCAP_ERRBUF_SIZE chars.
-
typedef void(* pcap_handler )(u_char *user, const struct pcap_pkthdr *pkt_header, const u_char *pkt_data)
 Prototype of the callback function that receives the packets. More...
 
pcap_tpcap_open_live (const char *device, int snaplen, int promisc, int to_ms, char *ebuf)
 Open a live capture from the network. More...
 
pcap_tpcap_open_dead (int linktype, int snaplen)
 Create a pcap_t structure without starting a capture. More...
 
pcap_tpcap_open_offline (const char *fname, char *errbuf)
 Open a savefile in the tcpdump/libpcap format to read packets. More...
 
pcap_dumper_tpcap_dump_open (pcap_t *p, const char *fname)
 Open a file to write packets. More...
 
int pcap_setnonblock (pcap_t *p, int nonblock, char *errbuf)
 Switch between blocking and nonblocking mode. More...
 
int pcap_getnonblock (pcap_t *p, char *errbuf)
 Get the "non-blocking" state of an interface. More...
 
int pcap_findalldevs (pcap_if_t **alldevsp, char *errbuf)
 Construct a list of network devices that can be opened with pcap_open_live(). More...
 
void pcap_freealldevs (pcap_if_t *alldevsp)
 Free an interface list returned by pcap_findalldevs(). More...
 
char * pcap_lookupdev (char *errbuf)
 Return the first valid device in the system. More...
 
int pcap_lookupnet (const char *device, bpf_u_int32 *netp, bpf_u_int32 *maskp, char *errbuf)
 Return the subnet and netmask of an interface. More...
 
int pcap_dispatch (pcap_t *p, int cnt, pcap_handler callback, u_char *user)
 Collect a group of packets. More...
 
int pcap_loop (pcap_t *p, int cnt, pcap_handler callback, u_char *user)
 Collect a group of packets. More...
 
u_char * pcap_next (pcap_t *p, struct pcap_pkthdr *h)
 Return the next available packet. More...
 
int pcap_next_ex (pcap_t *p, struct pcap_pkthdr **pkt_header, const u_char **pkt_data)
 Read a packet from an interface or from an offline capture. More...
 
void pcap_breakloop (pcap_t *)
 set a flag that will force pcap_dispatch() or pcap_loop() to return rather than looping. More...
 
int pcap_sendpacket (pcap_t *p, u_char *buf, int size)
 Send a raw packet. More...
 
void pcap_dump (u_char *user, const struct pcap_pkthdr *h, const u_char *sp)
 Save a packet to disk. More...
 
long pcap_dump_ftell (pcap_dumper_t *)
 Return the file position for a "savefile". More...
 
int pcap_compile (pcap_t *p, struct bpf_program *fp, char *str, int optimize, bpf_u_int32 netmask)
 Compile a packet filter, converting an high level filtering expression (see Filtering expression syntax) in a program that can be interpreted by the kernel-level filtering engine. More...
 
int pcap_compile_nopcap (int snaplen_arg, int linktype_arg, struct bpf_program *program, char *buf, int optimize, bpf_u_int32 mask)
 Compile a packet filter without the need of opening an adapter. This function converts an high level filtering expression (see Filtering expression syntax) in a program that can be interpreted by the kernel-level filtering engine. More...
 
int pcap_setfilter (pcap_t *p, struct bpf_program *fp)
 Associate a filter to a capture. More...
 
void pcap_freecode (struct bpf_program *fp)
 Free a filter. More...
 
int pcap_datalink (pcap_t *p)
 Return the link layer of an adapter. More...
 
int pcap_list_datalinks (pcap_t *p, int **dlt_buf)
 list datalinks More...
 
int pcap_set_datalink (pcap_t *p, int dlt)
 Set the current data link type of the pcap descriptor to the type specified by dlt. -1 is returned on failure. More...
 
int pcap_datalink_name_to_val (const char *name)
 Translates a data link type name, which is a DLT_ name with the DLT_ removed, to the corresponding data link type value. The translation is case-insensitive. -1 is returned on failure. More...
 
const char * pcap_datalink_val_to_name (int dlt)
 Translates a data link type value to the corresponding data link type name. NULL is returned on failure. More...
 
const char * pcap_datalink_val_to_description (int dlt)
 Translates a data link type value to a short description of that data link type. NULL is returned on failure. More...
 
int pcap_snapshot (pcap_t *p)
 Return the dimension of the packet portion (in bytes) that is delivered to the application. More...
 
int pcap_is_swapped (pcap_t *p)
 returns true if the current savefile uses a different byte order than the current system. More...
 
int pcap_major_version (pcap_t *p)
 return the major version number of the pcap library used to write the savefile. More...
 
int pcap_minor_version (pcap_t *p)
 return the minor version number of the pcap library used to write the savefile. More...
 
FILE * pcap_file (pcap_t *p)
 Return the standard stream of an offline capture. More...
 
int pcap_stats (pcap_t *p, struct pcap_stat *ps)
 Return statistics on current capture. More...
 
void pcap_perror (pcap_t *p, char *prefix)
 print the text of the last pcap library error on stderr, prefixed by prefix. More...
 
char * pcap_geterr (pcap_t *p)
 return the error text pertaining to the last pcap library error. More...
 
char * pcap_strerror (int error)
 Provided in case strerror() isn't available. More...
 
const char * pcap_lib_version (void)
 Returns a pointer to a string giving information about the version of the libpcap library being used; note that it contains more information than just a version number. More...
 
void pcap_close (pcap_t *p)
 close the files associated with p and deallocates resources. More...
 
FILE * pcap_dump_file (pcap_dumper_t *p)
 return the standard I/O stream of the 'savefile' opened by pcap_dump_open(). More...
 
int pcap_dump_flush (pcap_dumper_t *p)
 Flushes the output buffer to the savefile,'' so that any packets written with pcap_dump() but not yet written to thesavefile'' will be written. -1 is returned on error, 0 on success. More...
 
void pcap_dump_close (pcap_dumper_t *p)
 Closes a savefile. More...
 
-
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/funcs_2pcap_8h_source.html b/libs/WinPcap-413-173-b4/docs/html/funcs_2pcap_8h_source.html deleted file mode 100644 index 36a6cdcb..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/funcs_2pcap_8h_source.html +++ /dev/null @@ -1,308 +0,0 @@ - - - - - - -WinPcap: pcap.h Source File - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - - - -
-
-
-
funcs/pcap.h
-
-
-Go to the documentation of this file.
1 
-
17 //\{
-
18 
-
27 typedef void (*pcap_handler)(u_char *user, const struct pcap_pkthdr *pkt_header,
-
28  const u_char *pkt_data);
-
29 
-
63 pcap_t *pcap_open_live(const char *device, int snaplen, int promisc, int to_ms, char *ebuf);
-
64 
-
65 
-
75 pcap_t *pcap_open_dead(int linktype, int snaplen);
-
76 
-
77 
-
91 pcap_t *pcap_open_offline(const char *fname, char *errbuf);
-
92 
-
105 pcap_dumper_t *pcap_dump_open(pcap_t *p, const char *fname);
-
106 
-
124 int pcap_setnonblock(pcap_t *p, int nonblock, char *errbuf);
-
125 
-
126 
-
136 int pcap_getnonblock(pcap_t *p, char *errbuf);
-
137 
-
153 int pcap_findalldevs(pcap_if_t **alldevsp, char *errbuf);
-
154 
-
161 void pcap_freealldevs(pcap_if_t *alldevsp);
-
162 
-
173 char *pcap_lookupdev(char *errbuf);
-
174 
-
175 
-
187 int pcap_lookupnet(const char *device, bpf_u_int32 *netp, bpf_u_int32 *maskp, char *errbuf);
-
188 
-
227 int pcap_dispatch(pcap_t *p, int cnt, pcap_handler callback, u_char *user);
-
228 
-
229 
-
244 int pcap_loop(pcap_t *p, int cnt, pcap_handler callback, u_char *user);
-
245 
-
246 
-
261 u_char *pcap_next(pcap_t *p, struct pcap_pkthdr *h);
-
262 
-
279 int pcap_next_ex(pcap_t *p, struct pcap_pkthdr **pkt_header, const u_char **pkt_data);
-
280 
-
302 void pcap_breakloop(pcap_t *);
-
303 
-
315 int pcap_sendpacket(pcap_t *p, u_char *buf, int size);
-
316 
-
327 void pcap_dump(u_char *user, const struct pcap_pkthdr *h, const u_char *sp);
-
328 
- -
338 
-
357 int pcap_compile(pcap_t *p, struct bpf_program *fp, char *str, int optimize, bpf_u_int32 netmask);
-
358 
-
378 int pcap_compile_nopcap(int snaplen_arg, int linktype_arg, struct bpf_program *program, char *buf, int optimize, bpf_u_int32 mask);
-
379 
-
380 
-
391 int pcap_setfilter(pcap_t *p, struct bpf_program *fp);
-
392 
-
393 
-
404 void pcap_freecode(struct bpf_program *fp);
-
405 
-
485 int pcap_datalink(pcap_t *p);
-
486 
-
496 int pcap_list_datalinks(pcap_t *p, int **dlt_buf);
-
497 
-
500 int pcap_set_datalink(pcap_t *p, int dlt);
-
501 
-
506 int pcap_datalink_name_to_val(const char *name);
-
507 
-
511 const char *pcap_datalink_val_to_name(int dlt);
-
512 
-
516 const char *pcap_datalink_val_to_description(int dlt);
-
517 
-
518 
-
526 int pcap_snapshot(pcap_t *p);
-
527 
-
528 
-
532 int pcap_is_swapped(pcap_t *p);
-
533 
-
534 
-
539 int pcap_major_version(pcap_t *p);
-
540 
-
541 
-
546 int pcap_minor_version(pcap_t *p);
-
547 
-
562 FILE *pcap_file(pcap_t *p);
-
563 
-
578 int pcap_stats(pcap_t *p, struct pcap_stat *ps);
-
579 
-
584 void pcap_perror(pcap_t *p, char *prefix);
-
585 
-
586 
-
596 char *pcap_geterr(pcap_t *p);
-
597 
-
598 
-
604 char *pcap_strerror(int error);
-
605 
-
610 const char *pcap_lib_version(void);
-
611 
-
617 void pcap_close(pcap_t *p);
-
618 
-
620 FILE *pcap_dump_file(pcap_dumper_t *p);
-
621 
- -
627 
- -
633 
-
634 //\}
-
635 // End of Unix-compatible functions
-
636 
-
637 
-
638 
-
639 
-
640 
-
641 
-
642 
-
649 //\{
-
650 
- -
668 
-
686 int pcap_offline_filter(struct bpf_program *prog, const struct pcap_pkthdr *header, const u_char *pkt_data);
-
687 
-
712 int pcap_live_dump(pcap_t *p, char *filename, int maxsize, int maxpacks);
-
713 
-
714 
-
731 int pcap_live_dump_ended(pcap_t *p, int sync);
-
732 
-
733 
-
757 struct pcap_stat *pcap_stats_ex(pcap_t *p, int *pcap_stat_size);
-
758 
-
768 int pcap_setbuff(pcap_t *p, int dim);
-
769 
-
770 
-
777 int pcap_setmode(pcap_t *p, int mode);
-
778 
-
779 
-
793 int pcap_setmintocopy(pcap_t *p, int size);
-
794 
-
795 
-
796 
-
806 HANDLE pcap_getevent(pcap_t *p);
-
807 
-
820 pcap_send_queue* pcap_sendqueue_alloc(u_int memsize);
-
821 
- -
829 
-
844 int pcap_sendqueue_queue(pcap_send_queue* queue, const struct pcap_pkthdr *pkt_header, const u_char *pkt_data);
-
845 
-
846 
-
870 u_int pcap_sendqueue_transmit(pcap_t *p, pcap_send_queue* queue, int sync);
-
871 
-
872 
-
935 int pcap_findalldevs_ex(char *source, struct pcap_rmtauth *auth, pcap_if_t **alldevs, char *errbuf);
-
936 
-
937 
-
981 int pcap_createsrcstr(char *source, int type, const char *host, const char *port, const char *name, char *errbuf);
-
982 
-
983 
-
1039 int pcap_parsesrcstr(const char *source, int *type, char *host, char *port, char *name, char *errbuf);
-
1040 
-
1106 pcap_t *pcap_open(const char *source, int snaplen, int flags, int read_timeout, struct pcap_rmtauth *auth, char *errbuf);
-
1107 
-
1123 struct pcap_samp *pcap_setsampling(pcap_t *p);
-
1124 
-
1184 SOCKET pcap_remoteact_accept(const char *address, const char *port, const char *hostlist, char *connectinghost, struct pcap_rmtauth *auth, char *errbuf);
-
1185 
-
1202 int pcap_remoteact_close(const char *host, char *errbuf);
-
1203 
-
1222 void pcap_remoteact_cleanup();
-
1223 
-
1244 int pcap_remoteact_list(char *hostlist, char sep, int size, char *errbuf);
-
1245 
-
1246 //\}
-
1247 // End of Windows-specific extensions
-
1248 
-
1249 
-
1250 
-
int pcap_sendqueue_queue(pcap_send_queue *queue, const struct pcap_pkthdr *pkt_header, const u_char *pkt_data)
Add a packet to a send queue.
-
char * pcap_lookupdev(char *errbuf)
Return the first valid device in the system.
-
Header of a packet in the dump file.
Definition: incs/pcap.h:126
-
int pcap_findalldevs_ex(char *source, struct pcap_rmtauth *auth, pcap_if_t **alldevs, char *errbuf)
Create a list of network devices that can be opened with pcap_open().
-
int pcap_list_datalinks(pcap_t *p, int **dlt_buf)
list datalinks
-
pcap_t * pcap_open(const char *source, int snaplen, int flags, int read_timeout, struct pcap_rmtauth *auth, char *errbuf)
Open a generic source in order to capture / send (WinPcap only) traffic.
-
pcap_send_queue * pcap_sendqueue_alloc(u_int memsize)
Allocate a send queue.
-
A queue of raw packets that will be sent to the network with pcap_sendqueue_transmit().
-
struct pcap pcap_t
Descriptor of an open capture instance. This structure is opaque to the user, that handles its conten...
Definition: incs/pcap.h:70
-
pcap_t * pcap_open_dead(int linktype, int snaplen)
Create a pcap_t structure without starting a capture.
-
int pcap_is_swapped(pcap_t *p)
returns true if the current savefile uses a different byte order than the current system...
-
void(* pcap_handler)(u_char *user, const struct pcap_pkthdr *pkt_header, const u_char *pkt_data)
Prototype of the callback function that receives the packets.
Definition: funcs/pcap.h:27
-
void pcap_dump(u_char *user, const struct pcap_pkthdr *h, const u_char *sp)
Save a packet to disk.
-
int pcap_datalink(pcap_t *p)
Return the link layer of an adapter.
-
const char * pcap_datalink_val_to_description(int dlt)
Translates a data link type value to a short description of that data link type. NULL is returned on ...
-
long pcap_dump_ftell(pcap_dumper_t *)
Return the file position for a "savefile".
-
void pcap_freealldevs(pcap_if_t *alldevsp)
Free an interface list returned by pcap_findalldevs().
-
Structure that keeps statistical values on an interface.
Definition: incs/pcap.h:136
-
char * pcap_strerror(int error)
Provided in case strerror() isn't available.
-
int pcap_live_dump(pcap_t *p, char *filename, int maxsize, int maxpacks)
Save a capture to file.
-
char * pcap_geterr(pcap_t *p)
return the error text pertaining to the last pcap library error.
-
int pcap_createsrcstr(char *source, int type, const char *host, const char *port, const char *name, char *errbuf)
Accept a set of strings (host name, port, ...), and it returns the complete source string according t...
-
int pcap_getnonblock(pcap_t *p, char *errbuf)
Get the "non-blocking" state of an interface.
-
HANDLE pcap_getevent(pcap_t *p)
Return the handle of the event associated with the interface p.
-
pcap_t * pcap_open_live(const char *device, int snaplen, int promisc, int to_ms, char *ebuf)
Open a live capture from the network.
-
int pcap_lookupnet(const char *device, bpf_u_int32 *netp, bpf_u_int32 *maskp, char *errbuf)
Return the subnet and netmask of an interface.
-
int pcap_compile(pcap_t *p, struct bpf_program *fp, char *str, int optimize, bpf_u_int32 netmask)
Compile a packet filter, converting an high level filtering expression (see Filtering expression synt...
-
int pcap_snapshot(pcap_t *p)
Return the dimension of the packet portion (in bytes) that is delivered to the application.
-
struct pcap_stat * pcap_stats_ex(pcap_t *p, int *pcap_stat_size)
Return statistics on current capture.
-
int pcap_setnonblock(pcap_t *p, int nonblock, char *errbuf)
Switch between blocking and nonblocking mode.
-
PAirpcapHandle pcap_get_airpcap_handle(pcap_t *p)
Returns the AirPcap handler associated with an adapter. This handler can be used to change the wirele...
-
int pcap_next_ex(pcap_t *p, struct pcap_pkthdr **pkt_header, const u_char **pkt_data)
Read a packet from an interface or from an offline capture.
-
void pcap_remoteact_cleanup()
Clean the socket that is currently used in waiting active connections.
-
u_char * pcap_next(pcap_t *p, struct pcap_pkthdr *h)
Return the next available packet.
-
void pcap_breakloop(pcap_t *)
set a flag that will force pcap_dispatch() or pcap_loop() to return rather than looping.
-
const char * pcap_datalink_val_to_name(int dlt)
Translates a data link type value to the corresponding data link type name. NULL is returned on failu...
-
int pcap_dump_flush(pcap_dumper_t *p)
Flushes the output buffer to the savefile,'' so that any packets written with pcap_dump() but not yet...
-
struct pcap_samp * pcap_setsampling(pcap_t *p)
Define a sampling method for packet capture.
-
int pcap_parsesrcstr(const char *source, int *type, char *host, char *port, char *name, char *errbuf)
Parse the source string and returns the pieces in which the source can be split.
-
int pcap_loop(pcap_t *p, int cnt, pcap_handler callback, u_char *user)
Collect a group of packets.
-
int pcap_sendpacket(pcap_t *p, u_char *buf, int size)
Send a raw packet.
-
int pcap_setbuff(pcap_t *p, int dim)
Set the size of the kernel buffer associated with an adapter.
-
int pcap_setmode(pcap_t *p, int mode)
Set the working mode of the interface p to mode.
-
int pcap_dispatch(pcap_t *p, int cnt, pcap_handler callback, u_char *user)
Collect a group of packets.
-
u_int pcap_sendqueue_transmit(pcap_t *p, pcap_send_queue *queue, int sync)
Send a queue of raw packets to the network.
-
void pcap_dump_close(pcap_dumper_t *p)
Closes a savefile.
-
int pcap_minor_version(pcap_t *p)
return the minor version number of the pcap library used to write the savefile.
-
FILE * pcap_file(pcap_t *p)
Return the standard stream of an offline capture.
-
int pcap_remoteact_close(const char *host, char *errbuf)
Drop an active connection (active mode only).
-
struct pcap_dumper pcap_dumper_t
libpcap savefile descriptor.
Definition: incs/pcap.h:71
-
int pcap_compile_nopcap(int snaplen_arg, int linktype_arg, struct bpf_program *program, char *buf, int optimize, bpf_u_int32 mask)
Compile a packet filter without the need of opening an adapter. This function converts an high level ...
-
int pcap_setfilter(pcap_t *p, struct bpf_program *fp)
Associate a filter to a capture.
-
int pcap_remoteact_list(char *hostlist, char sep, int size, char *errbuf)
Return the hostname of the host that have an active connection with us (active mode only)...
-
struct _AirpcapHandle * PAirpcapHandle
-
const char * pcap_lib_version(void)
Returns a pointer to a string giving information about the version of the libpcap library being used;...
-
int pcap_datalink_name_to_val(const char *name)
Translates a data link type name, which is a DLT_ name with the DLT_ removed, to the corresponding da...
-
void pcap_perror(pcap_t *p, char *prefix)
print the text of the last pcap library error on stderr, prefixed by prefix.
-
pcap_dumper_t * pcap_dump_open(pcap_t *p, const char *fname)
Open a file to write packets.
-
FILE * pcap_dump_file(pcap_dumper_t *p)
return the standard I/O stream of the 'savefile' opened by pcap_dump_open().
-
SOCKET pcap_remoteact_accept(const char *address, const char *port, const char *hostlist, char *connectinghost, struct pcap_rmtauth *auth, char *errbuf)
Block until a network connection is accepted (active mode only).
-
Item in a list of interfaces, used by pcap_findalldevs().
Definition: incs/pcap.h:148
-
int pcap_setmintocopy(pcap_t *p, int size)
Set the minumum amount of data received by the kernel in a single call.
-
int pcap_live_dump_ended(pcap_t *p, int sync)
Return the status of the kernel dump process, i.e. tells if one of the limits defined with pcap_live_...
-
pcap_t * pcap_open_offline(const char *fname, char *errbuf)
Open a savefile in the tcpdump/libpcap format to read packets.
-
int pcap_offline_filter(struct bpf_program *prog, const struct pcap_pkthdr *header, const u_char *pkt_data)
Returns if a given filter applies to an offline packet.
-
u_int bpf_u_int32
32-bit unsigned integer
Definition: incs/pcap.h:67
-
int pcap_set_datalink(pcap_t *p, int dlt)
Set the current data link type of the pcap descriptor to the type specified by dlt. -1 is returned on failure.
-
int pcap_findalldevs(pcap_if_t **alldevsp, char *errbuf)
Construct a list of network devices that can be opened with pcap_open_live().
-
void pcap_sendqueue_destroy(pcap_send_queue *queue)
Destroy a send queue.
-
void pcap_close(pcap_t *p)
close the files associated with p and deallocates resources.
-
void pcap_freecode(struct bpf_program *fp)
Free a filter.
-
int pcap_major_version(pcap_t *p)
return the major version number of the pcap library used to write the savefile.
-
int pcap_stats(pcap_t *p, struct pcap_stat *ps)
Return statistics on current capture.
-
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/globals_c.html b/libs/WinPcap-413-173-b4/docs/html/globals_c.html deleted file mode 100644 index 45acb3bb..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/globals_c.html +++ /dev/null @@ -1,110 +0,0 @@ - - - - - - -WinPcap: Globals - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - - - - -
-
-
Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
- -

- c -

-
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/globals_d.html b/libs/WinPcap-413-173-b4/docs/html/globals_d.html deleted file mode 100644 index 67bae097..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/globals_d.html +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - -WinPcap: Globals - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - - - - -
-
-
Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
- -

- d -

-
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/globals_e.html b/libs/WinPcap-413-173-b4/docs/html/globals_e.html deleted file mode 100644 index dd377988..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/globals_e.html +++ /dev/null @@ -1,122 +0,0 @@ - - - - - - -WinPcap: Globals - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - - - - -
-
-
Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
- -

- e -

-
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/globals_g.html b/libs/WinPcap-413-173-b4/docs/html/globals_g.html deleted file mode 100644 index 6bcf8181..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/globals_g.html +++ /dev/null @@ -1,110 +0,0 @@ - - - - - - -WinPcap: Globals - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - - - - -
-
-
Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
- -

- g -

-
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/globals_i.html b/libs/WinPcap-413-173-b4/docs/html/globals_i.html deleted file mode 100644 index 291e36b6..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/globals_i.html +++ /dev/null @@ -1,98 +0,0 @@ - - - - - - -WinPcap: Globals - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - - - - -
-
-
Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
- -

- i -

-
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/globals_j.html b/libs/WinPcap-413-173-b4/docs/html/globals_j.html deleted file mode 100644 index 536f24de..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/globals_j.html +++ /dev/null @@ -1,128 +0,0 @@ - - - - - - -WinPcap: Globals - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - - - - -
-
-
Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
- -

- j -

-
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/globals_k.html b/libs/WinPcap-413-173-b4/docs/html/globals_k.html deleted file mode 100644 index 6b8cc893..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/globals_k.html +++ /dev/null @@ -1,92 +0,0 @@ - - - - - - -WinPcap: Globals - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - - - - -
-
-
Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
- -

- k -

    -
  • KERNEL_EVENT_NAMESPACE -: Packet.h -
  • -
-
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/globals_m.html b/libs/WinPcap-413-173-b4/docs/html/globals_m.html deleted file mode 100644 index 230dbb3d..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/globals_m.html +++ /dev/null @@ -1,128 +0,0 @@ - - - - - - -WinPcap: Globals - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - - - - -
-
-
Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
- -

- m -

-
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/globals_o.html b/libs/WinPcap-413-173-b4/docs/html/globals_o.html deleted file mode 100644 index 83422338..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/globals_o.html +++ /dev/null @@ -1,98 +0,0 @@ - - - - - - -WinPcap: Globals - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - - - - -
-
-
Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
- -

- o -

-
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/globals_s.html b/libs/WinPcap-413-173-b4/docs/html/globals_s.html deleted file mode 100644 index dec93b87..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/globals_s.html +++ /dev/null @@ -1,116 +0,0 @@ - - - - - - -WinPcap: Globals - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - - - - -
-
-
Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
- -

- s -

-
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/globals_t.html b/libs/WinPcap-413-173-b4/docs/html/globals_t.html deleted file mode 100644 index 36b15d30..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/globals_t.html +++ /dev/null @@ -1,95 +0,0 @@ - - - - - - -WinPcap: Globals - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - - - - -
-
-
Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
- -

- t -

-
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/globals_u.html b/libs/WinPcap-413-173-b4/docs/html/globals_u.html deleted file mode 100644 index 240aa154..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/globals_u.html +++ /dev/null @@ -1,98 +0,0 @@ - - - - - - -WinPcap: Globals - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - - - - -
-
-
Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
- -

- u -

-
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/group__NPF__code.html b/libs/WinPcap-413-173-b4/docs/html/group__NPF__code.html deleted file mode 100644 index 20d501e5..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/group__NPF__code.html +++ /dev/null @@ -1,1671 +0,0 @@ - - - - - - -WinPcap: NPF functions - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

NTSTATUS DriverEntry (IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath)
 The initialization routine of the driver. More...
 
PWCHAR getAdaptersList (VOID)
 Returns the list of the MACs available on the system. More...
 
PKEY_VALUE_PARTIAL_INFORMATION getTcpBindings (VOID)
 Returns the MACs that bind to TCP/IP. More...
 
BOOLEAN NPF_CreateDevice (IN OUT PDRIVER_OBJECT adriverObjectP, IN PUNICODE_STRING amacNameP)
 Creates a device for a given MAC. More...
 
NTSTATUS NPF_Open (IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
 Opens a new instance of the driver. More...
 
VOID NPF_OpenAdapterComplete (IN NDIS_HANDLE ProtocolBindingContext, IN NDIS_STATUS Status, IN NDIS_STATUS OpenErrorStatus)
 Ends the opening of an adapter. More...
 
NTSTATUS NPF_Cleanup (IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
 Closes an instance of the driver. More...
 
NTSTATUS NPF_Close (IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
 
VOID NPF_CloseAdapterComplete (IN NDIS_HANDLE ProtocolBindingContext, IN NDIS_STATUS Status)
 Ends the closing of an adapter. More...
 
NDIS_STATUS NPF_tap (IN NDIS_HANDLE ProtocolBindingContext, IN NDIS_HANDLE MacReceiveContext, IN PVOID HeaderBuffer, IN UINT HeaderBufferSize, IN PVOID LookAheadBuffer, IN UINT LookaheadBufferSize, IN UINT PacketSize)
 Callback invoked by NDIS when a packet arrives from the network. More...
 
VOID NPF_TransferDataComplete (IN NDIS_HANDLE ProtocolBindingContext, IN PNDIS_PACKET Packet, IN NDIS_STATUS Status, IN UINT BytesTransferred)
 Ends the transfer of a packet. More...
 
VOID NPF_ReceiveComplete (IN NDIS_HANDLE ProtocolBindingContext)
 Callback function that signals the end of a packet reception. More...
 
NTSTATUS NPF_IoControl (IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
 Handles the IOCTL calls. More...
 
VOID NPF_RequestComplete (IN NDIS_HANDLE ProtocolBindingContext, IN PNDIS_REQUEST pRequest, IN NDIS_STATUS Status)
 Ends an OID request. More...
 
NTSTATUS NPF_Write (IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
 Writes a raw packet to the network. More...
 
INT NPF_BufferedWrite (IN PIRP Irp, IN PCHAR UserBuff, IN ULONG UserBuffSize, BOOLEAN sync)
 Writes a buffer of raw packets to the network. More...
 
VOID NPF_WaitEndOfBufferedWrite (POPEN_INSTANCE Open)
 Waits the completion of all the sends performed by NPF_BufferedWrite. More...
 
VOID NPF_SendComplete (IN NDIS_HANDLE ProtocolBindingContext, IN PNDIS_PACKET pPacket, IN NDIS_STATUS Status)
 Ends a send operation. More...
 
VOID NPF_ResetComplete (IN NDIS_HANDLE ProtocolBindingContext, IN NDIS_STATUS Status)
 Ends a reset of the adapter. More...
 
VOID NPF_Status (IN NDIS_HANDLE ProtocolBindingContext, IN NDIS_STATUS Status, IN PVOID StatusBuffer, IN UINT StatusBufferSize)
 Callback for NDIS StatusHandler. Not used by NPF. More...
 
VOID NPF_StatusComplete (IN NDIS_HANDLE ProtocolBindingContext)
 Callback for NDIS StatusCompleteHandler. Not used by NPF. More...
 
VOID NPF_Unload (IN PDRIVER_OBJECT DriverObject)
 Function called by the OS when NPF is unloaded. More...
 
NTSTATUS NPF_Read (IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
 Function that serves the user's reads. More...
 
NTSTATUS NPF_ReadRegistry (IN PWSTR *MacDriverName, IN PWSTR *PacketDriverName, IN PUNICODE_STRING RegistryPath)
 Reads the registry keys associated woth NPF if the driver is manually installed via the control panel. More...
 
NTSTATUS NPF_QueryRegistryRoutine (IN PWSTR ValueName, IN ULONG ValueType, IN PVOID ValueData, IN ULONG ValueLength, IN PVOID Context, IN PVOID EntryContext)
 Function used by NPF_ReadRegistry() to quesry the registry keys associated woth NPF if the driver is manually installed via the control panel. More...
 
VOID NPF_BindAdapter (OUT PNDIS_STATUS Status, IN NDIS_HANDLE BindContext, IN PNDIS_STRING DeviceName, IN PVOID SystemSpecific1, IN PVOID SystemSpecific2)
 Callback for NDIS BindAdapterHandler. Not used by NPF. More...
 
VOID NPF_UnbindAdapter (OUT PNDIS_STATUS Status, IN NDIS_HANDLE ProtocolBindingContext, IN NDIS_HANDLE UnbindContext)
 Callback for NDIS UnbindAdapterHandler. More...
 
NTSTATUS NPF_OpenDumpFile (POPEN_INSTANCE Open, PUNICODE_STRING fileName, BOOLEAN append)
 Creates the file that will receive the packets when the driver is in dump mode. More...
 
NTSTATUS NPF_StartDump (POPEN_INSTANCE Open)
 Starts dump to file. More...
 
VOID NPF_DumpThread (PVOID Open)
 The dump thread. More...
 
NTSTATUS NPF_SaveCurrentBuffer (POPEN_INSTANCE Open)
 Saves the content of the packet buffer to the file associated with current instance. More...
 
VOID NPF_WriteDumpFile (PFILE_OBJECT FileObject, PLARGE_INTEGER Offset, ULONG Length, PMDL Mdl, PIO_STATUS_BLOCK IoStatusBlock)
 Writes a block of packets on the dump file. More...
 
NTSTATUS NPF_CloseDumpFile (POPEN_INSTANCE Open)
 Closes the dump file associated with an instance of the driver. More...
 
BOOLEAN NPF_StartUsingBinding (IN POPEN_INSTANCE pOpen)
 
VOID NPF_StopUsingBinding (IN POPEN_INSTANCE pOpen)
 
VOID NPF_CloseBinding (IN POPEN_INSTANCE pOpen)
 
BOOLEAN NPF_StartUsingOpenInstance (IN POPEN_INSTANCE pOpen)
 
VOID NPF_StopUsingOpenInstance (IN POPEN_INSTANCE pOpen)
 
VOID NPF_CloseOpenInstance (IN POPEN_INSTANCE pOpen)
 
NTSTATUS NPF_GetDeviceMTU (IN POPEN_INSTANCE pOpen, IN PIRP pIrp, OUT PUINT pMtu)
 
UINT GetBuffOccupation (POPEN_INSTANCE Open)
 Returns the amount of bytes present in the packet buffer. More...
 
JIT_BPF_FilterBPF_jitter (struct bpf_insn *fp, INT nins)
 BPF jitter, builds an x86 function from a BPF program. More...
 
BPF_filter_function BPFtoX86 (struct bpf_insn *ins, UINT nins, INT *mem)
 Translates a set of BPF instructions in a set of x86 ones. More...
 
void BPF_Destroy_JIT_Filter (JIT_BPF_Filter *Filter)
 Deletes a filtering function that was previously created by BPF_jitter(). More...
 
-

Detailed Description

-

Function Documentation

- -
-
- - - - - - - - -
void BPF_Destroy_JIT_Filter (JIT_BPF_FilterFilter)
-
- -

Deletes a filtering function that was previously created by BPF_jitter().

-
Parameters
- - -
FilterThe filter to destroy.
-
-
-

This function frees the variuos buffers (code, memory, etc.) associated with a filtering function.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
JIT_BPF_Filter* BPF_jitter (struct bpf_insn * fp,
INT nins 
)
-
- -

BPF jitter, builds an x86 function from a BPF program.

-
Parameters
- - - -
fpThe BPF pseudo-assembly filter that will be translated into x86 code.
ninsNumber of instructions of the input filter.
-
-
-
Returns
The JIT_BPF_Filter structure containing the x86 filtering binary.
-

BPF_jitter allocates the buffers for the new native filter and then translates the program pointed by fp calling BPFtoX86().

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
BPF_filter_function BPFtoX86 (struct bpf_insn * ins,
UINT nins,
INT * mem 
)
-
- -

Translates a set of BPF instructions in a set of x86 ones.

-
Parameters
- - - - -
insPointer to the BPF instructions that will be translated into x86 code.
ninsNumber of instructions to translate.
memMemory used by the x86 function to emulate the RAM of the BPF pseudo processor.
-
-
-
Returns
The x86 filtering function.
-

This function does the hard work for the JIT compilation. It takes a group of BPF pseudo instructions and through the instruction macros defined in jitter.h it is able to create an function directly executable by NPF.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
NTSTATUS DriverEntry (IN PDRIVER_OBJECT DriverObject,
IN PUNICODE_STRING RegistryPath 
)
-
- -

The initialization routine of the driver.

-
Parameters
- - - -
DriverObjectThe driver object of NPF created by the system.
RegistryPathThe registry path containing the keys related to the driver.
-
-
-
Returns
A string containing a list of network adapters.
-

DriverEntry is a mandatory function in a device driver. Like the main() of a user level program, it is called by the system when the driver is loaded in memory and started. Its purpose is to initialize the driver, performing all the allocations and the setup. In particular, DriverEntry registers all the driver's I/O callbacks, creates the devices, defines NPF as a protocol inside NDIS.

- -
-
- -
-
- - - - - - - - -
PWCHAR getAdaptersList (VOID )
-
- -

Returns the list of the MACs available on the system.

-
Returns
A string containing a list of network adapters.
-

The list of adapters is retrieved from the SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318} registry key. NPF tries to create its bindings from this list. In this way it is possible to be loaded and unloaded dynamically without passing from the control panel.

- -
-
- -
-
- - - - - - - - -
UINT GetBuffOccupation (POPEN_INSTANCE Open)
-
- -

Returns the amount of bytes present in the packet buffer.

-
Parameters
- - -
OpenThe NPF instance that closes the file.
-
-
- -
-
- -
-
- - - - - - - - -
PKEY_VALUE_PARTIAL_INFORMATION getTcpBindings (VOID )
-
- -

Returns the MACs that bind to TCP/IP.

-
Returns
Pointer to the registry key containing the list of adapters on which TCP/IP is bound.
-

If getAdaptersList() fails, NPF tries to obtain the TCP/IP bindings through this function.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
VOID NPF_BindAdapter (OUT PNDIS_STATUS Status,
IN NDIS_HANDLE BindContext,
IN PNDIS_STRING DeviceName,
IN PVOID SystemSpecific1,
IN PVOID SystemSpecific2 
)
-
- -

Callback for NDIS BindAdapterHandler. Not used by NPF.

-

Function called by NDIS when a new adapter is installed on the machine With Plug and Play.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
INT NPF_BufferedWrite (IN PIRP Irp,
IN PCHAR UserBuff,
IN ULONG UserBuffSize,
BOOLEAN sync 
)
-
- -

Writes a buffer of raw packets to the network.

-
Parameters
- - - - - -
IrpPointer to the IRP containing the user request.
UserBuffPointer to the buffer containing the packets to send.
UserBuffSizeSize of the buffer with the packets.
syncIf set to TRUE, the packets are transmitted respecting their timestamps.
-
-
-
Returns
The amount of bytes actually sent. If the return value is smaller than the Size parameter, an error occurred during the send. The error can be caused by an adapter problem or by an inconsistent/bogus user buffer.
-

This function is called by the OS in consequence of a BIOCSENDPACKETSNOSYNC or a BIOCSENDPACKETSSYNC IOCTL. The buffer received as input parameter contains an arbitrary number of packets, each of which preceded by a sf_pkthdr structure. NPF_BufferedWrite() scans the buffer and sends every packet via the NdisSend() function. When Sync is set to TRUE, the packets are synchronized with the KeQueryPerformanceCounter() function. This requires a remarkable amount of CPU, but allows to respect the timestamps associated with packets with a precision of some microseconds (depending on the precision of the performance counter of the machine). If Sync is false, the timestamps are ignored and the packets are sent as fat as possible.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
NTSTATUS NPF_Cleanup (IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp 
)
-
- -

Closes an instance of the driver.

-
Parameters
- - - -
DeviceObjectPointer to the device object utilized by the user.
IrpPointer to the IRP containing the user request.
-
-
-
Returns
The status of the operation. See ntstatus.h in the DDK.
-

This function is called when a running instance of the driver is closed by the user with a CloseHandle(). It stops the capture/monitoring/dump process, deallocates the memory and the objects associated with the instance and closing the files. The network adapter is then closed with a call to NdisCloseAdapter.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
NTSTATUS NPF_Close (IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp 
)
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
VOID NPF_CloseAdapterComplete (IN NDIS_HANDLE ProtocolBindingContext,
IN NDIS_STATUS Status 
)
-
- -

Ends the closing of an adapter.

-
Parameters
- - - -
ProtocolBindingContextContext of the function. Contains a pointer to the OPEN_INSTANCE structure associated with the current instance.
StatusStatus of the close operation performed by NDIS.
-
-
-

Callback function associated with the NdisCloseAdapter() NDIS function. It is invoked by NDIS when the NIC driver has finished a close operation that was previously started by NPF_Close().

- -
-
- -
-
- - - - - - - - -
VOID NPF_CloseBinding (IN POPEN_INSTANCE pOpen)
-
- -
-
- -
-
- - - - - - - - -
NTSTATUS NPF_CloseDumpFile (POPEN_INSTANCE Open)
-
- -

Closes the dump file associated with an instance of the driver.

-
Parameters
- - -
OpenThe NPF instance that closes the file.
-
-
-
Returns
The status of the operation. See ntstatus.h in the DDK.
- -
-
- -
-
- - - - - - - - -
VOID NPF_CloseOpenInstance (IN POPEN_INSTANCE pOpen)
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
BOOLEAN NPF_CreateDevice (IN OUT PDRIVER_OBJECT adriverObjectP,
IN PUNICODE_STRING amacNameP 
)
-
- -

Creates a device for a given MAC.

-
Parameters
- - - -
adriverObjectPThe driver object that will be associated with the device, i.e. the one of NPF.
amacNamePThe name of the network interface that the device will point.
-
-
-
Returns
If the function succeeds, the return value is nonzero.
-

NPF creates a device for every valid network adapter. The new device points to the NPF driver, but contains information about the original device. In this way, when the user opens the new device, NPF will be able to determine the correct adapter to use.

- -
-
- -
-
- - - - - - - - -
VOID NPF_DumpThread (PVOID Open)
-
- -

The dump thread.

-
Parameters
- - -
OpenThe NPF instance that creates the thread.
-
-
-

This function moves the content of the NPF kernel buffer to file. It runs in the user context, so at lower priority than the TAP.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
NTSTATUS NPF_GetDeviceMTU (IN POPEN_INSTANCE pOpen,
IN PIRP pIrp,
OUT PUINT pMtu 
)
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
NTSTATUS NPF_IoControl (IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp 
)
-
- -

Handles the IOCTL calls.

-
Parameters
- - - -
DeviceObjectPointer to the device object utilized by the user.
IrpPointer to the IRP containing the user request.
-
-
-
Returns
The status of the operation. See ntstatus.h in the DDK.
-

Once the packet capture driver is opened it can be configured from user-level applications with IOCTL commands using the DeviceIoControl() system call. NPF_IoControl receives and serves all the IOCTL calls directed to NPF. The following commands are recognized:

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
NTSTATUS NPF_Open (IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp 
)
-
- -

Opens a new instance of the driver.

-
Parameters
- - - -
DeviceObjectPointer to the device object utilized by the user.
IrpPointer to the IRP containing the user request.
-
-
-
Returns
The status of the operation. See ntstatus.h in the DDK.
-

This function is called by the OS when a new instance of the driver is opened, i.e. when a user application performs a CreateFile on a device created by NPF. NPF_Open allocates and initializes variables, objects and buffers needed by the new instance, fills the OPEN_INSTANCE structure associated with it and opens the adapter with a call to NdisOpenAdapter.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
VOID NPF_OpenAdapterComplete (IN NDIS_HANDLE ProtocolBindingContext,
IN NDIS_STATUS Status,
IN NDIS_STATUS OpenErrorStatus 
)
-
- -

Ends the opening of an adapter.

-
Parameters
- - - - -
ProtocolBindingContextContext of the function. Contains a pointer to the OPEN_INSTANCE structure associated with the current instance.
StatusStatus of the opening operation performed by NDIS.
OpenErrorStatusnot used by NPF.
-
-
-

Callback function associated with the NdisOpenAdapter() NDIS function. It is invoked by NDIS when the NIC driver has finished an open operation that was previously started by NPF_Open().

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
NTSTATUS NPF_OpenDumpFile (POPEN_INSTANCE Open,
PUNICODE_STRING fileName,
BOOLEAN append 
)
-
- -

Creates the file that will receive the packets when the driver is in dump mode.

-
Parameters
- - - - -
OpenThe NPF instance that opens the file.
fileNamePointer to a UNICODE string containing the name of the file.
appendBoolean value that specifies if the data must be appended to the file.
-
-
-
Returns
The status of the operation. See ntstatus.h in the DDK.
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NTSTATUS NPF_QueryRegistryRoutine (IN PWSTR ValueName,
IN ULONG ValueType,
IN PVOID ValueData,
IN ULONG ValueLength,
IN PVOID Context,
IN PVOID EntryContext 
)
-
- -

Function used by NPF_ReadRegistry() to quesry the registry keys associated woth NPF if the driver is manually installed via the control panel.

-

Normally not used in recent versions of NPF.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
NTSTATUS NPF_Read (IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp 
)
-
- -

Function that serves the user's reads.

-
Parameters
- - - -
DeviceObjectPointer to the device used by the user.
IrpPointer to the IRP containing the user request.
-
-
-
Returns
The status of the operation. See ntstatus.h in the DDK.
-

This function is called by the OS in consequence of user ReadFile() call. It moves the data present in the kernel buffer to the user buffer associated with Irp. First of all, NPF_Read checks the amount of data in kernel buffer associated with current NPF instance.

    -
  • If the instance is in capture mode and the buffer contains more than OPEN_INSTANCE::MinToCopy bytes, NPF_Read moves the data in the user buffer and returns immediatly. In this way, the read performed by the user is not blocking.
  • -
  • If the buffer contains less than MinToCopy bytes, the application's request isn't satisfied immediately, but it's blocked until at least MinToCopy bytes arrive from the net or the timeout on this read expires. The timeout is kept in the OPEN_INSTANCE::TimeOut field.
  • -
  • If the instance is in statistical mode or in dump mode, the application's request is blocked until the timeout kept in OPEN_INSTANCE::TimeOut expires.
  • -
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
NTSTATUS NPF_ReadRegistry (IN PWSTR * MacDriverName,
IN PWSTR * PacketDriverName,
IN PUNICODE_STRING RegistryPath 
)
-
- -

Reads the registry keys associated woth NPF if the driver is manually installed via the control panel.

-

Normally not used in recent versions of NPF.

- -
-
- -
-
- - - - - - - - -
VOID NPF_ReceiveComplete (IN NDIS_HANDLE ProtocolBindingContext)
-
- -

Callback function that signals the end of a packet reception.

-
Parameters
- - -
ProtocolBindingContextContext of the function. Contains a pointer to the OPEN_INSTANCE structure associated with the current instance.
-
-
-

does nothing in NPF

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
VOID NPF_RequestComplete (IN NDIS_HANDLE ProtocolBindingContext,
IN PNDIS_REQUEST pRequest,
IN NDIS_STATUS Status 
)
-
- -

Ends an OID request.

-
Parameters
- - - - -
ProtocolBindingContextContext of the function. Contains a pointer to the OPEN_INSTANCE structure associated with the current instance.
pRequestPointer to the completed OID request.
StatusStatus of the operation.
-
-
-

Callback function associated with the NdisRequest() NDIS function. It is invoked by NDIS when the NIC driver has finished an OID request operation that was previously started by NPF_IoControl().

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
VOID NPF_ResetComplete (IN NDIS_HANDLE ProtocolBindingContext,
IN NDIS_STATUS Status 
)
-
- -

Ends a reset of the adapter.

-
Parameters
- - - -
ProtocolBindingContextContext of the function. Contains a pointer to the OPEN_INSTANCE structure associated with the current instance.
StatusStatus of the operation.
-
-
-

Callback function associated with the NdisReset() NDIS function. It is invoked by NDIS when the NIC driver has finished an OID request operation that was previously started by NPF_IoControl(), in an IOCTL_PROTOCOL_RESET command.

- -
-
- -
-
- - - - - - - - -
NTSTATUS NPF_SaveCurrentBuffer (POPEN_INSTANCE Open)
-
- -

Saves the content of the packet buffer to the file associated with current instance.

-
Parameters
- - -
OpenThe NPF instance that creates the thread.
-
-
-

Used by NPF_DumpThread() and NPF_CloseDumpFile().

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
VOID NPF_SendComplete (IN NDIS_HANDLE ProtocolBindingContext,
IN PNDIS_PACKET pPacket,
IN NDIS_STATUS Status 
)
-
- -

Ends a send operation.

-
Parameters
- - - - -
ProtocolBindingContextContext of the function. Contains a pointer to the OPEN_INSTANCE structure associated with the current instance.
pPacketPointer to the NDIS PACKET structure used by NPF_Write() to send the packet.
StatusStatus of the operation.
-
-
-

Callback function associated with the NdisSend() NDIS function. It is invoked by NDIS when the NIC driver has finished an OID request operation that was previously started by NPF_Write().

- -
-
- -
-
- - - - - - - - -
NTSTATUS NPF_StartDump (POPEN_INSTANCE Open)
-
- -

Starts dump to file.

-
Parameters
- - -
OpenThe NPF instance that opens the file.
-
-
-
Returns
The status of the operation. See ntstatus.h in the DDK.
-

This function performs two operations. First, it writes the libpcap header at the beginning of the file. Second, it starts the thread that asynchronously dumps the network data to the file.

- -
-
- -
-
- - - - - - - - -
BOOLEAN NPF_StartUsingBinding (IN POPEN_INSTANCE pOpen)
-
- -
-
- -
-
- - - - - - - - -
BOOLEAN NPF_StartUsingOpenInstance (IN POPEN_INSTANCE pOpen)
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
VOID NPF_Status (IN NDIS_HANDLE ProtocolBindingContext,
IN NDIS_STATUS Status,
IN PVOID StatusBuffer,
IN UINT StatusBufferSize 
)
-
- -

Callback for NDIS StatusHandler. Not used by NPF.

- -
-
- -
-
- - - - - - - - -
VOID NPF_StatusComplete (IN NDIS_HANDLE ProtocolBindingContext)
-
- -

Callback for NDIS StatusCompleteHandler. Not used by NPF.

- -
-
- -
-
- - - - - - - - -
VOID NPF_StopUsingBinding (IN POPEN_INSTANCE pOpen)
-
- -
-
- -
-
- - - - - - - - -
VOID NPF_StopUsingOpenInstance (IN POPEN_INSTANCE pOpen)
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NDIS_STATUS NPF_tap (IN NDIS_HANDLE ProtocolBindingContext,
IN NDIS_HANDLE MacReceiveContext,
IN PVOID HeaderBuffer,
IN UINT HeaderBufferSize,
IN PVOID LookAheadBuffer,
IN UINT LookaheadBufferSize,
IN UINT PacketSize 
)
-
- -

Callback invoked by NDIS when a packet arrives from the network.

-
Parameters
- - - - - - - - -
ProtocolBindingContextContext of the function. Points to a OPEN_INSTANCE structure that identifies the NPF instance to which the packets are destined.
MacReceiveContextHandle that identifies the underlying NIC driver that generated the request. This value must be used when the packet is transferred from the NIC driver with NdisTransferData().
HeaderBufferPointer to the buffer in the NIC driver memory that contains the header of the packet.
HeaderBufferSizeSize in bytes of the header.
LookAheadBufferPointer to the buffer in the NIC driver's memory that contains the incoming packet's data available to NPF. This value does not necessarily coincide with the actual size of the packet, since only a portion can be available at this time. The remaining portion can be obtained with the NdisTransferData() NDIS function.
LookaheadBufferSizeSize in bytes of the lookahead buffer.
PacketSizeTotal size of the incoming packet, excluded the header.
-
-
-
Returns
The status of the operation. See ntstatus.h in the DDK.
-

NPF_tap() is called by the underlying NIC for every incoming packet. It is the most important and one of the most complex functions of NPF: it executes the filter, runs the statistical engine (if the instance is in statistical mode), gathers the timestamp, moves the packet in the buffer. NPF_tap() is the only function, along with the filtering ones, that is executed for every incoming packet, therefore it is carefully optimized.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
VOID NPF_TransferDataComplete (IN NDIS_HANDLE ProtocolBindingContext,
IN PNDIS_PACKET Packet,
IN NDIS_STATUS Status,
IN UINT BytesTransferred 
)
-
- -

Ends the transfer of a packet.

-
Parameters
- - - - - -
ProtocolBindingContextContext of the function. Contains a pointer to the OPEN_INSTANCE structure associated with the current instance.
PacketPointer to the NDIS_PACKET structure that received the packet data.
StatusStatus of the transfer operation.
BytesTransferredAmount of bytes transferred.
-
-
-

Callback function associated with the NdisTransferData() NDIS function. It is invoked by NDIS when the NIC driver has finished the transfer of a packet from the NIC driver memory to the NPF circular buffer.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
VOID NPF_UnbindAdapter (OUT PNDIS_STATUS Status,
IN NDIS_HANDLE ProtocolBindingContext,
IN NDIS_HANDLE UnbindContext 
)
-
- -

Callback for NDIS UnbindAdapterHandler.

-
Parameters
- - - - -
Statusout variable filled by NPF_UnbindAdapter with the status of the unbind operation.
ProtocolBindingContextContext of the function. Contains a pointer to the OPEN_INSTANCE structure associated with current instance.
UnbindContextSpecifies a handle, supplied by NDIS, that NPF can use to complete the opration.
-
-
-

Function called by NDIS when a new adapter is removed from the machine without shutting it down. NPF_UnbindAdapter closes the adapter calling NdisCloseAdapter() and frees the memory and the structures associated with it. It also releases the waiting user-level app and closes the dump thread if the instance is in dump mode.

- -
-
- -
-
- - - - - - - - -
VOID NPF_Unload (IN PDRIVER_OBJECT DriverObject)
-
- -

Function called by the OS when NPF is unloaded.

-
Parameters
- - -
DriverObjectThe driver object of NPF created by the system.
-
-
-

This is the last function executed when the driver is unloaded from the system. It frees global resources, delete the devices and deregisters the protocol. The driver can be unloaded by the user stopping the NPF service (from control panel or with a console 'net stop npf').

- -
-
- -
-
- - - - - - - - -
VOID NPF_WaitEndOfBufferedWrite (POPEN_INSTANCE Open)
-
- -

Waits the completion of all the sends performed by NPF_BufferedWrite.

-
Parameters
- - -
OpenPointer to open context structure
-
-
-

Used by NPF_BufferedWrite to wait the completion of all the sends before returning the control to the user.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
NTSTATUS NPF_Write (IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp 
)
-
- -

Writes a raw packet to the network.

-
Parameters
- - - -
DeviceObjectPointer to the device object on which the user wrote the packet.
IrpPointer to the IRP containing the user request.
-
-
-
Returns
The status of the operation. See ntstatus.h in the DDK.
-

This function is called by the OS in consequence of user WriteFile() call, with the data of the packet that must be sent on the net. The data is contained in the buffer associated with Irp, NPF_Write takes it and delivers it to the NIC driver via the NdisSend() function. The Nwrites field of the OPEN_INSTANCE structure associated with Irp indicates the number of copies of the packet that will be sent: more than one copy of the packet can be sent for performance reasons.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
VOID NPF_WriteDumpFile (PFILE_OBJECT FileObject,
PLARGE_INTEGER Offset,
ULONG Length,
PMDL Mdl,
PIO_STATUS_BLOCK IoStatusBlock 
)
-
- -

Writes a block of packets on the dump file.

-
Parameters
- - - - - - -
FileObjectThe file object that will receive the packets.
OffsetThe offset in the file where the packets will be put.
LengthThe amount of bytes to write.
MdlMDL mapping the memory buffer that will be written to disk.
IoStatusBlockUsed by the function to return the status of the operation.
-
-
-
Returns
The status of the operation. See ntstatus.h in the DDK.
-

NPF_WriteDumpFile addresses directly the file system, creating a custom IRP and using it to send a portion of the NPF circular buffer to disk. This function is used by NPF_DumpThread().

- -
-
-
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/group__NPF__include.html b/libs/WinPcap-413-173-b4/docs/html/group__NPF__include.html deleted file mode 100644 index 2dc61634..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/group__NPF__include.html +++ /dev/null @@ -1,796 +0,0 @@ - - - - - - -WinPcap: NPF structures and definitions - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Data Structures

struct  packet_file_header
 Header of a libpcap dump file. More...
 
struct  sf_pkthdr
 Header associated to a packet in the driver's buffer when the driver is in dump mode. Similar to the bpf_hdr structure, but simpler. More...
 
struct  _PACKET_OID_DATA
 Structure containing an OID request. More...
 
struct  _INTERNAL_REQUEST
 Stores an OID request. More...
 
struct  _PACKET_RESERVED
 Contains a NDIS packet. More...
 
struct  _DEVICE_EXTENSION
 Port device extension. More...
 
struct  __CPU_Private_Data
 Kernel buffer of each CPU. More...
 
struct  _OPEN_INSTANCE
 Contains the state of a running instance of the NPF driver. More...
 
struct  PacketHeader
 Structure prepended to each packet in the kernel buffer pool. More...
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Macros

#define MAX_REQUESTS   32
 Maximum number of simultaneous IOCTL requests. More...
 
#define Packet_ALIGNMENT   sizeof(int)
 Alignment macro. Defines the alignment size. More...
 
#define Packet_WORDALIGN(x)   (((x)+(Packet_ALIGNMENT-1))&~(Packet_ALIGNMENT-1))
 even multiple of Packet_ALIGNMENT. More...
 
#define KERNEL_EVENT_NAMESPACE   L"\\BaseNamedObjects\\"
 
#define MODE_CAPT   0x0
 Capture working mode. More...
 
#define MODE_STAT   0x1
 Statistical working mode. More...
 
#define MODE_MON   0x2
 Kernel monitoring mode. More...
 
#define MODE_DUMP   0x10
 Kernel dump working mode. More...
 
#define IMMEDIATE   1
 Immediate timeout. Forces a read call to return immediately. More...
 
#define NDIS_FLAGS_SKIP_LOOPBACK_W2K   0x400
 This is an undocumented flag for NdisSetPacketFlags() that allows to disable loopback reception. More...
 
#define TCPDUMP_MAGIC   0xa1b2c3d4
 Libpcap magic number. Used by programs like tcpdump to recognize a driver's generated dump file. More...
 
#define PCAP_VERSION_MAJOR   2
 Major libpcap version of the dump file. Used by programs like tcpdump to recognize a driver's generated dump file. More...
 
#define PCAP_VERSION_MINOR   4
 Minor libpcap version of the dump file. Used by programs like tcpdump to recognize a driver's generated dump file. More...
 
#define NPF_DISABLE_LOOPBACK   1
 Tells the driver to drop the packets sent by itself. This is usefult when building applications like bridges. More...
 
#define NPF_ENABLE_LOOPBACK   2
 Tells the driver to capture the packets sent by itself. More...
 
#define C_ASSERT(a)
 
#define RESERVED(_p)   ((PPACKET_RESERVED)((_p)->ProtocolReserved))
 Macro to obtain a NDIS_PACKET from a PACKET_RESERVED. More...
 
#define TRANSMIT_PACKETS   256
 of packets that can be transmitted at the same time or with a single call to NdisSendPackets. More...
 
#define EXIT_SUCCESS(quantity)
 Macro used in the I/O routines to return the control to user-mode with a success status. More...
 
#define EXIT_FAILURE(quantity)
 Macro used in the I/O routines to return the control to user-mode with a failure status. More...
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Typedefs

typedef struct _PACKET_OID_DATA PACKET_OID_DATA
 Structure containing an OID request. More...
 
typedef struct _PACKET_OID_DATAPPACKET_OID_DATA
 
typedef struct _INTERNAL_REQUEST INTERNAL_REQUEST
 Stores an OID request. More...
 
typedef struct _INTERNAL_REQUESTPINTERNAL_REQUEST
 
typedef struct _PACKET_RESERVED PACKET_RESERVED
 Contains a NDIS packet. More...
 
typedef struct _PACKET_RESERVEDPPACKET_RESERVED
 
typedef struct _DEVICE_EXTENSION DEVICE_EXTENSION
 Port device extension. More...
 
typedef struct _DEVICE_EXTENSIONPDEVICE_EXTENSION
 
typedef struct __CPU_Private_Data CpuPrivateData
 Kernel buffer of each CPU. More...
 
typedef struct _OPEN_INSTANCE OPEN_INSTANCE
 Contains the state of a running instance of the NPF driver. More...
 
typedef struct _OPEN_INSTANCEPOPEN_INSTANCE
 
- - - -

-Enumerations

enum  ADAPTER_BINDING_STATUS { ADAPTER_UNBOUND, -ADAPTER_BOUND, -ADAPTER_UNBINDING - }
 
- - - -

-Functions

 C_ASSERT (sizeof(PACKET_OID_DATA)==12)
 
- - - - - - - - - -

-Variables

ULONG g_NCpu
 
NDIS_HANDLE g_NdisProtocolHandle
 
struct time_conv G_Start_Time
 
UINT g_SendPacketFlags
 
-

Detailed Description

-

Macro Definition Documentation

- -
-
- - - - - - - - -
#define C_ASSERT( a)
-
- -

Definition at line 133 of file Packet.h.

- -
-
- -
-
- - - - - - - - -
#define EXIT_FAILURE( quantity)
-
-Value:
Irp->IoStatus.Information=quantity;\
-
Irp->IoStatus.Status = STATUS_UNSUCCESSFUL;\
-
IoCompleteRequest(Irp, IO_NO_INCREMENT);\
-
return STATUS_UNSUCCESSFUL;\
-
-

Macro used in the I/O routines to return the control to user-mode with a failure status.

- -

Definition at line 363 of file Packet.h.

- -
-
- -
-
- - - - - - - - -
#define EXIT_SUCCESS( quantity)
-
-Value:
Irp->IoStatus.Information=quantity;\
-
Irp->IoStatus.Status = STATUS_SUCCESS;\
-
IoCompleteRequest(Irp, IO_NO_INCREMENT);\
-
return STATUS_SUCCESS;\
-
-

Macro used in the I/O routines to return the control to user-mode with a success status.

- -

Definition at line 357 of file Packet.h.

- -
-
- -
-
- - - - -
#define IMMEDIATE   1
-
- -

Immediate timeout. Forces a read call to return immediately.

- -

Definition at line 87 of file Packet.h.

- -
-
- -
-
- - - - -
#define KERNEL_EVENT_NAMESPACE   L"\\BaseNamedObjects\\"
-
- -

Definition at line 77 of file Packet.h.

- -
-
- -
-
- - - - -
#define MAX_REQUESTS   32
-
- -

Maximum number of simultaneous IOCTL requests.

- -

Definition at line 71 of file Packet.h.

- -
-
- -
-
- - - - -
#define MODE_CAPT   0x0
-
- -

Capture working mode.

- -

Definition at line 81 of file Packet.h.

- -
-
- -
-
- - - - -
#define MODE_DUMP   0x10
-
- -

Kernel dump working mode.

- -

Definition at line 84 of file Packet.h.

- -
-
- -
-
- - - - -
#define MODE_MON   0x2
-
- -

Kernel monitoring mode.

- -

Definition at line 83 of file Packet.h.

- -
-
- -
-
- - - - -
#define MODE_STAT   0x1
-
- -

Statistical working mode.

- -

Definition at line 82 of file Packet.h.

- -
-
- -
-
- - - - -
#define NDIS_FLAGS_SKIP_LOOPBACK_W2K   0x400
-
- -

This is an undocumented flag for NdisSetPacketFlags() that allows to disable loopback reception.

- -

Definition at line 89 of file Packet.h.

- -
-
- -
-
- - - - -
#define NPF_DISABLE_LOOPBACK   1
-
- -

Tells the driver to drop the packets sent by itself. This is usefult when building applications like bridges.

- -

Definition at line 98 of file Packet.h.

- -
-
- -
-
- - - - -
#define NPF_ENABLE_LOOPBACK   2
-
- -

Tells the driver to capture the packets sent by itself.

- -

Definition at line 99 of file Packet.h.

- -
-
- -
-
- - - - -
#define Packet_ALIGNMENT   sizeof(int)
-
- -

Alignment macro. Defines the alignment size.

- -

Definition at line 73 of file Packet.h.

- -
-
- -
-
- - - - - - - - -
#define Packet_WORDALIGN( x)   (((x)+(Packet_ALIGNMENT-1))&~(Packet_ALIGNMENT-1))
-
- -

even multiple of Packet_ALIGNMENT.

-

Alignment macro. Rounds up to the next

- -

Definition at line 74 of file Packet.h.

- -
-
- -
-
- - - - -
#define PCAP_VERSION_MAJOR   2
-
- -

Major libpcap version of the dump file. Used by programs like tcpdump to recognize a driver's generated dump file.

- -

Definition at line 94 of file Packet.h.

- -
-
- -
-
- - - - -
#define PCAP_VERSION_MINOR   4
-
- -

Minor libpcap version of the dump file. Used by programs like tcpdump to recognize a driver's generated dump file.

- -

Definition at line 95 of file Packet.h.

- -
-
- -
-
- - - - - - - - -
#define RESERVED( _p)   ((PPACKET_RESERVED)((_p)->ProtocolReserved))
-
- -

Macro to obtain a NDIS_PACKET from a PACKET_RESERVED.

- -

Definition at line 189 of file Packet.h.

- -
-
- -
-
- - - - -
#define TCPDUMP_MAGIC   0xa1b2c3d4
-
- -

Libpcap magic number. Used by programs like tcpdump to recognize a driver's generated dump file.

- -

Definition at line 93 of file Packet.h.

- -
-
- -
-
- - - - -
#define TRANSMIT_PACKETS   256
-
- -

of packets that can be transmitted at the same time or with a single call to NdisSendPackets.

-

Maximum number of packets in the transmit packet pool. This value is an upper bound to the number

- -

Definition at line 352 of file Packet.h.

- -
-
-

Typedef Documentation

- -
-
- - - - -
typedef struct __CPU_Private_Data - CpuPrivateData
-
- -

Kernel buffer of each CPU.

-

Structure containing the kernel buffer (and other CPU related fields) used to capture packets.

- -
-
- -
-
- - - - -
typedef struct _DEVICE_EXTENSION DEVICE_EXTENSION
-
- -

Port device extension.

-

Structure containing some data relative to every adapter on which NPF is bound.

- -
-
- -
-
- - - - -
typedef struct _INTERNAL_REQUEST INTERNAL_REQUEST
-
- -

Stores an OID request.

-

This structure is used by the driver to perform OID query or set operations on the underlying NIC driver. The OID operations be performed usually only by network drivers, but NPF exports this mechanism to user-level applications through an IOCTL interface. The driver uses this structure to wrap a NDIS_REQUEST structure. This allows to handle correctly the callback structure of NdisRequest(), handling multiple requests and maintaining information about the IRPs to complete.

- -
-
- -
-
- - - - -
typedef struct _OPEN_INSTANCE - OPEN_INSTANCE
-
- -

Contains the state of a running instance of the NPF driver.

-

This is the most important structure of NPF: it is used by almost all the functions of the driver. An _OPEN_INSTANCE structure is associated with every user-level session, allowing concurrent access to the driver.

- -
-
- -
-
- - - - -
typedef struct _PACKET_OID_DATA - PACKET_OID_DATA
-
- -

Structure containing an OID request.

-

It is used by the PacketRequest() function to send an OID to the interface card driver. It can be used, for example, to retrieve the status of the error counters on the adapter, its MAC address, the list of the multicast groups defined on it, and so on.

- -
-
- -
-
- - - - -
typedef struct _PACKET_RESERVED PACKET_RESERVED
-
- -

Contains a NDIS packet.

-

The driver uses this structure to wrap a NDIS_PACKET structure. This allows to handle correctly the callback structure of NdisTransferData(), handling multiple requests and maintaining information about the IRPs to complete.

- -
-
- -
-
- - - - -
typedef struct _DEVICE_EXTENSION * PDEVICE_EXTENSION
-
- -
-
- -
-
- - - - -
typedef struct _INTERNAL_REQUEST * PINTERNAL_REQUEST
-
- -
-
- -
-
- - - - -
typedef struct _OPEN_INSTANCE * POPEN_INSTANCE
-
- -
-
- -
-
- - - - -
typedef struct _PACKET_OID_DATA * PPACKET_OID_DATA
-
- -
-
- -
-
- - - - -
typedef struct _PACKET_RESERVED * PPACKET_RESERVED
-
- -
-
-

Enumeration Type Documentation

- -
-
- - - - -
enum ADAPTER_BINDING_STATUS
-
- - - - -
Enumerator
ADAPTER_UNBOUND  -
ADAPTER_BOUND  -
ADAPTER_UNBINDING  -
- -

Definition at line 327 of file Packet.h.

- -
-
-

Function Documentation

- -
-
- - - - - - - - -
C_ASSERT (sizeof(PACKET_OID_DATA = =12)
-
- -
-
-

Variable Documentation

- -
-
- - - - -
ULONG g_NCpu
-
- -
-
- -
-
- - - - -
NDIS_HANDLE g_NdisProtocolHandle
-
- -
-
- -
-
- - - - -
UINT g_SendPacketFlags
-
- -
-
- -
-
- - - - -
struct time_conv G_Start_Time
-
- -
-
-
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/group__NPF__ioctl.html b/libs/WinPcap-413-173-b4/docs/html/group__NPF__ioctl.html deleted file mode 100644 index 29d4c00e..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/group__NPF__ioctl.html +++ /dev/null @@ -1,400 +0,0 @@ - - - - - - -WinPcap: NPF I/O control codes - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - -
-
- - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Macros

#define BIOCSETBUFFERSIZE   9592
 IOCTL code: set kernel buffer size. More...
 
#define BIOCSETF   9030
 IOCTL code: set packet filtering program. More...
 
#define BIOCGSTATS   9031
 IOCTL code: get the capture stats. More...
 
#define BIOCSRTIMEOUT   7416
 IOCTL code: set the read timeout. More...
 
#define BIOCSMODE   7412
 IOCTL code: set working mode. More...
 
#define BIOCSWRITEREP   7413
 IOCTL code: set number of physical repetions of every packet written by the app. More...
 
#define BIOCSMINTOCOPY   7414
 IOCTL code: set minimum amount of data in the kernel buffer that unlocks a read call. More...
 
#define BIOCSETOID   0x80000000
 IOCTL code: set an OID value. More...
 
#define BIOCQUERYOID   0x80000004
 IOCTL code: get an OID value. More...
 
#define BIOCSETDUMPFILENAME   9029
 IOCTL code: set the name of a the file used by kernel dump mode. More...
 
#define BIOCGEVNAME   7415
 IOCTL code: get the name of the event that the driver signals when some data is present in the buffer. More...
 
#define BIOCSENDPACKETSNOSYNC   9032
 IOCTL code: Send a buffer containing multiple packets to the network, ignoring the timestamps. More...
 
#define BIOCSENDPACKETSSYNC   9033
 IOCTL code: Send a buffer containing multiple packets to the network, considering the timestamps. More...
 
#define BIOCSETDUMPLIMITS   9034
 IOCTL code: Set the dump file limits. More...
 
#define BIOCISDUMPENDED   7411
 IOCTL code: Get the status of the kernel dump process. More...
 
#define BIOCISETLOBBEH   7410
 IOCTL code: set the loopback behavior. More...
 
#define BIOCSETEVENTHANDLE   7920
 This IOCTL passes the read event HANDLE allocated by the user (packet.dll) to kernel level. More...
 
-

Detailed Description

-

Macro Definition Documentation

- -
-
- - - - -
#define BIOCGEVNAME   7415
-
- -

IOCTL code: get the name of the event that the driver signals when some data is present in the buffer.

-

Command used by the application to retrieve the name of the global event associated with a NPF instance. The event is signaled by the driver when the kernel buffer contains enough data for a transfer.

- -

Definition at line 137 of file ioctls.h.

- -
-
- -
-
- - - - -
#define BIOCGSTATS   9031
-
- -

IOCTL code: get the capture stats.

-

This command returns to the application the number of packets received and the number of packets dropped by an instance of the driver.

- -

Definition at line 75 of file ioctls.h.

- -
-
- -
-
- - - - -
#define BIOCISDUMPENDED   7411
-
- -

IOCTL code: Get the status of the kernel dump process.

-

This command returns TRUE if the kernel dump is ended, i.e if one of the limits set with BIOCSETDUMPLIMITS (amount of bytes or number of packets) has been reached.

- -

Definition at line 172 of file ioctls.h.

- -
-
- -
-
- - - - -
#define BIOCISETLOBBEH   7410
-
- -

IOCTL code: set the loopback behavior.

-

This IOCTL sets the loopback behavior of the driver with packets sent by itself: capture or drop.

- -

Definition at line 179 of file ioctls.h.

- -
-
- -
-
- - - - -
#define BIOCQUERYOID   0x80000004
-
- -

IOCTL code: get an OID value.

-

This IOCTL is used to perform an OID get operation on the NIC driver.

- -

Definition at line 120 of file ioctls.h.

- -
-
- -
-
- - - - -
#define BIOCSENDPACKETSNOSYNC   9032
-
- -

IOCTL code: Send a buffer containing multiple packets to the network, ignoring the timestamps.

-

Command used to send a buffer of packets in a single system call. Every packet in the buffer is preceded by a sf_pkthdr structure. The timestamps of the packets are ignored, i.e. the packets are sent as fast as possible. The NPF_BufferedWrite() function is invoked to send the packets.

- -

Definition at line 146 of file ioctls.h.

- -
-
- -
-
- - - - -
#define BIOCSENDPACKETSSYNC   9033
-
- -

IOCTL code: Send a buffer containing multiple packets to the network, considering the timestamps.

-

Command used to send a buffer of packets in a single system call. Every packet in the buffer is preceded by a sf_pkthdr structure. The timestamps of the packets are used to synchronize the write, i.e. the packets are sent to the network respecting the intervals specified in the sf_pkthdr structure assiciated with each packet. NPF_BufferedWrite() function is invoked to send the packets.

- -

Definition at line 156 of file ioctls.h.

- -
-
- -
-
- - - - -
#define BIOCSETBUFFERSIZE   9592
-
- -

IOCTL code: set kernel buffer size.

-

This IOCTL is used to set a new size of the circular buffer associated with an instance of NPF. When a BIOCSETBUFFERSIZE command is received, the driver frees the old buffer, allocates the new one and resets all the parameters associated with the buffer in the OPEN_INSTANCE structure. The currently buffered packets are lost.

- -

Definition at line 55 of file ioctls.h.

- -
-
- -
-
- - - - -
#define BIOCSETDUMPFILENAME   9029
-
- -

IOCTL code: set the name of a the file used by kernel dump mode.

-

This command opens a file whose name is contained in the IOCTL buffer and associates it with current NPf instance. The dump thread uses it to copy the content of the circular buffer to file. If a file was already opened, the driver closes it before opening the new one.

- -

Definition at line 129 of file ioctls.h.

- -
-
- -
-
- - - - -
#define BIOCSETDUMPLIMITS   9034
-
- -

IOCTL code: Set the dump file limits.

-

This IOCTL sets the limits (maximum size and maximum number of packets) of the dump file created when the driver works in dump mode.

- -

Definition at line 164 of file ioctls.h.

- -
-
- -
-
- - - - -
#define BIOCSETEVENTHANDLE   7920
-
- -

This IOCTL passes the read event HANDLE allocated by the user (packet.dll) to kernel level.

-

Parameter: HANDLE Parameter size: sizeof(HANDLE). If the caller is 32 bit, the parameter size is 4 bytes, even if sizeof(HANDLE) at kernel level is 8 bytes. That's why in this IOCTL code handler we detect a 32bit calling process and do the necessary thunking.

-

TODO GV:I will go to hell for this ugly IOCTL definition. We should use CTL_CODE!!

- -

Definition at line 190 of file ioctls.h.

- -
-
- -
-
- - - - -
#define BIOCSETF   9030
-
- -

IOCTL code: set packet filtering program.

-

This IOCTL sets a new packet filter in the driver. Before allocating any memory for the new filter, the bpf_validate() function is called to check the correctness of the filter. If this function returns TRUE, the filter is copied to the driver's memory, its address is stored in the bpfprogram field of the OPEN_INSTANCE structure associated with current instance of the driver, and the filter will be applied to every incoming packet. This command also empties the circular buffer used by current instance to store packets. This is done to avoid the presence in the buffer of packets that do not match the filter.

- -

Definition at line 67 of file ioctls.h.

- -
-
- -
-
- - - - -
#define BIOCSETOID   0x80000000
-
- -

IOCTL code: set an OID value.

-

This IOCTL is used to perform an OID set operation on the NIC driver.

- -

Definition at line 113 of file ioctls.h.

- -
-
- -
-
- - - - -
#define BIOCSMINTOCOPY   7414
-
- -

IOCTL code: set minimum amount of data in the kernel buffer that unlocks a read call.

-

This command sets the OPEN_INSTANCE::MinToCopy member.

- -

Definition at line 106 of file ioctls.h.

- -
-
- -
-
- - - - -
#define BIOCSMODE   7412
-
- -

IOCTL code: set working mode.

-

This IOCTL can be used to set the working mode of a NPF instance. The new mode, received by the driver in the buffer associated with the IOCTL command, can be MODE_CAPT for capture mode (the default), MODE_STAT for statistical mode or MODE_DUMP for dump mode.

- -

Definition at line 91 of file ioctls.h.

- -
-
- -
-
- - - - -
#define BIOCSRTIMEOUT   7416
-
- -

IOCTL code: set the read timeout.

-

This command sets the maximum timeout after which a read is released, also if no data packets were received.

- -

Definition at line 82 of file ioctls.h.

- -
-
- -
-
- - - - -
#define BIOCSWRITEREP   7413
-
- -

IOCTL code: set number of physical repetions of every packet written by the app.

-

Sets the number of times a single write call must be repeated. This command sets the OPEN_INSTANCE::Nwrites member, and is used to implement the 'multiple write' feature of the driver.

- -

Definition at line 99 of file ioctls.h.

- -
-
-
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/group__NPF__jitter.html b/libs/WinPcap-413-173-b4/docs/html/group__NPF__jitter.html deleted file mode 100644 index 7b0f66c4..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/group__NPF__jitter.html +++ /dev/null @@ -1,1864 +0,0 @@ - - - - - - -WinPcap: NPF Just-in-time compiler definitions - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - -
-
- -
-
NPF Just-in-time compiler definitions
-
-
- - - - - - - - -

-Data Structures

struct  binary_stream
 A stream of X86 binary code. More...
 
struct  JIT_BPF_Filter
 Structure describing a x86 filtering program created by the jitter. More...
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Macros

#define EAX   0
 
#define ECX   1
 
#define EDX   2
 
#define EBX   3
 
#define ESP   4
 
#define EBP   5
 
#define ESI   6
 
#define EDI   7
 
#define AX   0
 
#define CX   1
 
#define DX   2
 
#define BX   3
 
#define SP   4
 
#define BP   5
 
#define SI   6
 
#define DI   7
 
#define AL   0
 
#define CL   1
 
#define DL   2
 
#define BL   3
 
#define MOVid(r32, i32)   emitm(&stream, 11 << 4 | 1 << 3 | r32 & 0x7, 1); emitm(&stream, i32, 4);
 mov r32,i32 More...
 
#define MOVrd(dr32, sr32)   emitm(&stream, 8 << 4 | 3 | 1 << 3, 1); emitm(&stream, 3 << 6 | (dr32 & 0x7) << 3 | sr32 & 0x7, 1);
 mov dr32,sr32 More...
 
#define MOVodd(dr32, sr32, off)
 mov dr32,sr32[off] More...
 
#define MOVobd(dr32, sr32, or32)
 mov dr32,sr32[or32] More...
 
#define MOVobw(dr32, sr32, or32)
 mov dr16,sr32[or32] More...
 
#define MOVobb(dr8, sr32, or32)
 mov dr8,sr32[or32] More...
 
#define MOVomd(dr32, or32, sr32)
 mov [dr32][or32],sr32 More...
 
#define BSWAP(dr32)
 bswap dr32 More...
 
#define SWAP_AX()
 xchg al,ah More...
 
#define PUSH(r32)   emitm(&stream, 5 << 4 | 0 << 3 | r32 & 0x7, 1);
 push r32 More...
 
#define POP(r32)   emitm(&stream, 5 << 4 | 1 << 3 | r32 & 0x7, 1);
 pop r32 More...
 
#define RET()   emitm(&stream, 12 << 4 | 0 << 3 | 3, 1);
 ret More...
 
#define ADDrd(dr32, sr32)
 add dr32,sr32 More...
 
#define ADD_EAXi(i32)
 add eax,i32 More...
 
#define ADDid(r32, i32)
 add r32,i32 More...
 
#define ADDib(r32, i8)
 add r32,i8 More...
 
#define SUBrd(dr32, sr32)
 sub dr32,sr32 More...
 
#define SUB_EAXi(i32)
 sub eax,i32 More...
 
#define MULrd(r32)
 mul r32 More...
 
#define DIVrd(r32)
 div r32 More...
 
#define ANDib(r8, i8)
 and r8,i8 More...
 
#define ANDid(r32, i32)
 and r32,i32 More...
 
#define ANDrd(dr32, sr32)
 and dr32,sr32 More...
 
#define ORrd(dr32, sr32)
 or dr32,sr32 More...
 
#define ORid(r32, i32)
 or r32,i32 More...
 
#define SHLib(r32, i8)
 shl r32,i8 More...
 
#define SHL_CLrb(dr32)
 shl dr32,cl More...
 
#define SHRib(r32, i8)
 shr r32,i8 More...
 
#define SHR_CLrb(dr32)
 shr dr32,cl More...
 
#define NEGd(r32)
 neg r32 More...
 
#define CMPodd(dr32, sr32, off)
 cmp dr32,sr32[off] More...
 
#define CMPrd(dr32, sr32)
 cmp dr32,sr32 More...
 
#define CMPid(dr32, i32)
 cmp dr32,i32 More...
 
#define JNEb(off8)
 jne off32 More...
 
#define JAb(off8)
 ja off32 More...
 
#define JE(off32)
 je off32 More...
 
#define JLE(off32)
 jle off32 More...
 
#define JLEb(off8)
 jle off8 More...
 
#define JBEb(off8)
 jbe off8 More...
 
#define JBb(off8)
 jb off8 More...
 
#define JA(off32)
 ja off32 More...
 
#define JAE(off32)
 jae off32 More...
 
#define JG(off32)
 jg off32 More...
 
#define JGE(off32)
 jge off32 More...
 
#define JMP(off32)
 jmp off32 More...
 
- - - - - - - - - - - - - -

-Typedefs

typedef struct binary_stream binary_stream
 A stream of X86 binary code. More...
 
typedef UINT(__cdecl * BPF_filter_function )(PVOID *, ULONG, UINT)
 Prototype of a filtering function created by the jitter. More...
 
typedef void(* emit_func )(binary_stream *stream, ULONG value, UINT n)
 Prototype of the emit functions. More...
 
typedef struct JIT_BPF_Filter JIT_BPF_Filter
 Structure describing a x86 filtering program created by the jitter. More...
 
-

Detailed Description

-

Macro Definition Documentation

- -
-
- - - - - - - - -
#define ADD_EAXi( i32)
-
-Value:
emitm(&stream, 0x05, 1);\
-
emitm(&stream, i32, 4);
-
-

add eax,i32

- -

Definition at line 175 of file jitter.h.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
#define ADDib( r32,
 i8 
)
-
-Value:
emitm(&stream, 0x83, 1);\
-
emitm(&stream, 24 << 3 | r32, 1);\
-
emitm(&stream, i8, 1);
-
-

add r32,i8

- -

Definition at line 186 of file jitter.h.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
#define ADDid( r32,
 i32 
)
-
-Value:
emitm(&stream, 0x81, 1);\
-
emitm(&stream, 24 << 3 | r32, 1);\
-
emitm(&stream, i32, 4);
-
-

add r32,i32

- -

Definition at line 180 of file jitter.h.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
#define ADDrd( dr32,
 sr32 
)
-
-Value:
emitm(&stream, 0x03, 1);\
-
emitm(&stream, 3 << 6 | (dr32 & 0x7) << 3 | (sr32 & 0x7), 1);
-
-

add dr32,sr32

- -

Definition at line 170 of file jitter.h.

- -
-
- -
-
- - - - -
#define AL   0
-
- -

Definition at line 63 of file jitter.h.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
#define ANDib( r8,
 i8 
)
-
-Value:
emitm(&stream, 0x80, 1);\
-
emitm(&stream, 7 << 5 | r8, 1);\
-
emitm(&stream, i8, 1);
-
-

and r8,i8

- -

Definition at line 212 of file jitter.h.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
#define ANDid( r32,
 i32 
)
-
-Value:
if (r32 == EAX){ \
-
emitm(&stream, 0x25, 1);\
-
emitm(&stream, i32, 4);}\
-
else{ \
-
emitm(&stream, 0x81, 1);\
-
emitm(&stream, 7 << 5 | r32, 1);\
-
emitm(&stream, i32, 4);}
-
#define EAX
Definition: jitter.h:45
-
-

and r32,i32

- -

Definition at line 218 of file jitter.h.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
#define ANDrd( dr32,
 sr32 
)
-
-Value:
emitm(&stream, 0x23, 1);\
-
emitm(&stream, 3 << 6 | (dr32 & 0x7) << 3 | sr32 & 0x7, 1);
-
-

and dr32,sr32

- -

Definition at line 228 of file jitter.h.

- -
-
- -
-
- - - - -
#define AX   0
-
- -

Definition at line 54 of file jitter.h.

- -
-
- -
-
- - - - -
#define BL   3
-
- -

Definition at line 66 of file jitter.h.

- -
-
- -
-
- - - - -
#define BP   5
-
- -

Definition at line 59 of file jitter.h.

- -
-
- -
-
- - - - - - - - -
#define BSWAP( dr32)
-
-Value:
emitm(&stream, 0xf, 1); \
-
emitm(&stream, 0x19 << 3 | dr32 , 1);
-
-

bswap dr32

- -

Definition at line 148 of file jitter.h.

- -
-
- -
-
- - - - -
#define BX   3
-
- -

Definition at line 57 of file jitter.h.

- -
-
- -
-
- - - - -
#define CL   1
-
- -

Definition at line 64 of file jitter.h.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
#define CMPid( dr32,
 i32 
)
-
-Value:
if (dr32 == EAX){ \
-
emitm(&stream, 0x3d, 1); \
-
emitm(&stream, i32, 4);} \
-
else{ \
-
emitm(&stream, 0x81, 1); \
-
emitm(&stream, 0x1f << 3 | (dr32 & 0x7), 1);\
-
emitm(&stream, i32, 4);}
-
#define EAX
Definition: jitter.h:45
-
-

cmp dr32,i32

- -

Definition at line 286 of file jitter.h.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
#define CMPodd( dr32,
 sr32,
 off 
)
-
-Value:
emitm(&stream, 3 << 4 | 3 | 1 << 3, 1); \
-
emitm(&stream, 1 << 6 | (dr32 & 0x7) << 3 | sr32 & 0x7, 1);\
-
emitm(&stream, off, 1);
-
-

cmp dr32,sr32[off]

- -

Definition at line 275 of file jitter.h.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
#define CMPrd( dr32,
 sr32 
)
-
-Value:
emitm(&stream, 0x3b, 1); \
-
emitm(&stream, 3 << 6 | (dr32 & 0x7) << 3 | sr32 & 0x7, 1);
-
-

cmp dr32,sr32

- -

Definition at line 281 of file jitter.h.

- -
-
- -
-
- - - - -
#define CX   1
-
- -

Definition at line 55 of file jitter.h.

- -
-
- -
-
- - - - -
#define DI   7
-
- -

Definition at line 61 of file jitter.h.

- -
-
- -
-
- - - - - - - - -
#define DIVrd( r32)
-
-Value:
emitm(&stream, 0xf7, 1);\
-
emitm(&stream, 15 << 4 | (r32 & 0x7), 1);
-
-

div r32

- -

Definition at line 207 of file jitter.h.

- -
-
- -
-
- - - - -
#define DL   2
-
- -

Definition at line 65 of file jitter.h.

- -
-
- -
-
- - - - -
#define DX   2
-
- -

Definition at line 56 of file jitter.h.

- -
-
- -
-
- - - - -
#define EAX   0
-
- -

Definition at line 45 of file jitter.h.

- -
-
- -
-
- - - - -
#define EBP   5
-
- -

Definition at line 50 of file jitter.h.

- -
-
- -
-
- - - - -
#define EBX   3
-
- -

Definition at line 48 of file jitter.h.

- -
-
- -
-
- - - - -
#define ECX   1
-
- -

Definition at line 46 of file jitter.h.

- -
-
- -
-
- - - - -
#define EDI   7
-
- -

Definition at line 52 of file jitter.h.

- -
-
- -
-
- - - - -
#define EDX   2
-
- -

Definition at line 47 of file jitter.h.

- -
-
- -
-
- - - - -
#define ESI   6
-
- -

Definition at line 51 of file jitter.h.

- -
-
- -
-
- - - - -
#define ESP   4
-
- -

Definition at line 49 of file jitter.h.

- -
-
- -
-
- - - - - - - - -
#define JA( off32)
-
-Value:
emitm(&stream, 0x0f, 1);\
-
emitm(&stream, 0x87, 1);\
-
emitm(&stream, off32, 4);
-
-

ja off32

- -

Definition at line 333 of file jitter.h.

- -
-
- -
-
- - - - - - - - -
#define JAb( off8)
-
-Value:
emitm(&stream, 0x77, 1);\
-
emitm(&stream, off8, 1);
-
-

ja off32

- -

Definition at line 301 of file jitter.h.

- -
-
- -
-
- - - - - - - - -
#define JAE( off32)
-
-Value:
emitm(&stream, 0x0f, 1);\
-
emitm(&stream, 0x83, 1);\
-
emitm(&stream, off32, 4);
-
-

jae off32

- -

Definition at line 339 of file jitter.h.

- -
-
- -
-
- - - - - - - - -
#define JBb( off8)
-
-Value:
emitm(&stream, 0x72, 1);\
-
emitm(&stream, off8, 1);
-
-

jb off8

- -

Definition at line 328 of file jitter.h.

- -
-
- -
-
- - - - - - - - -
#define JBEb( off8)
-
-Value:
emitm(&stream, 0x76, 1);\
-
emitm(&stream, off8, 1);
-
-

jbe off8

- -

Definition at line 323 of file jitter.h.

- -
-
- -
-
- - - - - - - - -
#define JE( off32)
-
-Value:
emitm(&stream, 0x0f, 1);\
-
emitm(&stream, 0x84, 1);\
-
emitm(&stream, off32, 4);
-
-

je off32

- -

Definition at line 306 of file jitter.h.

- -
-
- -
-
- - - - - - - - -
#define JG( off32)
-
-Value:
emitm(&stream, 0x0f, 1);\
-
emitm(&stream, 0x8f, 1);\
-
emitm(&stream, off32, 4);
-
-

jg off32

- -

Definition at line 345 of file jitter.h.

- -
-
- -
-
- - - - - - - - -
#define JGE( off32)
-
-Value:
emitm(&stream, 0x0f, 1);\
-
emitm(&stream, 0x8d, 1);\
-
emitm(&stream, off32, 4);
-
-

jge off32

- -

Definition at line 351 of file jitter.h.

- -
-
- -
-
- - - - - - - - -
#define JLE( off32)
-
-Value:
emitm(&stream, 0x0f, 1);\
-
emitm(&stream, 0x8e, 1);\
-
emitm(&stream, off32, 4);
-
-

jle off32

- -

Definition at line 312 of file jitter.h.

- -
-
- -
-
- - - - - - - - -
#define JLEb( off8)
-
-Value:
emitm(&stream, 0x7e, 1);\
-
emitm(&stream, off8, 1);
-
-

jle off8

- -

Definition at line 318 of file jitter.h.

- -
-
- -
-
- - - - - - - - -
#define JMP( off32)
-
-Value:
emitm(&stream, 0xe9, 1);\
-
emitm(&stream, off32, 4);
-
-

jmp off32

- -

Definition at line 357 of file jitter.h.

- -
-
- -
-
- - - - - - - - -
#define JNEb( off8)
-
-Value:
emitm(&stream, 0x75, 1);\
-
emitm(&stream, off8, 1);
-
-

jne off32

- -

Definition at line 296 of file jitter.h.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
#define MOVid( r32,
 i32 
)   emitm(&stream, 11 << 4 | 1 << 3 | r32 & 0x7, 1); emitm(&stream, i32, 4);
-
- -

mov r32,i32

- -

Definition at line 109 of file jitter.h.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
#define MOVobb( dr8,
 sr32,
 or32 
)
-
-Value:
emitm(&stream, 0x8a, 1); \
-
emitm(&stream, (dr8 & 0x7) << 3 | 4 , 1);\
-
emitm(&stream, (or32 & 0x7) << 3 | (sr32 & 0x7) , 1);
-
-

mov dr8,sr32[or32]

- -

Definition at line 136 of file jitter.h.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
#define MOVobd( dr32,
 sr32,
 or32 
)
-
-Value:
emitm(&stream, 8 << 4 | 3 | 1 << 3, 1); \
-
emitm(&stream, (dr32 & 0x7) << 3 | 4 , 1);\
-
emitm(&stream, (or32 & 0x7) << 3 | (sr32 & 0x7) , 1);
-
-

mov dr32,sr32[or32]

- -

Definition at line 123 of file jitter.h.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
#define MOVobw( dr32,
 sr32,
 or32 
)
-
-Value:
emitm(&stream, 0x66, 1); \
-
emitm(&stream, 8 << 4 | 3 | 1 << 3, 1); \
-
emitm(&stream, (dr32 & 0x7) << 3 | 4 , 1);\
-
emitm(&stream, (or32 & 0x7) << 3 | (sr32 & 0x7) , 1);
-
-

mov dr16,sr32[or32]

- -

Definition at line 129 of file jitter.h.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
#define MOVodd( dr32,
 sr32,
 off 
)
-
-Value:
emitm(&stream, 8 << 4 | 3 | 1 << 3, 1); \
-
emitm(&stream, 1 << 6 | (dr32 & 0x7) << 3 | sr32 & 0x7, 1);\
-
emitm(&stream, off, 1);
-
-

mov dr32,sr32[off]

- -

Definition at line 117 of file jitter.h.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
#define MOVomd( dr32,
 or32,
 sr32 
)
-
-Value:
emitm(&stream, 0x89, 1); \
-
emitm(&stream, (sr32 & 0x7) << 3 | 4 , 1);\
-
emitm(&stream, (or32 & 0x7) << 3 | (dr32 & 0x7) , 1);
-
-

mov [dr32][or32],sr32

- -

Definition at line 142 of file jitter.h.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
#define MOVrd( dr32,
 sr32 
)   emitm(&stream, 8 << 4 | 3 | 1 << 3, 1); emitm(&stream, 3 << 6 | (dr32 & 0x7) << 3 | sr32 & 0x7, 1);
-
- -

mov dr32,sr32

- -

Definition at line 113 of file jitter.h.

- -
-
- -
-
- - - - - - - - -
#define MULrd( r32)
-
-Value:
emitm(&stream, 0xf7, 1);\
-
emitm(&stream, 7 << 5 | (r32 & 0x7), 1);
-
-

mul r32

- -

Definition at line 202 of file jitter.h.

- -
-
- -
-
- - - - - - - - -
#define NEGd( r32)
-
-Value:
emitm(&stream, 0xf7, 1);\
-
emitm(&stream, 27 << 3 | r32 & 0x7, 1);
-
-

neg r32

- -

Definition at line 270 of file jitter.h.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
#define ORid( r32,
 i32 
)
-
-Value:
if (r32 == EAX){ \
-
emitm(&stream, 0x0d, 1);\
-
emitm(&stream, i32, 4);}\
-
else{ \
-
emitm(&stream, 0x81, 1);\
-
emitm(&stream, 25 << 3 | r32, 1);\
-
emitm(&stream, i32, 4);}
-
#define EAX
Definition: jitter.h:45
-
-

or r32,i32

- -

Definition at line 238 of file jitter.h.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
#define ORrd( dr32,
 sr32 
)
-
-Value:
emitm(&stream, 0x0b, 1);\
-
emitm(&stream, 3 << 6 | (dr32 & 0x7) << 3 | sr32 & 0x7, 1);
-
-

or dr32,sr32

- -

Definition at line 233 of file jitter.h.

- -
-
- -
-
- - - - - - - - -
#define POP( r32)   emitm(&stream, 5 << 4 | 1 << 3 | r32 & 0x7, 1);
-
- -

pop r32

- -

Definition at line 162 of file jitter.h.

- -
-
- -
-
- - - - - - - - -
#define PUSH( r32)   emitm(&stream, 5 << 4 | 0 << 3 | r32 & 0x7, 1);
-
- -

push r32

- -

Definition at line 158 of file jitter.h.

- -
-
- -
-
- - - - - - - -
#define RET()   emitm(&stream, 12 << 4 | 0 << 3 | 3, 1);
-
- -

ret

- -

Definition at line 166 of file jitter.h.

- -
-
- -
-
- - - - - - - - -
#define SHL_CLrb( dr32)
-
-Value:
emitm(&stream, 0xd3, 1);\
-
emitm(&stream, 7 << 5 | dr32 & 0x7, 1);
-
-

shl dr32,cl

- -

Definition at line 254 of file jitter.h.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
#define SHLib( r32,
 i8 
)
-
-Value:
emitm(&stream, 0xc1, 1);\
-
emitm(&stream, 7 << 5 | r32 & 0x7, 1);\
-
emitm(&stream, i8, 1);
-
-

shl r32,i8

- -

Definition at line 248 of file jitter.h.

- -
-
- -
-
- - - - - - - - -
#define SHR_CLrb( dr32)
-
-Value:
emitm(&stream, 0xd3, 1);\
-
emitm(&stream, 29 << 3 | dr32 & 0x7, 1);
-
-

shr dr32,cl

- -

Definition at line 265 of file jitter.h.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
#define SHRib( r32,
 i8 
)
-
-Value:
emitm(&stream, 0xc1, 1);\
-
emitm(&stream, 29 << 3 | r32 & 0x7, 1);\
-
emitm(&stream, i8, 1);
-
-

shr r32,i8

- -

Definition at line 259 of file jitter.h.

- -
-
- -
-
- - - - -
#define SI   6
-
- -

Definition at line 60 of file jitter.h.

- -
-
- -
-
- - - - -
#define SP   4
-
- -

Definition at line 58 of file jitter.h.

- -
-
- -
-
- - - - - - - - -
#define SUB_EAXi( i32)
-
-Value:
emitm(&stream, 0x2d, 1);\
-
emitm(&stream, i32, 4);
-
-

sub eax,i32

- -

Definition at line 197 of file jitter.h.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
#define SUBrd( dr32,
 sr32 
)
-
-Value:
emitm(&stream, 0x2b, 1);\
-
emitm(&stream, 3 << 6 | (dr32 & 0x7) << 3 | (sr32 & 0x7), 1);
-
-

sub dr32,sr32

- -

Definition at line 192 of file jitter.h.

- -
-
- -
-
- - - - - - - -
#define SWAP_AX()
-
-Value:
emitm(&stream, 0x86, 1); \
-
emitm(&stream, 0xc4 , 1);
-
-

xchg al,ah

- -

Definition at line 153 of file jitter.h.

- -
-
-

Typedef Documentation

- -
-
- - - - -
typedef struct binary_stream binary_stream
-
- -

A stream of X86 binary code.

- -
-
- -
-
- - - - -
typedef UINT(__cdecl * BPF_filter_function)(PVOID *, ULONG, UINT)
-
- -

Prototype of a filtering function created by the jitter.

-

The syntax and the meaning of the parameters is analogous to the one of bpf_filter(). Notice that the filter is not among the parameters, because it is hardwired in the function.

- -

Definition at line 82 of file jitter.h.

- -
-
- -
-
- - - - -
typedef void(* emit_func)(binary_stream *stream, ULONG value, UINT n)
-
- -

Prototype of the emit functions.

-

Different emit functions are used to create the reference table and to generate the actual filtering code. This allows to have simpler instruction macros. The first parameter is the stream that will receive the data. The secon one is a variable containing the data, the third one is the length, that can be 1,2 or 4 since it is possible to emit a byte, a short or a work at a time.

- -

Definition at line 92 of file jitter.h.

- -
-
- -
-
- - - - -
typedef struct JIT_BPF_Filter - JIT_BPF_Filter
-
- -

Structure describing a x86 filtering program created by the jitter.

- -
-
-
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/group__remote__auth__methods.html b/libs/WinPcap-413-173-b4/docs/html/group__remote__auth__methods.html deleted file mode 100644 index 71627e02..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/group__remote__auth__methods.html +++ /dev/null @@ -1,51 +0,0 @@ - - - - - - -WinPcap: Authentication methods supported by the RPCAP protocol - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - -
-
-
-
Authentication methods supported by the RPCAP protocol
-
-
-
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/group__remote__open__flags.html b/libs/WinPcap-413-173-b4/docs/html/group__remote__open__flags.html deleted file mode 100644 index c5403b66..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/group__remote__open__flags.html +++ /dev/null @@ -1,51 +0,0 @@ - - - - - - -WinPcap: Flags defined in the pcap_open() function - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - -
-
-
-
Flags defined in the pcap_open() function
-
-
-
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/group__remote__pri__func.html b/libs/WinPcap-413-173-b4/docs/html/group__remote__pri__func.html deleted file mode 100644 index 7aca8658..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/group__remote__pri__func.html +++ /dev/null @@ -1,51 +0,0 @@ - - - - - - -WinPcap: Internal Functions - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - -
-
-
-
Internal Functions
-
-
-
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/group__remote__pri__struct.html b/libs/WinPcap-413-173-b4/docs/html/group__remote__pri__struct.html deleted file mode 100644 index 12195a56..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/group__remote__pri__struct.html +++ /dev/null @@ -1,1075 +0,0 @@ - - - - - - -WinPcap: Internal Structures and Definitions - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - -
-
- -
-
Internal Structures and Definitions
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Data Structures

struct  activehosts
 Keeps a list of all the opened connections in the active mode. More...
 
struct  rpcap_header
 Common header for all the RPCAP messages. More...
 
struct  rpcap_findalldevs_if
 Format of the message for the interface description (findalldevs command) More...
 
struct  rpcap_findalldevs_ifaddr
 Format of the message for the address listing (findalldevs command) More...
 
struct  rpcap_openreply
 Format of the message of the connection opening reply (open command). More...
 
struct  rpcap_startcapreq
 Format of the message that starts a remote capture (startcap command) More...
 
struct  rpcap_startcapreply
 Format of the reply message that devoted to start a remote capture (startcap reply command) More...
 
struct  rpcap_pkthdr
 Format of the header which encapsulates captured packets when transmitted on the network. More...
 
struct  rpcap_filter
 General header used for the pcap_setfilter() command; keeps just the number of BPF instructions. More...
 
struct  rpcap_filterbpf_insn
 Structure that keeps a single BPF instuction; it is repeated 'ninsn' times according to the 'rpcap_filterbpf' header. More...
 
struct  rpcap_auth
 Structure that keeps the data required for the authentication on the remote host. More...
 
struct  rpcap_stats
 Structure that keeps the statistics about the number of packets captured, dropped, etc. More...
 
struct  rpcap_sampling
 Structure that is needed to set sampling parameters. More...
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Macros

#define RPCAP_DEFAULT_NETPORT   "2002"
 
#define RPCAP_DEFAULT_NETPORT_ACTIVE   "2003"
 
#define RPCAP_DEFAULT_NETADDR   ""
 
#define RPCAP_VERSION   0
 
#define RPCAP_TIMEOUT_INIT   90
 
#define RPCAP_TIMEOUT_RUNTIME   180
 
#define RPCAP_ACTIVE_WAIT   30
 
#define RPCAP_SUSPEND_WRONGAUTH   1
 
#define RPCAP_NETBUF_SIZE   64000
 Buffer used by socket functions to send-receive packets. In case you plan to have messages larger than this value, you have to increase it. More...
 
#define RPCAP_HOSTLIST_SEP   " ,;\n\r"
 Separators used for the host list. More...
 
#define RPCAP_MSG_ERROR   1
 
#define RPCAP_MSG_FINDALLIF_REQ   2
 
#define RPCAP_MSG_OPEN_REQ   3
 
#define RPCAP_MSG_STARTCAP_REQ   4
 
#define RPCAP_MSG_UPDATEFILTER_REQ   5
 
#define RPCAP_MSG_CLOSE   6
 
#define RPCAP_MSG_PACKET   7
 
#define RPCAP_MSG_AUTH_REQ   8
 
#define RPCAP_MSG_STATS_REQ   9
 
#define RPCAP_MSG_ENDCAP_REQ   10
 
#define RPCAP_MSG_SETSAMPLING_REQ   11
 
#define RPCAP_MSG_FINDALLIF_REPLY   (128+RPCAP_MSG_FINDALLIF_REQ)
 
#define RPCAP_MSG_OPEN_REPLY   (128+RPCAP_MSG_OPEN_REQ)
 
#define RPCAP_MSG_STARTCAP_REPLY   (128+RPCAP_MSG_STARTCAP_REQ)
 
#define RPCAP_MSG_UPDATEFILTER_REPLY   (128+RPCAP_MSG_UPDATEFILTER_REQ)
 
#define RPCAP_MSG_AUTH_REPLY   (128+RPCAP_MSG_AUTH_REQ)
 
#define RPCAP_MSG_STATS_REPLY   (128+RPCAP_MSG_STATS_REQ)
 
#define RPCAP_MSG_ENDCAP_REPLY   (128+RPCAP_MSG_ENDCAP_REQ)
 
#define RPCAP_MSG_SETSAMPLING_REPLY   (128+RPCAP_MSG_SETSAMPLING_REQ)
 
#define RPCAP_STARTCAPREQ_FLAG_PROMISC   1
 
#define RPCAP_STARTCAPREQ_FLAG_DGRAM   2
 
#define RPCAP_STARTCAPREQ_FLAG_SERVEROPEN   4
 
#define RPCAP_STARTCAPREQ_FLAG_INBOUND   8
 
#define RPCAP_STARTCAPREQ_FLAG_OUTBOUND   16
 
#define RPCAP_UPDATEFILTER_BPF   1
 
#define PCAP_ERR_NETW   1
 
#define PCAP_ERR_INITTIMEOUT   2
 
#define PCAP_ERR_AUTH   3
 
#define PCAP_ERR_FINDALLIF   4
 
#define PCAP_ERR_NOREMOTEIF   5
 
#define PCAP_ERR_OPEN   6
 
#define PCAP_ERR_UPDATEFILTER   7
 
#define PCAP_ERR_GETSTATS   8
 
#define PCAP_ERR_READEX   9
 
#define PCAP_ERR_HOSTNOAUTH   10
 
#define PCAP_ERR_REMOTEACCEPT   11
 
#define PCAP_ERR_STARTCAPTURE   12
 
#define PCAP_ERR_ENDCAPTURE   13
 
#define PCAP_ERR_RUNTIMETIMEOUT   14
 
#define PCAP_ERR_SETSAMPLING   15
 
#define PCAP_ERR_WRONGMSG   16
 
#define PCAP_ERR_WRONGVER   17
 
- - - - - - - - - - - - - -

-Typedefs

typedef unsigned char uint8
 Provides an 8-bits unsigned integer. More...
 
typedef unsigned short uint16
 Provides a 16-bits unsigned integer. More...
 
typedef unsigned int uint32
 Provides a 32-bits unsigned integer. More...
 
typedef int int32
 Provides a 32-bits integer. More...
 
-

Detailed Description

-

Macro Definition Documentation

- -
-
- - - - -
#define PCAP_ERR_AUTH   3
-
-

Generic authentication error

- -

Definition at line 313 of file pcap-remote.h.

- -
-
- -
-
- - - - -
#define PCAP_ERR_ENDCAPTURE   13
-
-

Generic pcap_endcapture error

- -

Definition at line 323 of file pcap-remote.h.

- -
-
- -
-
- - - - -
#define PCAP_ERR_FINDALLIF   4
-
-

Generic findalldevs error

- -

Definition at line 314 of file pcap-remote.h.

- -
-
- -
-
- - - - -
#define PCAP_ERR_GETSTATS   8
-
-

Generic pcap_stats error

- -

Definition at line 318 of file pcap-remote.h.

- -
-
- -
-
- - - - -
#define PCAP_ERR_HOSTNOAUTH   10
-
-

The host is not authorized to connect to this server

- -

Definition at line 320 of file pcap-remote.h.

- -
-
- -
-
- - - - -
#define PCAP_ERR_INITTIMEOUT   2
-
-

The RPCAP initial timeout has expired

- -

Definition at line 312 of file pcap-remote.h.

- -
-
- -
-
- - - - -
#define PCAP_ERR_NETW   1
-
-

Network error

- -

Definition at line 311 of file pcap-remote.h.

- -
-
- -
-
- - - - -
#define PCAP_ERR_NOREMOTEIF   5
-
-

The findalldevs was ok, but the remote end had no interfaces to list

- -

Definition at line 315 of file pcap-remote.h.

- -
-
- -
-
- - - - -
#define PCAP_ERR_OPEN   6
-
-

Generic pcap_open error

- -

Definition at line 316 of file pcap-remote.h.

- -
-
- -
-
- - - - -
#define PCAP_ERR_READEX   9
-
-

Generic pcap_next_ex error

- -

Definition at line 319 of file pcap-remote.h.

- -
-
- -
-
- - - - -
#define PCAP_ERR_REMOTEACCEPT   11
-
-

Generic pcap_remoteaccept error

- -

Definition at line 321 of file pcap-remote.h.

- -
-
- -
-
- - - - -
#define PCAP_ERR_RUNTIMETIMEOUT   14
-
-

The RPCAP run-time timeout has expired

- -

Definition at line 324 of file pcap-remote.h.

- -
-
- -
-
- - - - -
#define PCAP_ERR_SETSAMPLING   15
-
-

Error diring the settings of sampling parameters

- -

Definition at line 325 of file pcap-remote.h.

- -
-
- -
-
- - - - -
#define PCAP_ERR_STARTCAPTURE   12
-
-

Generic pcap_startcapture error

- -

Definition at line 322 of file pcap-remote.h.

- -
-
- -
-
- - - - -
#define PCAP_ERR_UPDATEFILTER   7
-
-

Generic updatefilter error

- -

Definition at line 317 of file pcap-remote.h.

- -
-
- -
-
- - - - -
#define PCAP_ERR_WRONGMSG   16
-
-

The other end endpoint sent a message which has not been recognized

- -

Definition at line 326 of file pcap-remote.h.

- -
-
- -
-
- - - - -
#define PCAP_ERR_WRONGVER   17
-
-

The other end endpoint ahs a version number that is not compatible with our

- -

Definition at line 327 of file pcap-remote.h.

- -
-
- -
-
- - - - -
#define RPCAP_ACTIVE_WAIT   30
-
-

Waiting time betweek two attempts to open a connection, in active mode (default: 30 sec)

- -

Definition at line 92 of file pcap-remote.h.

- -
-
- -
-
- - - - -
#define RPCAP_DEFAULT_NETADDR   ""
-
-

Default network address on which the RPCAP daemon binds to.

- -

Definition at line 88 of file pcap-remote.h.

- -
-
- -
-
- - - - -
#define RPCAP_DEFAULT_NETPORT   "2002"
-
-

Default port on which the RPCAP daemon is waiting for connections.

- -

Definition at line 85 of file pcap-remote.h.

- -
-
- -
-
- - - - -
#define RPCAP_DEFAULT_NETPORT_ACTIVE   "2003"
-
-

Default port on which the client workstation is waiting for connections in case of active mode.

- -

Definition at line 87 of file pcap-remote.h.

- -
-
- -
-
- - - - -
#define RPCAP_HOSTLIST_SEP   " ,;\n\r"
-
- -

Separators used for the host list.

-

It is used:

    -
  • by the rpcapd daemon, when you types a list of allowed connecting hosts
  • -
  • by the rpcap in active mode, when the client waits for incoming connections from other hosts
  • -
- -

Definition at line 109 of file pcap-remote.h.

- -
-
- -
-
- - - - -
#define RPCAP_MSG_AUTH_REPLY   (128+RPCAP_MSG_AUTH_REQ)
-
-

Sends a message that says 'ok, authorization successful'

- -

Definition at line 296 of file pcap-remote.h.

- -
-
- -
-
- - - - -
#define RPCAP_MSG_AUTH_REQ   8
-
-

Message that keeps the authentication parameters

- -

Definition at line 287 of file pcap-remote.h.

- -
-
- -
-
- - - - -
#define RPCAP_MSG_CLOSE   6
-
-

Close the connection with the remote peer

- -

Definition at line 285 of file pcap-remote.h.

- -
-
- -
-
- - - - -
#define RPCAP_MSG_ENDCAP_REPLY   (128+RPCAP_MSG_ENDCAP_REQ)
-
-

Confirms that the capture stopped succesfully

- -

Definition at line 298 of file pcap-remote.h.

- -
-
- -
-
- - - - -
#define RPCAP_MSG_ENDCAP_REQ   10
-
-

Stops the current capture, keeping the device open

- -

Definition at line 289 of file pcap-remote.h.

- -
-
- -
-
- - - - -
#define RPCAP_MSG_ERROR   1
-
-

Message that keeps an error notification

- -

Definition at line 280 of file pcap-remote.h.

- -
-
- -
-
- - - - -
#define RPCAP_MSG_FINDALLIF_REPLY   (128+RPCAP_MSG_FINDALLIF_REQ)
-
-

Keeps the list of all the remote interfaces

- -

Definition at line 292 of file pcap-remote.h.

- -
-
- -
-
- - - - -
#define RPCAP_MSG_FINDALLIF_REQ   2
-
-

Request to list all the remote interfaces

- -

Definition at line 281 of file pcap-remote.h.

- -
-
- -
-
- - - - -
#define RPCAP_MSG_OPEN_REPLY   (128+RPCAP_MSG_OPEN_REQ)
-
-

The remote device has been opened correctly

- -

Definition at line 293 of file pcap-remote.h.

- -
-
- -
-
- - - - -
#define RPCAP_MSG_OPEN_REQ   3
-
-

Request to open a remote device

- -

Definition at line 282 of file pcap-remote.h.

- -
-
- -
-
- - - - -
#define RPCAP_MSG_PACKET   7
-
-

This is a 'data' message, which carries a network packet

- -

Definition at line 286 of file pcap-remote.h.

- -
-
- -
-
- - - - -
#define RPCAP_MSG_SETSAMPLING_REPLY   (128+RPCAP_MSG_SETSAMPLING_REQ)
-
-

Confirms that the capture stopped succesfully

- -

Definition at line 299 of file pcap-remote.h.

- -
-
- -
-
- - - - -
#define RPCAP_MSG_SETSAMPLING_REQ   11
-
-

Sset sampling parameters

- -

Definition at line 290 of file pcap-remote.h.

- -
-
- -
-
- - - - -
#define RPCAP_MSG_STARTCAP_REPLY   (128+RPCAP_MSG_STARTCAP_REQ)
-
-

The capture is staarting correctly

- -

Definition at line 294 of file pcap-remote.h.

- -
-
- -
-
- - - - -
#define RPCAP_MSG_STARTCAP_REQ   4
-
-

Request to start a capture on a remote device

- -

Definition at line 283 of file pcap-remote.h.

- -
-
- -
-
- - - - -
#define RPCAP_MSG_STATS_REPLY   (128+RPCAP_MSG_STATS_REQ)
-
-

Message that keeps the network statistics

- -

Definition at line 297 of file pcap-remote.h.

- -
-
- -
-
- - - - -
#define RPCAP_MSG_STATS_REQ   9
-
-

It requires to have network statistics

- -

Definition at line 288 of file pcap-remote.h.

- -
-
- -
-
- - - - -
#define RPCAP_MSG_UPDATEFILTER_REPLY   (128+RPCAP_MSG_UPDATEFILTER_REQ)
-
-

The filter has been applied correctly on the remote device

- -

Definition at line 295 of file pcap-remote.h.

- -
-
- -
-
- - - - -
#define RPCAP_MSG_UPDATEFILTER_REQ   5
-
-

Send a compiled filter into the remote device

- -

Definition at line 284 of file pcap-remote.h.

- -
-
- -
-
- - - - -
#define RPCAP_NETBUF_SIZE   64000
-
- -

Buffer used by socket functions to send-receive packets. In case you plan to have messages larger than this value, you have to increase it.

- -

Definition at line 99 of file pcap-remote.h.

- -
-
- -
-
- - - - -
#define RPCAP_STARTCAPREQ_FLAG_DGRAM   2
-
-

Use a datagram (i.e. UDP) connection for the data stream (default: use TCP)

- -

Definition at line 302 of file pcap-remote.h.

- -
-
- -
-
- - - - -
#define RPCAP_STARTCAPREQ_FLAG_INBOUND   8
-
-

Capture only inbound packets (take care: the flag has no effects with promiscuous enabled)

- -

Definition at line 304 of file pcap-remote.h.

- -
-
- -
-
- - - - -
#define RPCAP_STARTCAPREQ_FLAG_OUTBOUND   16
-
-

Capture only outbound packets (take care: the flag has no effects with promiscuous enabled)

- -

Definition at line 305 of file pcap-remote.h.

- -
-
- -
-
- - - - -
#define RPCAP_STARTCAPREQ_FLAG_PROMISC   1
-
-

Enables promiscuous mode (default: disabled)

- -

Definition at line 301 of file pcap-remote.h.

- -
-
- -
-
- - - - -
#define RPCAP_STARTCAPREQ_FLAG_SERVEROPEN   4
-
-

The server has to open the data connection toward the client

- -

Definition at line 303 of file pcap-remote.h.

- -
-
- -
-
- - - - -
#define RPCAP_SUSPEND_WRONGAUTH   1
-
-

If the authentication is wrong, stops 1 sec before accepting a new auth message

- -

Definition at line 93 of file pcap-remote.h.

- -
-
- -
-
- - - - -
#define RPCAP_TIMEOUT_INIT   90
-
-

Initial timeout for RPCAP connections (default: 90 sec)

- -

Definition at line 90 of file pcap-remote.h.

- -
-
- -
-
- - - - -
#define RPCAP_TIMEOUT_RUNTIME   180
-
-

Run-time timeout for RPCAP connections (default: 3 min)

- -

Definition at line 91 of file pcap-remote.h.

- -
-
- -
-
- - - - -
#define RPCAP_UPDATEFILTER_BPF   1
-
-

This code tells us that the filter is encoded with the BPF/NPF syntax

- -

Definition at line 307 of file pcap-remote.h.

- -
-
- -
-
- - - - -
#define RPCAP_VERSION   0
-
-

Present version of the RPCAP protocol (0 = Experimental).

- -

Definition at line 89 of file pcap-remote.h.

- -
-
-

Typedef Documentation

- -
-
- - - - -
typedef int int32
-
- -

Provides a 32-bits integer.

- -

Definition at line 118 of file pcap-remote.h.

- -
-
- -
-
- - - - -
typedef unsigned short uint16
-
- -

Provides a 16-bits unsigned integer.

- -

Definition at line 116 of file pcap-remote.h.

- -
-
- -
-
- - - - -
typedef unsigned int uint32
-
- -

Provides a 32-bits unsigned integer.

- -

Definition at line 117 of file pcap-remote.h.

- -
-
- -
-
- - - - -
typedef unsigned char uint8
-
- -

Provides an 8-bits unsigned integer.

- -

Definition at line 115 of file pcap-remote.h.

- -
-
-
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/group__remote__samp__methods.html b/libs/WinPcap-413-173-b4/docs/html/group__remote__samp__methods.html deleted file mode 100644 index 1631b955..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/group__remote__samp__methods.html +++ /dev/null @@ -1,51 +0,0 @@ - - - - - - -WinPcap: Sampling methods defined in the pcap_setsampling() function - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - -
-
-
-
Sampling methods defined in the pcap_setsampling() function
-
-
-
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/group__remote__source__ID.html b/libs/WinPcap-413-173-b4/docs/html/group__remote__source__ID.html deleted file mode 100644 index a8a843b7..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/group__remote__source__ID.html +++ /dev/null @@ -1,51 +0,0 @@ - - - - - - -WinPcap: Identifiers related to the new source syntax - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - -
-
-
-
Identifiers related to the new source syntax
-
-
-
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/group__remote__source__string.html b/libs/WinPcap-413-173-b4/docs/html/group__remote__source__string.html deleted file mode 100644 index a922f1bb..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/group__remote__source__string.html +++ /dev/null @@ -1,51 +0,0 @@ - - - - - - -WinPcap: Strings related to the new source syntax - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - -
-
-
-
Strings related to the new source syntax
-
-
-
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/group__remote__struct.html b/libs/WinPcap-413-173-b4/docs/html/group__remote__struct.html deleted file mode 100644 index 1c469b75..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/group__remote__struct.html +++ /dev/null @@ -1,68 +0,0 @@ - - - - - - -WinPcap: Exported Structures and Definitions - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - -
-
- -
-
Exported Structures and Definitions
-
- - -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/group__remotefunc.html b/libs/WinPcap-413-173-b4/docs/html/group__remotefunc.html deleted file mode 100644 index 6d956ee8..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/group__remotefunc.html +++ /dev/null @@ -1,51 +0,0 @@ - - - - - - -WinPcap: Exported Functions - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - -
-
-
-
Exported Functions
-
-
-
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/group__wpcap.html b/libs/WinPcap-413-173-b4/docs/html/group__wpcap.html deleted file mode 100644 index 3bdd95e2..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/group__wpcap.html +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - -WinPcap: WinPcap user's manual - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - -
-
- -
-
WinPcap user's manual
-
-
- - - - - - - - - - - - -

-Modules

 Definitions
 
 Exported functions
 
 WinPcap tutorial: a step by step guide to using WinPcap
 
 Filtering expression syntax
 
 Using WinPcap in your programs
 
-

Detailed Description

- - - - - - - - - - -

This section contains the user manual of wpcap.dll, the -dynamic library that contains the public WinPcap API. -wpcap.dll exports a set of -system-independent functions for packet capture and network analysis. These -functions can be used to:

-
    -
  • obtain the list of the available network adapters -
  • retrieve various information about an adapter, like the description and the list of addresses
  • -
  • sniff the packets using one of the network interface cards of the PC
  • -
  • send packets to the network -
  • efficiently save packets to disk and load them with an interface similar to the one of - live capture
  • -
  • create packet filters using a high level language and apply them to the captured - packets
  • -
-

wpcap.dll is compatible with libpcap, the well known packet capture library -for Unix. This compatibility means that one can develop portable network tools -that will run on the Win32 OS family and on all of the major Unix flavors.

-

Several portions of the manual present in this section derive directly from the man pages of tcpdump and libpcap, maintained by the tcpdump.org developers. Therefore, if you -are looking for updated docs, you can consult the web site www.tcpdump.org.

-

Note

-

Some functions are marked deprecated -or discouraged. The meanings of these labels are:

-
    -
  • discouraged: the use of another function with similar purpose is - suggested, however this one is still valid.
  • -
  • deprecated: the function is present only for portability and - backward compatibility. It should be avoided, and it is strongly suggested - to use another equivalent function instead.
    -
  • -
-

- - - -

- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/group__wpcap__def.html b/libs/WinPcap-413-173-b4/docs/html/group__wpcap__def.html deleted file mode 100644 index d330c00f..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/group__wpcap__def.html +++ /dev/null @@ -1,275 +0,0 @@ - - - - - - -WinPcap: Definitions - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - -
- -
- - - - - - - - - - - - - - - - - -

-Data Structures

struct  pcap_file_header
 Header of a libpcap dump file. More...
 
struct  pcap_pkthdr
 Header of a packet in the dump file. More...
 
struct  pcap_stat
 Structure that keeps statistical values on an interface. More...
 
struct  pcap_if
 Item in a list of interfaces, used by pcap_findalldevs(). More...
 
struct  pcap_addr
 Representation of an interface address, used by pcap_findalldevs(). More...
 
- - - - - - - - - - - - - -

-Macros

#define PCAP_VERSION_MAJOR   2
 Major libpcap dump file version. More...
 
#define PCAP_VERSION_MINOR   4
 Minor libpcap dump file version. More...
 
#define PCAP_ERRBUF_SIZE   256
 Size to use when allocating the buffer that contains the libpcap errors. More...
 
#define PCAP_IF_LOOPBACK   0x00000001
 interface is loopback More...
 
- - - - - - - - - - - - - - - - - - - -

-Typedefs

typedef int bpf_int32
 32-bit integer More...
 
typedef u_int bpf_u_int32
 32-bit unsigned integer More...
 
typedef struct pcap pcap_t
 Descriptor of an open capture instance. This structure is opaque to the user, that handles its content through the functions provided by wpcap.dll. More...
 
typedef struct pcap_dumper pcap_dumper_t
 libpcap savefile descriptor. More...
 
typedef struct pcap_if pcap_if_t
 Item in a list of interfaces, see pcap_if. More...
 
typedef struct pcap_addr pcap_addr_t
 Representation of an interface address, see pcap_addr. More...
 
-

Detailed Description

-

Definitions for wpcap.dll

-

Macro Definition Documentation

- -
-
- - - - -
#define PCAP_ERRBUF_SIZE   256
-
- -

Size to use when allocating the buffer that contains the libpcap errors.

- -

Definition at line 59 of file incs/pcap.h.

- -
-
- -
-
- - - - -
#define PCAP_IF_LOOPBACK   0x00000001
-
- -

interface is loopback

- -

Definition at line 156 of file incs/pcap.h.

- -
-
- -
-
- - - - -
#define PCAP_VERSION_MAJOR   2
-
- -

Major libpcap dump file version.

- -

Definition at line 56 of file incs/pcap.h.

- -
-
- -
-
- - - - -
#define PCAP_VERSION_MINOR   4
-
- -

Minor libpcap dump file version.

- -

Definition at line 57 of file incs/pcap.h.

- -
-
-

Typedef Documentation

- -
-
- - - - -
typedef int bpf_int32
-
- -

32-bit integer

-

Compatibility for systems that have a bpf.h that predates the bpf typedefs for 64-bit support.

- -

Definition at line 66 of file incs/pcap.h.

- -
-
- -
-
- - - - -
typedef u_int bpf_u_int32
-
- -

32-bit unsigned integer

- -

Definition at line 67 of file incs/pcap.h.

- -
-
- -
-
- - - - -
typedef struct pcap_addr pcap_addr_t
-
- -

Representation of an interface address, see pcap_addr.

- -

Definition at line 73 of file incs/pcap.h.

- -
-
- -
-
- - - - -
typedef struct pcap_dumper pcap_dumper_t
-
- -

libpcap savefile descriptor.

- -

Definition at line 71 of file incs/pcap.h.

- -
-
- -
-
- - - - -
typedef struct pcap_if pcap_if_t
-
- -

Item in a list of interfaces, see pcap_if.

- -

Definition at line 72 of file incs/pcap.h.

- -
-
- -
-
- - - - -
typedef struct pcap pcap_t
-
- -

Descriptor of an open capture instance. This structure is opaque to the user, that handles its content through the functions provided by wpcap.dll.

- -

Definition at line 70 of file incs/pcap.h.

- -
-
-
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/group__wpcap__tut.html b/libs/WinPcap-413-173-b4/docs/html/group__wpcap__tut.html deleted file mode 100644 index cecba9b7..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/group__wpcap__tut.html +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - -WinPcap: WinPcap tutorial: a step by step guide to using WinPcap - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - -
-
- -
-
WinPcap tutorial: a step by step guide to using WinPcap
-
-
- - - - - - - - - - - - - - - - - - - - -

-Modules

 Obtaining the device list
 
 Obtaining advanced information about installed devices
 
 Opening an adapter and capturing the packets
 
 Capturing the packets without the callback
 
 Filtering the traffic
 
 Interpreting the packets
 
 Handling offline dump files
 
 Sending Packets
 
 Gathering Statistics on the network traffic
 
-

Detailed Description

-

This section shows how to use the features of the WinPcap API. It is organized as a tutorial, subdivided into a set of lessons that will introduce the reader, in a step-by-step fashion, to program development using WinPcap, from the basic functions (obtaining the adapter list, starting a capture, etc.) to the most advanced ones (handling send queues and gathering statistics about network traffic).

-

Several code snippets, as well as simple but complete programs are provided as a reference: all of the source code contains links to the rest of the manual, making it is possible to click on functions and data structures to jump to the corresponding documentation.

-

The samples are written in plain C, so a basic knowledge of C programming is required. Also, since this is a tutorial about a library dealing with "raw" networking packets, good knowledge of networks and network protocols is assumed.

-

Next >>>

-
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/group__wpcap__tut1.html b/libs/WinPcap-413-173-b4/docs/html/group__wpcap__tut1.html deleted file mode 100644 index 0b27591f..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/group__wpcap__tut1.html +++ /dev/null @@ -1,102 +0,0 @@ - - - - - - -WinPcap: Obtaining the device list - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - -
- -
-

Typically, the first thing that a WinPcap-based application does is get a list of attached network adapters. Both libpcap and WinPcap provide the pcap_findalldevs_ex() function for this purpose: this function returns a linked list of pcap_if structures, each of which contains comprehensive information about an attached adapter. In particular, the fields name and description contain the name and a human readable description, respectively, of the corresponding device.

-

The following code retrieves the adapter list and shows it on the screen, printing an error if no adapters are found.

-
#include "pcap.h"
-
-
main()
-
{
-
pcap_if_t *alldevs;
- -
int i=0;
-
char errbuf[PCAP_ERRBUF_SIZE];
-
-
/* Retrieve the device list from the local machine */
-
if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL /* auth is not needed */, &alldevs, errbuf) == -1)
-
{
-
fprintf(stderr,"Error in pcap_findalldevs_ex: %s\n", errbuf);
-
exit(1);
-
}
-
-
/* Print the list */
-
for(d= alldevs; d != NULL; d= d->next)
-
{
-
printf("%d. %s", ++i, d->name);
-
if (d->description)
-
printf(" (%s)\n", d->description);
-
else
-
printf(" (No description available)\n");
-
}
-
-
if (i == 0)
-
{
-
printf("\nNo interfaces found! Make sure WinPcap is installed.\n");
-
return;
-
}
-
-
/* We don't need any more the device list. Free it */
-
pcap_freealldevs(alldevs);
-
}
-

Some comments about this code.

-

First of all, pcap_findalldevs_ex(), like other libpcap functions, has an errbuf parameter. This parameter points to a string filled by libpcap with a description of the error if something goes wrong.

-

Second, remember that not all the OSes supported by libpcap provide a description of the network interfaces, therefore if we want to write a portable application, we must consider the case in which description is null: we print the string "No description available" in that situation.

-

Note finally that we free the list with pcap_freealldevs() once when we have finished with it.

-

Let's try to compile and run the code of this first sample. In order to compile it under Unix or Cygwin, simply type:

-
-  gcc -o testprog testprog.c -lpcap
-

On Windows, you will need to create a project, following the instructions in the Using WinPcap in your programs section of this manual. However, we suggest that you use the WinPcap developer's pack (available at the WinPcap website, http://www.winpcap.org ), since it provides many examples already configured as projects including all the code presented in this tutorial and the includes and libraries needed to compile and run the examples.

-

Assuming we have compiled the program, let's try to run it. On a particular WinXP workstation, the result we optained is

-
-   1. \Device\NPF_{4E273621-5161-46C8-895A-48D0E52A0B83} (Realtek RTL8029(AS) Ethernet Adapter)
-   2. \Device\NPF_{5D24AE04-C486-4A96-83FB-8B5EC6C7F430} (3Com EtherLink PCI) 
-

As you can see, the name of the network adapters (that will be passed to libpcap when opening the devices) under Windows are quite unreadable, so the parenthetical descriptions can be very helpful.

-

<<< Previous Next >>>

-
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/group__wpcap__tut2.html b/libs/WinPcap-413-173-b4/docs/html/group__wpcap__tut2.html deleted file mode 100644 index 0d2a477c..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/group__wpcap__tut2.html +++ /dev/null @@ -1,236 +0,0 @@ - - - - - - -WinPcap: Obtaining advanced information about installed devices - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - -
-
-
-
Obtaining advanced information about installed devices
-
-
-

Lesson 1 (Obtaining the device list) demonstrated how to get basic information (i.e. device name and description) about available adapters. Actually, WinPcap provides also other advanced information. In particular, every pcap_if structure returned by pcap_findalldevs_ex() contains also a list of pcap_addr structures, with:

    -
  • a list of addresses for that interface.
  • -
  • a list of netmasks (each of which corresponds to an entry in the addresses list).
  • -
  • a list of broadcast addresses (each of which corresponds to an entry in the addresses list).
  • -
  • a list of destination addresses (each of which corresponds to an entry in the addresses list).
  • -
-

Additionally, pcap_findalldevs_ex() can also return remote adapters and a list of pcap files that are located in a given local folder.

-

The following sample provides an ifprint() function that prints the complete contents of a pcap_if structure. It is invoked by the program for every entry returned by pcap_findalldevs_ex().

-
/*
-
* Copyright (c) 1999 - 2005 NetGroup, Politecnico di Torino (Italy)
-
* Copyright (c) 2005 - 2006 CACE Technologies, Davis (California)
-
* All rights reserved.
-
*
-
* Redistribution and use in source and binary forms, with or without
-
* modification, are permitted provided that the following conditions
-
* are met:
-
*
-
* 1. Redistributions of source code must retain the above copyright
-
* notice, this list of conditions and the following disclaimer.
-
* 2. Redistributions in binary form must reproduce the above copyright
-
* notice, this list of conditions and the following disclaimer in the
-
* documentation and/or other materials provided with the distribution.
-
* 3. Neither the name of the Politecnico di Torino, CACE Technologies
-
* nor the names of its contributors may be used to endorse or promote
-
* products derived from this software without specific prior written
-
* permission.
-
*
-
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
*
-
*/
-
-
#include <stdio.h>
-
-
#include "pcap.h"
-
-
#ifndef _WIN32
-
#include <sys/socket.h>
-
#include <netinet/in.h>
-
#else
-
#include <winsock.h>
-
#endif
-
-
-
// Function prototypes
-
void ifprint(pcap_if_t *d);
-
char *iptos(u_long in);
-
char* ip6tos(struct sockaddr *sockaddr, char *address, int addrlen);
-
-
-
int main()
-
{
-
pcap_if_t *alldevs;
- -
char errbuf[PCAP_ERRBUF_SIZE+1];
-
char source[PCAP_ERRBUF_SIZE+1];
-
-
printf("Enter the device you want to list:\n"
-
"rpcap:// ==> lists interfaces in the local machine\n"
-
"rpcap://hostname:port ==> lists interfaces in a remote machine\n"
-
" (rpcapd daemon must be up and running\n"
-
" and it must accept 'null' authentication)\n"
-
"file://foldername ==> lists all pcap files in the give folder\n\n"
-
"Enter your choice: ");
-
-
fgets(source, PCAP_ERRBUF_SIZE, stdin);
-
source[PCAP_ERRBUF_SIZE] = '\0';
-
-
/* Retrieve the interfaces list */
-
if (pcap_findalldevs_ex(source, NULL, &alldevs, errbuf) == -1)
-
{
-
fprintf(stderr,"Error in pcap_findalldevs: %s\n",errbuf);
-
exit(1);
-
}
-
-
/* Scan the list printing every entry */
-
for(d=alldevs;d;d=d->next)
-
{
-
ifprint(d);
-
}
-
-
pcap_freealldevs(alldevs);
-
-
return 1;
-
}
-
-
-
-
/* Print all the available information on the given interface */
-
void ifprint(pcap_if_t *d)
-
{
- -
char ip6str[128];
-
-
/* Name */
-
printf("%s\n",d->name);
-
-
/* Description */
-
if (d->description)
-
printf("\tDescription: %s\n",d->description);
-
-
/* Loopback Address*/
-
printf("\tLoopback: %s\n",(d->flags & PCAP_IF_LOOPBACK)?"yes":"no");
-
-
/* IP addresses */
-
for(a=d->addresses;a;a=a->next) {
-
printf("\tAddress Family: #%d\n",a->addr->sa_family);
-
-
switch(a->addr->sa_family)
-
{
-
case AF_INET:
-
printf("\tAddress Family Name: AF_INET\n");
-
if (a->addr)
-
printf("\tAddress: %s\n",iptos(((struct sockaddr_in *)a->addr)->sin_addr.s_addr));
-
if (a->netmask)
-
printf("\tNetmask: %s\n",iptos(((struct sockaddr_in *)a->netmask)->sin_addr.s_addr));
-
if (a->broadaddr)
-
printf("\tBroadcast Address: %s\n",iptos(((struct sockaddr_in *)a->broadaddr)->sin_addr.s_addr));
-
if (a->dstaddr)
-
printf("\tDestination Address: %s\n",iptos(((struct sockaddr_in *)a->dstaddr)->sin_addr.s_addr));
-
break;
-
-
case AF_INET6:
-
printf("\tAddress Family Name: AF_INET6\n");
-
if (a->addr)
-
printf("\tAddress: %s\n", ip6tos(a->addr, ip6str, sizeof(ip6str)));
-
break;
-
-
default:
-
printf("\tAddress Family Name: Unknown\n");
-
break;
-
}
-
}
-
printf("\n");
-
}
-
-
-
-
/* From tcptraceroute, convert a numeric IP address to a string */
-
#define IPTOSBUFFERS 12
-
char *iptos(u_long in)
-
{
-
static char output[IPTOSBUFFERS][3*4+3+1];
-
static short which;
-
u_char *p;
-
-
p = (u_char *)&in;
-
which = (which + 1 == IPTOSBUFFERS ? 0 : which + 1);
-
_snprintf_s(output[which], sizeof(output[which]), sizeof(output[which]),"%d.%d.%d.%d", p[0], p[1], p[2], p[3]);
-
return output[which];
-
}
-
-
char* ip6tos(struct sockaddr *sockaddr, char *address, int addrlen)
-
{
-
socklen_t sockaddrlen;
-
-
#ifdef _WIN32
-
sockaddrlen = sizeof(struct sockaddr_in6);
-
#else
-
sockaddrlen = sizeof(struct sockaddr_storage);
-
#endif
-
-
-
if(getnameinfo(sockaddr,
-
sockaddrlen,
-
address,
-
addrlen,
-
NULL,
-
0,
-
NI_NUMERICHOST) != 0) address = NULL;
-
-
return address;
-
}
-
-
-

<<< Previous Next >>>

-
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/group__wpcap__tut3.html b/libs/WinPcap-413-173-b4/docs/html/group__wpcap__tut3.html deleted file mode 100644 index 0138cd63..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/group__wpcap__tut3.html +++ /dev/null @@ -1,161 +0,0 @@ - - - - - - -WinPcap: Opening an adapter and capturing the packets - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - -
-
-
-
-
-
-

Now that we've seen how to obtain an adapter to play with, let's start the real job, opening an adapter and capturing some traffic. In this lesson we'll write a program that prints some information about each packet flowing through the adapter.

-

The function that opens a capture device is pcap_open(). The parameters, snaplen, flags and to_ms deserve some explanation.

-

snaplen specifies the portion of the packet to capture. On some OSes (like xBSD and Win32), the packet driver can be configured to capture only the initial part of any packet: this decreases the amount of data to copy to the application and therefore improves the efficiency of the capture. In this case we use the value 65536 which is higher than the greatest MTU that we could encounter. In this manner we ensure that the application will always receive the whole packet.

-

flags: the most important flag is the one that indicates if the adapter will be put in promiscuous mode. In normal operation, an adapter only captures packets from the network that are destined to it; the packets exchanged by other hosts are therefore ignored. Instead, when the adapter is in promiscuous mode it captures all packets whether they are destined to it or not. This means that on shared media (like non-switched Ethernet), WinPcap will be able to capture the packets of other hosts. Promiscuous mode is the default for most capture applications, so we enable it in the following example.

-

to_ms specifies the read timeout, in milliseconds. A read on the adapter (for example, with pcap_dispatch() or pcap_next_ex()) will always return after to_ms milliseconds, even if no packets are available from the network. to_ms also defines the interval between statistical reports if the adapter is in statistical mode (see the lesson "\ref wpcap_tut9" for information about statistical mode). Setting to_ms to 0 means no timeout, a read on the adapter never returns if no packets arrive. A -1 timeout on the other side causes a read on the adapter to always return immediately.

-
#include "pcap.h"
-
-
/* prototype of the packet handler */
-
void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data);
-
-
int main()
-
{
-
pcap_if_t *alldevs;
- -
int inum;
-
int i=0;
-
pcap_t *adhandle;
-
char errbuf[PCAP_ERRBUF_SIZE];
-
-
/* Retrieve the device list on the local machine */
-
if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL, &alldevs, errbuf) == -1)
-
{
-
fprintf(stderr,"Error in pcap_findalldevs: %s\n", errbuf);
-
exit(1);
-
}
-
-
/* Print the list */
-
for(d=alldevs; d; d=d->next)
-
{
-
printf("%d. %s", ++i, d->name);
-
if (d->description)
-
printf(" (%s)\n", d->description);
-
else
-
printf(" (No description available)\n");
-
}
-
-
if(i==0)
-
{
-
printf("\nNo interfaces found! Make sure WinPcap is installed.\n");
-
return -1;
-
}
-
-
printf("Enter the interface number (1-%d):",i);
-
scanf_s("%d", &inum);
-
-
if(inum < 1 || inum > i)
-
{
-
printf("\nInterface number out of range.\n");
-
/* Free the device list */
-
pcap_freealldevs(alldevs);
-
return -1;
-
}
-
-
/* Jump to the selected adapter */
-
for(d=alldevs, i=0; i< inum-1 ;d=d->next, i++);
-
-
/* Open the device */
-
if ( (adhandle= pcap_open(d->name, // name of the device
-
65536, // portion of the packet to capture
-
// 65536 guarantees that the whole packet will be captured on all the link layers
-
PCAP_OPENFLAG_PROMISCUOUS, // promiscuous mode
-
1000, // read timeout
-
NULL, // authentication on the remote machine
-
errbuf // error buffer
-
) ) == NULL)
-
{
-
fprintf(stderr,"\nUnable to open the adapter. %s is not supported by WinPcap\n", d->name);
-
/* Free the device list */
-
pcap_freealldevs(alldevs);
-
return -1;
-
}
-
-
printf("\nlistening on %s...\n", d->description);
-
-
/* At this point, we don't need any more the device list. Free it */
-
pcap_freealldevs(alldevs);
-
-
/* start the capture */
-
pcap_loop(adhandle, 0, packet_handler, NULL);
-
-
return 0;
-
}
-
-
-
/* Callback function invoked by libpcap for every incoming packet */
-
void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data)
-
{
-
struct tm ltime;
-
char timestr[16];
-
time_t local_tv_sec;
-
-
/*
-
* unused variables
-
*/
-
(VOID)(param);
-
(VOID)(pkt_data);
-
-
/* convert the timestamp to readable format */
-
local_tv_sec = header->ts.tv_sec;
-
localtime_s(&ltime, &local_tv_sec);
-
strftime( timestr, sizeof timestr, "%H:%M:%S", &ltime);
-
-
printf("%s,%.6d len:%d\n", timestr, header->ts.tv_usec, header->len);
-
-
}
-

Once the adapter is opened, the capture can be started with pcap_dispatch() or pcap_loop(). These two functions are very similar, the difference is that pcap_ dispatch() returns (although not guaranteed) when the timeout expires while pcap_loop() doesn't return until cnt packets have been captured, so it can block for an arbitrary period on an under-utilized network. pcap_loop() is enough for the purpose of this sample, while pcap_dispatch() is normally used in a more complex program.

-

Both of these functions have a callback parameter, packet_handler, pointing to a function that will receive the packets. This function is invoked by libpcap for every new packet coming from the network and receives a generic status (corresponding to the user parameter of pcap_loop() and pcap_dispatch()), a header with some information on the packet like the timestamp and the length and the actual data of the packet including all the protocol headers. Note that the frame CRC is normally not present, because it is removed by the network adapter after frame validation. Note also that most adapters discard packets with wrong CRCs, therefore WinPcap is normally not able to capture them.

-

The above example extracts the timestamp and the length of every packet from the pcap_pkthdr header and prints them on the screen.

-

Please note that there may be a drawback using pcap_loop() mainly related to the fact that the handler is called by the packet capture driver; therefore the user application does not have direct control over it. Another approach (and to have more readable programs) is to use the pcap_next_ex() function, which is presented in the next example (Capturing the packets without the callback).

-

<<< Previous Next >>>

-
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/group__wpcap__tut4.html b/libs/WinPcap-413-173-b4/docs/html/group__wpcap__tut4.html deleted file mode 100644 index ebf578c7..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/group__wpcap__tut4.html +++ /dev/null @@ -1,158 +0,0 @@ - - - - - - -WinPcap: Capturing the packets without the callback - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - -
-
- -
-
-

The example program in this lesson behaves exactly like the previous program (Opening an adapter and capturing the packets), but it uses pcap_next_ex() instead of pcap_loop().

-

The callback-based capture mechanism of pcap_loop() is elegant and it could be a good choice in some situations. However, handling a callback is sometimes not practical – it often makes the program more complex especially in situations with multithreaded applications or C++ classes.

-

In these cases, pcap_next_ex() retrievs a packet with a direct call – using pcap_next_ex() packets are received only when the programmer wants them.

-

The parameters of this function are the same as a capture callback – it takes an adapter descriptor and a couple of pointers that will be initialized and returned to the user (one to a pcap_pkthdr structure and another to a buffer with the packet data).

-

In the following program, we recycle the callback code of the previous lesson's example and move it inside main() right after the call to pcap_next_ex().

-
#include "pcap.h"
-
-
-
int main()
-
{
-
pcap_if_t *alldevs;
- -
int inum;
-
int i=0;
-
pcap_t *adhandle;
-
int res;
-
char errbuf[PCAP_ERRBUF_SIZE];
-
struct tm ltime;
-
char timestr[16];
-
struct pcap_pkthdr *header;
-
const u_char *pkt_data;
-
time_t local_tv_sec;
-
-
-
/* Retrieve the device list on the local machine */
-
if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL, &alldevs, errbuf) == -1)
-
{
-
fprintf(stderr,"Error in pcap_findalldevs: %s\n", errbuf);
-
exit(1);
-
}
-
-
/* Print the list */
-
for(d=alldevs; d; d=d->next)
-
{
-
printf("%d. %s", ++i, d->name);
-
if (d->description)
-
printf(" (%s)\n", d->description);
-
else
-
printf(" (No description available)\n");
-
}
-
-
if(i==0)
-
{
-
printf("\nNo interfaces found! Make sure WinPcap is installed.\n");
-
return -1;
-
}
-
-
printf("Enter the interface number (1-%d):",i);
-
scanf_s("%d", &inum);
-
-
if(inum < 1 || inum > i)
-
{
-
printf("\nInterface number out of range.\n");
-
/* Free the device list */
-
pcap_freealldevs(alldevs);
-
return -1;
-
}
-
-
/* Jump to the selected adapter */
-
for(d=alldevs, i=0; i< inum-1 ;d=d->next, i++);
-
-
/* Open the device */
-
if ( (adhandle= pcap_open(d->name, // name of the device
-
65536, // portion of the packet to capture.
-
// 65536 guarantees that the whole packet will be captured on all the link layers
-
PCAP_OPENFLAG_PROMISCUOUS, // promiscuous mode
-
1000, // read timeout
-
NULL, // authentication on the remote machine
-
errbuf // error buffer
-
) ) == NULL)
-
{
-
fprintf(stderr,"\nUnable to open the adapter. %s is not supported by WinPcap\n", d->name);
-
/* Free the device list */
-
pcap_freealldevs(alldevs);
-
return -1;
-
}
-
-
printf("\nlistening on %s...\n", d->description);
-
-
/* At this point, we don't need any more the device list. Free it */
-
pcap_freealldevs(alldevs);
-
-
/* Retrieve the packets */
-
while((res = pcap_next_ex( adhandle, &header, &pkt_data)) >= 0){
-
-
if(res == 0)
-
/* Timeout elapsed */
-
continue;
-
-
/* convert the timestamp to readable format */
-
local_tv_sec = header->ts.tv_sec;
-
localtime_s(&ltime, &local_tv_sec);
-
strftime( timestr, sizeof timestr, "%H:%M:%S", &ltime);
-
-
printf("%s,%.6d len:%d\n", timestr, header->ts.tv_usec, header->len);
-
}
-
-
if(res == -1){
-
printf("Error reading the packets: %s\n", pcap_geterr(adhandle));
-
return -1;
-
}
-
-
return 0;
-
}
-

Why do we use pcap_next_ex() instead of the old pcap_next()? Because pcap_next() has some drawbacks. First of all, it is inefficient because it hides the callback method but still relies on pcap_dispatch(). Second, it is not able to detect EOF, so it's not very useful when gathering packets from a file.

-

Notice also that pcap_next_ex() returns different values for success, timeout elapsed, error and EOF conditions.

-

<<< Previous Next >>>

-
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/group__wpcap__tut5.html b/libs/WinPcap-413-173-b4/docs/html/group__wpcap__tut5.html deleted file mode 100644 index b5c2832e..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/group__wpcap__tut5.html +++ /dev/null @@ -1,83 +0,0 @@ - - - - - - -WinPcap: Filtering the traffic - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - -
- -
-

One of the most powerful features offered by WinPcap (and by libpcap as well) is the filtering engine. It provides a very efficient way to receive subsets of the network traffic, and is (usually) integrated with the capture mechanism provided by WinPcap. The functions used to filter packets are pcap_compile() and pcap_setfilter().

-

pcap_compile() takes a string containing a high-level Boolean (filter) expression and produces a low-level byte code that can be interpreted by the fileter engine in the packet driver. The syntax of the boolean expression can be found in the Filtering expression syntax section of this documentation.

-

pcap_setfilter() associates a filter with a capture session in the kernel driver. Once pcap_setfilter() is called, the associated filter will be applied to all the packets coming from the network, and all the conformant packets (i.e., packets for which the Boolean expression evaluates to true) will be actually copied to the application.

-

The following code shows how to compile and set a filter. Note that we must retrieve the netmask from the pcap_if structure that describes the adapter, because some filters created by pcap_compile() require it.

-

The filter passed to pcap_compile() in this code snippet is "ip and tcp", which means to "keep only the packets that are both IPv4 and TCP and deliver them to the application".

-
if (d->addresses != NULL)
-
/* Retrieve the mask of the first address of the interface */
-
netmask=((struct sockaddr_in *)(d->addresses->netmask))->sin_addr.S_un.S_addr;
-
else
-
/* If the interface is without an address we suppose to be in a C class network */
-
netmask=0xffffff;
-
-
-
//compile the filter
-
if (pcap_compile(adhandle, &fcode, "ip and tcp", 1, netmask) < 0)
-
{
-
fprintf(stderr,"\nUnable to compile the packet filter. Check the syntax.\n");
-
/* Free the device list */
-
pcap_freealldevs(alldevs);
-
return -1;
-
}
-
-
//set the filter
-
if (pcap_setfilter(adhandle, &fcode) < 0)
-
{
-
fprintf(stderr,"\nError setting the filter.\n");
-
/* Free the device list */
-
pcap_freealldevs(alldevs);
-
return -1;
-
}
-

If you want to see some code that uses the filtering functions shown in this lesson, look at the example presented in the next Lesson, Interpreting the packets.

-

<<< Previous Next >>>

-
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/group__wpcap__tut6.html b/libs/WinPcap-413-173-b4/docs/html/group__wpcap__tut6.html deleted file mode 100644 index b7ba7bfb..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/group__wpcap__tut6.html +++ /dev/null @@ -1,302 +0,0 @@ - - - - - - -WinPcap: Interpreting the packets - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - -
- -
-

Now that we are able to capture and filter network traffic, we want to put our knowledge to work with a simple "real world" application.

-

In this lesson we will take code from the previous lessons and use these pieces to build a more useful program. the main purpose of the current program is to show how the protocol headers of a captured packet can be parsed and interpreted. The resulting application, called UDPdump, prints a summary of the UDP traffic on our network.

-

We have chosen to parse and display the UDP protocol because it is more accessible than other protocols such as TCP and consequently is an excellent initial example. Let's look at the code:

-
/*
-
* Copyright (c) 1999 - 2005 NetGroup, Politecnico di Torino (Italy)
-
* Copyright (c) 2005 - 2006 CACE Technologies, Davis (California)
-
* All rights reserved.
-
*
-
* Redistribution and use in source and binary forms, with or without
-
* modification, are permitted provided that the following conditions
-
* are met:
-
*
-
* 1. Redistributions of source code must retain the above copyright
-
* notice, this list of conditions and the following disclaimer.
-
* 2. Redistributions in binary form must reproduce the above copyright
-
* notice, this list of conditions and the following disclaimer in the
-
* documentation and/or other materials provided with the distribution.
-
* 3. Neither the name of the Politecnico di Torino, CACE Technologies
-
* nor the names of its contributors may be used to endorse or promote
-
* products derived from this software without specific prior written
-
* permission.
-
*
-
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
*
-
*/
-
-
#include "pcap.h"
-
-
/* 4 bytes IP address */
-
typedef struct ip_address{
-
u_char byte1;
-
u_char byte2;
-
u_char byte3;
-
u_char byte4;
-
}ip_address;
-
-
/* IPv4 header */
-
typedef struct ip_header{
-
u_char ver_ihl; // Version (4 bits) + Internet header length (4 bits)
-
u_char tos; // Type of service
-
u_short tlen; // Total length
-
u_short identification; // Identification
-
u_short flags_fo; // Flags (3 bits) + Fragment offset (13 bits)
-
u_char ttl; // Time to live
-
u_char proto; // Protocol
-
u_short crc; // Header checksum
-
ip_address saddr; // Source address
-
ip_address daddr; // Destination address
-
u_int op_pad; // Option + Padding
-
}ip_header;
-
-
/* UDP header*/
-
typedef struct udp_header{
-
u_short sport; // Source port
-
u_short dport; // Destination port
-
u_short len; // Datagram length
-
u_short crc; // Checksum
-
}udp_header;
-
-
/* prototype of the packet handler */
-
void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data);
-
-
-
int main()
-
{
-
pcap_if_t *alldevs;
- -
int inum;
-
int i=0;
-
pcap_t *adhandle;
-
char errbuf[PCAP_ERRBUF_SIZE];
-
u_int netmask;
-
char packet_filter[] = "ip and udp";
-
struct bpf_program fcode;
-
-
/* Retrieve the device list */
-
if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL, &alldevs, errbuf) == -1)
-
{
-
fprintf(stderr,"Error in pcap_findalldevs: %s\n", errbuf);
-
exit(1);
-
}
-
-
/* Print the list */
-
for(d=alldevs; d; d=d->next)
-
{
-
printf("%d. %s", ++i, d->name);
-
if (d->description)
-
printf(" (%s)\n", d->description);
-
else
-
printf(" (No description available)\n");
-
}
-
-
if(i==0)
-
{
-
printf("\nNo interfaces found! Make sure WinPcap is installed.\n");
-
return -1;
-
}
-
-
printf("Enter the interface number (1-%d):",i);
-
scanf_s("%d", &inum);
-
-
if(inum < 1 || inum > i)
-
{
-
printf("\nInterface number out of range.\n");
-
/* Free the device list */
-
pcap_freealldevs(alldevs);
-
return -1;
-
}
-
-
/* Jump to the selected adapter */
-
for(d=alldevs, i=0; i< inum-1 ;d=d->next, i++);
-
-
/* Open the adapter */
-
if ( (adhandle= pcap_open(d->name, // name of the device
-
65536, // portion of the packet to capture.
-
// 65536 grants that the whole packet will be captured on all the MACs.
-
PCAP_OPENFLAG_PROMISCUOUS, // promiscuous mode
-
1000, // read timeout
-
NULL, // remote authentication
-
errbuf // error buffer
-
) ) == NULL)
-
{
-
fprintf(stderr,"\nUnable to open the adapter. %s is not supported by WinPcap\n");
-
/* Free the device list */
-
pcap_freealldevs(alldevs);
-
return -1;
-
}
-
-
/* Check the link layer. We support only Ethernet for simplicity. */
-
if(pcap_datalink(adhandle) != DLT_EN10MB)
-
{
-
fprintf(stderr,"\nThis program works only on Ethernet networks.\n");
-
/* Free the device list */
-
pcap_freealldevs(alldevs);
-
return -1;
-
}
-
-
if(d->addresses != NULL)
-
/* Retrieve the mask of the first address of the interface */
-
netmask=((struct sockaddr_in *)(d->addresses->netmask))->sin_addr.S_un.S_addr;
-
else
-
/* If the interface is without addresses we suppose to be in a C class network */
-
netmask=0xffffff;
-
-
-
//compile the filter
-
if (pcap_compile(adhandle, &fcode, packet_filter, 1, netmask) <0 )
-
{
-
fprintf(stderr,"\nUnable to compile the packet filter. Check the syntax.\n");
-
/* Free the device list */
-
pcap_freealldevs(alldevs);
-
return -1;
-
}
-
-
//set the filter
-
if (pcap_setfilter(adhandle, &fcode)<0)
-
{
-
fprintf(stderr,"\nError setting the filter.\n");
-
/* Free the device list */
-
pcap_freealldevs(alldevs);
-
return -1;
-
}
-
-
printf("\nlistening on %s...\n", d->description);
-
-
/* At this point, we don't need any more the device list. Free it */
-
pcap_freealldevs(alldevs);
-
-
/* start the capture */
-
pcap_loop(adhandle, 0, packet_handler, NULL);
-
-
return 0;
-
}
-
-
/* Callback function invoked by libpcap for every incoming packet */
-
void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data)
-
{
-
struct tm ltime;
-
char timestr[16];
-
ip_header *ih;
-
udp_header *uh;
-
u_int ip_len;
-
u_short sport,dport;
-
time_t local_tv_sec;
-
-
/*
-
* Unused variable
-
*/
-
(VOID)(param);
-
-
/* convert the timestamp to readable format */
-
local_tv_sec = header->ts.tv_sec;
-
localtime_s(&ltime, &local_tv_sec);
-
strftime( timestr, sizeof timestr, "%H:%M:%S", &ltime);
-
-
/* print timestamp and length of the packet */
-
printf("%s.%.6d len:%d ", timestr, header->ts.tv_usec, header->len);
-
-
/* retireve the position of the ip header */
-
ih = (ip_header *) (pkt_data +
-
14); //length of ethernet header
-
-
/* retireve the position of the udp header */
-
ip_len = (ih->ver_ihl & 0xf) * 4;
-
uh = (udp_header *) ((u_char*)ih + ip_len);
-
-
/* convert from network byte order to host byte order */
-
sport = ntohs( uh->sport );
-
dport = ntohs( uh->dport );
-
-
/* print ip addresses and udp ports */
-
printf("%d.%d.%d.%d.%d -> %d.%d.%d.%d.%d\n",
-
ih->saddr.byte1,
-
ih->saddr.byte2,
-
ih->saddr.byte3,
-
ih->saddr.byte4,
-
sport,
-
ih->daddr.byte1,
-
ih->daddr.byte2,
-
ih->daddr.byte3,
-
ih->daddr.byte4,
-
dport);
-
}
-

First of all, we set the filter to "ip and udp". In this way we are sure that packet_handler() will receive only UDP packets over IPv4: this simplifies the parsing and increases the efficiency of the program.

-

We have also created a couple of structs that describe the IP and UDP headers. These structs are used by packet_handler() to properly locate the various header fields.

-

packet_handler(), although limited to a single protocol dissector (UDP over IPv4), shows how complex "sniffers" like tcpdump/WinDump decode the network traffic. Since we aren't interested in the MAC header, we skip it. For simplicity and before starting the capture, we check the MAC layer with pcap_datalink() to make sure that we are dealing with an Ethernet network. This way we can be sure that the MAC header is exactly 14 bytes.

-

The IP header is located just after the MAC header. We will extract the IP source and destination addresses from the IP header.

-

Reaching the UDP header is a bit more complicated, because the IP header doesn't have a fixed length. Therefore, we use the IP header's length field to know its size. Once we know the location of the UDP header, we extract the source and destination ports.

-

The extracted values are printed on the screen, and the result is something like:

-

    -
  1. \Device\Packet_{A7FD048A-5D4B-478E-B3C1-34401AC3B72F} (Xircom t 10/100 Adapter)
    -Enter the interface number (1-2):1
    - listening on Xircom CardBus Ethernet 10/100 Adapter...
    -16:13:15.312784 len:87 130.192.31.67.2682 -> 130.192.3.21.53
    -16:13:15.314796 len:137 130.192.3.21.53 -> 130.192.31.67.2682
    -16:13:15.322101 len:78 130.192.31.67.2683 -> 130.192.3.21.53
    -
  2. -
-

-

Each of the final 3 lines represents a different packet.

-

<<< Previous Next >>>

-
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/group__wpcap__tut7.html b/libs/WinPcap-413-173-b4/docs/html/group__wpcap__tut7.html deleted file mode 100644 index 1d53b869..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/group__wpcap__tut7.html +++ /dev/null @@ -1,458 +0,0 @@ - - - - - - -WinPcap: Handling offline dump files - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - -
- -
-

In this lession we are going to learn how to handle packet capture to a file (dump to file). WinPcap offers a wide range of functions to save the network traffic to a file and to read the content of dumps – this lesson will teach how to use all of these functions. We'll see also how to use the kernel dump feature of WinPcap to obtain high-performance dumps (NOTE: At the moment, due to some problems with the new kernel buffer, this feature has been disabled).

-

The format for dump files is the libpcap one. This format contains the data of the captured packets in binary form and is a standard used by many network tools including WinDump, Ethereal and Snort.

-

Saving packets to a dump file

-

First of all, let's see how to write packets in libpcap format.

-

The following example captures the packets from the selected interface and saves them on a file whose name is provided by the user.

-
#include "pcap.h"
-
-
/* prototype of the packet handler */
-
void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data);
-
-
int main(int argc, char **argv)
-
{
-
pcap_if_t *alldevs;
- -
int inum;
-
int i=0;
-
pcap_t *adhandle;
-
char errbuf[PCAP_ERRBUF_SIZE];
-
pcap_dumper_t *dumpfile;
-
-
-
-
/* Check command line */
-
if(argc != 2)
-
{
-
printf("usage: %s filename", argv[0]);
-
return -1;
-
}
-
-
/* Retrieve the device list on the local machine */
-
if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL, &alldevs, errbuf) == -1)
-
{
-
fprintf(stderr,"Error in pcap_findalldevs: %s\n", errbuf);
-
exit(1);
-
}
-
-
/* Print the list */
-
for(d=alldevs; d; d=d->next)
-
{
-
printf("%d. %s", ++i, d->name);
-
if (d->description)
-
printf(" (%s)\n", d->description);
-
else
-
printf(" (No description available)\n");
-
}
-
-
if(i==0)
-
{
-
printf("\nNo interfaces found! Make sure WinPcap is installed.\n");
-
return -1;
-
}
-
-
printf("Enter the interface number (1-%d):",i);
-
scanf_s("%d", &inum);
-
-
if(inum < 1 || inum > i)
-
{
-
printf("\nInterface number out of range.\n");
-
/* Free the device list */
-
pcap_freealldevs(alldevs);
-
return -1;
-
}
-
-
/* Jump to the selected adapter */
-
for(d=alldevs, i=0; i< inum-1 ;d=d->next, i++);
-
-
-
/* Open the device */
-
if ( (adhandle= pcap_open(d->name, // name of the device
-
65536, // portion of the packet to capture
-
// 65536 guarantees that the whole packet will be captured on all the link layers
-
PCAP_OPENFLAG_PROMISCUOUS, // promiscuous mode
-
1000, // read timeout
-
NULL, // authentication on the remote machine
-
errbuf // error buffer
-
) ) == NULL)
-
{
-
fprintf(stderr,"\nUnable to open the adapter. %s is not supported by WinPcap\n", d->name);
-
/* Free the device list */
-
pcap_freealldevs(alldevs);
-
return -1;
-
}
-
-
/* Open the dump file */
-
dumpfile = pcap_dump_open(adhandle, argv[1]);
-
-
if(dumpfile==NULL)
-
{
-
fprintf(stderr,"\nError opening output file\n");
-
return -1;
-
}
-
-
printf("\nlistening on %s... Press Ctrl+C to stop...\n", d->description);
-
-
/* At this point, we no longer need the device list. Free it */
-
pcap_freealldevs(alldevs);
-
-
/* start the capture */
-
pcap_loop(adhandle, 0, packet_handler, (unsigned char *)dumpfile);
-
-
return 0;
-
}
-
-
/* Callback function invoked by libpcap for every incoming packet */
-
void packet_handler(u_char *dumpfile, const struct pcap_pkthdr *header, const u_char *pkt_data)
-
{
-
/* save the packet on the dump file */
-
pcap_dump(dumpfile, header, pkt_data);
-
}
-

As you can see, the structure of the program is very similar to the ones we have seen in the previous lessons. The differences are:

    -
  • a call to pcap_dump_open() is issued once the interface is opened. This call opens a dump file and associates it with the interface.
  • -
  • the packets are written to this file with a pcap_dump() from the packet_handler() callback. The parameters of pcap_dump() are in 1-1 correspondence with the parameters of pcap_handler().
  • -
-

Reading packets from a dump file

-

Now that we have a dump file available, we can try to read its content. The following code opens a WinPcap/libpcap dump file and displays every packet contained in the file. The file is opened with pcap_open_offline(), then the usual pcap_loop() is used to sequence through the packets. As you can see, reading packets from an offline capture is nearly identical to receiving them from a physical interface.

-

This example introduces another function: pcap_createsrcsrc(). This function is required to create a source string that begins with a marker used to tell WinPcap the type of the source, e.g. "rpcap://" if we are going to open an adapter, or "file://" if we are going to open a file. This step is not required when pcap_findalldevs_ex() is used (the returned values already contain these strings). However, it is required in this example because the name of the file is read from the user input.

-
#include <stdio.h>
-
#include <pcap.h>
-
-
#define LINE_LEN 16
-
-
void dispatcher_handler(u_char *, const struct pcap_pkthdr *, const u_char *);
-
-
int main(int argc, char **argv)
-
{
-
pcap_t *fp;
-
char errbuf[PCAP_ERRBUF_SIZE];
-
char source[PCAP_BUF_SIZE];
-
-
if(argc != 2){
-
-
printf("usage: %s filename", argv[0]);
-
return -1;
-
-
}
-
-
/* Create the source string according to the new WinPcap syntax */
-
if ( pcap_createsrcstr( source, // variable that will keep the source string
-
PCAP_SRC_FILE, // we want to open a file
-
NULL, // remote host
-
NULL, // port on the remote host
-
argv[1], // name of the file we want to open
-
errbuf // error buffer
-
) != 0)
-
{
-
fprintf(stderr,"\nError creating a source string\n");
-
return -1;
-
}
-
-
/* Open the capture file */
-
if ( (fp= pcap_open(source, // name of the device
-
65536, // portion of the packet to capture
-
// 65536 guarantees that the whole packet will be captured on all the link layers
-
PCAP_OPENFLAG_PROMISCUOUS, // promiscuous mode
-
1000, // read timeout
-
NULL, // authentication on the remote machine
-
errbuf // error buffer
-
) ) == NULL)
-
{
-
fprintf(stderr,"\nUnable to open the file %s.\n", source);
-
return -1;
-
}
-
-
// read and dispatch packets until EOF is reached
-
pcap_loop(fp, 0, dispatcher_handler, NULL);
-
-
return 0;
-
}
-
-
-
-
void dispatcher_handler(u_char *temp1,
-
const struct pcap_pkthdr *header, const u_char *pkt_data)
-
{
-
u_int i=0;
-
-
/*
-
* Unused variable
-
*/
-
(VOID)temp1;
-
-
/* print pkt timestamp and pkt len */
-
printf("%ld:%ld (%ld)\n", header->ts.tv_sec, header->ts.tv_usec, header->len);
-
-
/* Print the packet */
-
for (i=1; (i < header->caplen + 1 ) ; i++)
-
{
-
printf("%.2x ", pkt_data[i-1]);
-
if ( (i % LINE_LEN) == 0) printf("\n");
-
}
-
-
printf("\n\n");
-
-
}
-

The following example has the same purpose of the last one, but pcap_next_ex() is used instead of the pcap_loop() callback method.

-
#include <stdio.h>
-
#include <pcap.h>
-
-
#define LINE_LEN 16
-
-
int main(int argc, char **argv)
-
{
-
pcap_t *fp;
-
char errbuf[PCAP_ERRBUF_SIZE];
-
char source[PCAP_BUF_SIZE];
-
struct pcap_pkthdr *header;
-
const u_char *pkt_data;
-
u_int i=0;
-
int res;
-
-
if(argc != 2)
-
{
-
printf("usage: %s filename", argv[0]);
-
return -1;
-
}
-
-
/* Create the source string according to the new WinPcap syntax */
-
if ( pcap_createsrcstr( source, // variable that will keep the source string
-
PCAP_SRC_FILE, // we want to open a file
-
NULL, // remote host
-
NULL, // port on the remote host
-
argv[1], // name of the file we want to open
-
errbuf // error buffer
-
) != 0)
-
{
-
fprintf(stderr,"\nError creating a source string\n");
-
return -1;
-
}
-
-
/* Open the capture file */
-
if ( (fp= pcap_open(source, // name of the device
-
65536, // portion of the packet to capture
-
// 65536 guarantees that the whole packet will be captured on all the link layers
-
PCAP_OPENFLAG_PROMISCUOUS, // promiscuous mode
-
1000, // read timeout
-
NULL, // authentication on the remote machine
-
errbuf // error buffer
-
) ) == NULL)
-
{
-
fprintf(stderr,"\nUnable to open the file %s.\n", source);
-
return -1;
-
}
-
-
/* Retrieve the packets from the file */
-
while((res = pcap_next_ex( fp, &header, &pkt_data)) >= 0)
-
{
-
/* print pkt timestamp and pkt len */
-
printf("%ld:%ld (%ld)\n", header->ts.tv_sec, header->ts.tv_usec, header->len);
-
-
/* Print the packet */
-
for (i=1; (i < header->caplen + 1 ) ; i++)
-
{
-
printf("%.2x ", pkt_data[i-1]);
-
if ( (i % LINE_LEN) == 0) printf("\n");
-
}
-
-
printf("\n\n");
-
}
-
-
-
if (res == -1)
-
{
-
printf("Error reading the packets: %s\n", pcap_geterr(fp));
-
}
-
-
return 0;
-
}
-
-

Writing packets to a dump file with pcap_live_dump

-

NOTE: At the moment, due to some problems with the new kernel buffer, this feature has been disabled.

-

Recent versions of WinPcap provide a further way to save network traffic to disk, the pcap_live_dump() function. pcap_live_dump() takes three parameters: a file name, the maximum size (in bytes) that this file is allowed to reach and the maximum amount of packets that the file is allowed to contain. Zero means no limit for both these values. Notice that the program can set a filter (with pcap_setfilter(), see the tutorial Filtering the traffic) before calling pcap_live_dump() to define the subset of the traffic that will be saved.

-

pcap_live_dump() is non-blocking, therefore it starts the dump and returns immediately: The dump process goes on asynchronously until the maximum file size or the maximum amount of packets has been reached.

-

The application can wait or check the end of the dump with pcap_live_dump_ended(). Beware that if the sync parameter is nonzero, this function will block your application forever if the limits are both 0.

-
/*
-
* Copyright (c) 1999 - 2005 NetGroup, Politecnico di Torino (Italy)
-
* Copyright (c) 2005 - 2006 CACE Technologies, Davis (California)
-
* All rights reserved.
-
*
-
* Redistribution and use in source and binary forms, with or without
-
* modification, are permitted provided that the following conditions
-
* are met:
-
*
-
* 1. Redistributions of source code must retain the above copyright
-
* notice, this list of conditions and the following disclaimer.
-
* 2. Redistributions in binary form must reproduce the above copyright
-
* notice, this list of conditions and the following disclaimer in the
-
* documentation and/or other materials provided with the distribution.
-
* 3. Neither the name of the Politecnico di Torino, CACE Technologies
-
* nor the names of its contributors may be used to endorse or promote
-
* products derived from this software without specific prior written
-
* permission.
-
*
-
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
*
-
*/
-
-
#include <stdlib.h>
-
#include <stdio.h>
-
-
#include <pcap.h>
-
-
#error At the moment the kernel dump feature is not supported in the driver
-
-
main(int argc, char **argv) {
-
-
pcap_if_t *alldevs, *d;
-
pcap_t *fp;
-
u_int inum, i=0;
-
char errbuf[PCAP_ERRBUF_SIZE];
-
-
printf("kdump: saves the network traffic to file using WinPcap kernel-level dump faeature.\n");
-
printf("\t Usage: %s [adapter] | dump_file_name max_size max_packs\n", argv[0]);
-
printf("\t Where: max_size is the maximum size that the dump file will reach (0 means no limit)\n");
-
printf("\t Where: max_packs is the maximum number of packets that will be saved (0 means no limit)\n\n");
-
-
-
if(argc < 5){
-
-
/* The user didn't provide a packet source: Retrieve the device list */
-
if (pcap_findalldevs(&alldevs, errbuf) == -1)
-
{
-
fprintf(stderr,"Error in pcap_findalldevs: %s\n", errbuf);
-
exit(1);
-
}
-
-
/* Print the list */
-
for(d=alldevs; d; d=d->next)
-
{
-
printf("%d. %s", ++i, d->name);
-
if (d->description)
-
printf(" (%s)\n", d->description);
-
else
-
printf(" (No description available)\n");
-
}
-
-
if(i==0)
-
{
-
printf("\nNo interfaces found! Make sure WinPcap is installed.\n");
-
return -1;
-
}
-
-
printf("Enter the interface number (1-%d):",i);
-
scanf("%d", &inum);
-
-
if(inum < 1 || inum > i)
-
{
-
printf("\nInterface number out of range.\n");
-
/* Free the device list */
-
return -1;
-
}
-
-
/* Jump to the selected adapter */
-
for(d=alldevs, i=0; i< inum-1 ;d=d->next, i++);
-
-
/* Open the device */
-
if ( (fp = pcap_open_live(d->name, 100, 1, 20, errbuf) ) == NULL)
-
{
-
fprintf(stderr,"\nError opening adapter\n");
-
return -1;
-
}
-
-
/* Free the device list */
-
pcap_freealldevs(alldevs);
-
-
/* Start the dump */
-
if(pcap_live_dump(fp, argv[1], atoi(argv[2]), atoi(argv[3]))==-1){
-
printf("Unable to start the dump, %s\n", pcap_geterr(fp));
-
return -1;
-
}
-
}
-
else{
-
-
/* Open the device */
-
if ( (fp= pcap_open_live(argv[1], 100, 1, 20, errbuf) ) == NULL)
-
{
-
fprintf(stderr,"\nError opening adapter\n");
-
return -1;
-
}
-
-
/* Start the dump */
-
if(pcap_live_dump(fp, argv[0], atoi(argv[1]), atoi(argv[2]))==-1){
-
printf("Unable to start the dump, %s\n", pcap_geterr(fp));
-
return -1;
-
}
-
}
-
-
/* Wait until the dump finishes, i.e. when max_size or max_packs is reached*/
- -
-
/* Close the adapter, so that the file is correctly flushed */
- -
-
return 0;
-
}
-

The difference between pcap_live_dump() and pcap_dump(), apart from the possibility to set limits, is performance. pcap_live_dump() exploits the ability of the WinPcap NPF driver (see NPF driver internals manual) to write dumps from kernel level, minimizing the number of context switches and memory copies.

-

Obviously, since this feature is currently not available on other operating systems, pcap_live_dump() is WinPcap specific and is present only under Win32.

-

<<< Previous Next >>>

-
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/group__wpcap__tut8.html b/libs/WinPcap-413-173-b4/docs/html/group__wpcap__tut8.html deleted file mode 100644 index d3eac918..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/group__wpcap__tut8.html +++ /dev/null @@ -1,313 +0,0 @@ - - - - - - -WinPcap: Sending Packets - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - -
- -
-

Although the name WinPcap indicates clearly that the purpose of the library is packet capture, other useful features for raw networking are provided. Among them, the user can find a complete set of functions to send packets.

-

Note that the original libpcap library at the moment doesn't provide any way to send packets, therefore all the functions shown here are WinPcap extensions and will not work under Unix.

-

Sending a single packet with pcap_sendpacket()

-

The simplest way to send a packet is shown in the following code snippet. After opening an adapter, pcap_sendpacket() is called to send a hand-crafted packet. pcap_sendpacket() takes as arguments a buffer containing the data to send, the length of the buffer and the adapter that will send it. Notice that the buffer is sent to the net as is, without any manipulation. This means that the application has to create the correct protocol headers in order to send something meaningful.

-
#include <stdlib.h>
-
#include <stdio.h>
-
-
#include <pcap.h>
-
-
-
void main(int argc, char **argv)
-
{
-
pcap_t *fp;
-
char errbuf[PCAP_ERRBUF_SIZE];
-
u_char packet[100];
-
int i;
-
-
/* Check the validity of the command line */
-
if (argc != 2)
-
{
-
printf("usage: %s interface (e.g. 'rpcap://eth0')", argv[0]);
-
return;
-
}
-
-
/* Open the output device */
-
if ( (fp= pcap_open(argv[1], // name of the device
-
100, // portion of the packet to capture (only the first 100 bytes)
-
PCAP_OPENFLAG_PROMISCUOUS, // promiscuous mode
-
1000, // read timeout
-
NULL, // authentication on the remote machine
-
errbuf // error buffer
-
) ) == NULL)
-
{
-
fprintf(stderr,"\nUnable to open the adapter. %s is not supported by WinPcap\n", argv[1]);
-
return;
-
}
-
-
/* Supposing to be on ethernet, set mac destination to 1:1:1:1:1:1 */
-
packet[0]=1;
-
packet[1]=1;
-
packet[2]=1;
-
packet[3]=1;
-
packet[4]=1;
-
packet[5]=1;
-
-
/* set mac source to 2:2:2:2:2:2 */
-
packet[6]=2;
-
packet[7]=2;
-
packet[8]=2;
-
packet[9]=2;
-
packet[10]=2;
-
packet[11]=2;
-
-
/* Fill the rest of the packet */
-
for(i=12;i<100;i++)
-
{
-
packet[i]=(u_char)i;
-
}
-
-
/* Send down the packet */
-
if (pcap_sendpacket(fp, packet, 100 /* size */) != 0)
-
{
-
fprintf(stderr,"\nError sending the packet: %s\n", pcap_geterr(fp));
-
return;
-
}
-
-
return;
-
}
-

Send queues

-

While pcap_sendpacket() offers a simple and immediate way to send a single packet, send queues provides an advanced, powerful and optimized mechanism to send a collection of packets. A send queue is a container for a variable number of packets that will be sent to the network. It has a size, that represents the maximum amount of bytes it can store.

-

A send queue is created calling the pcap_sendqueue_alloc() function, specifying the size of the new send queue.

-

Once the send queue is created, pcap_sendqueue_queue() can be used to add a packet to the send queue. This function takes a pcap_pkthdr with the timestamp and the length and a buffer with the data of the packet. These parameters are the same as those received by pcap_next_ex() and pcap_handler(), therefore queuing a packet that was just captured or read from a file is a matter of passing these parameters to pcap_sendqueue_queue().

-

To transmit a send queue, WinPcap provides the pcap_sendqueue_transmit() function. Note the third parameter: if nonzero, the send will be synchronized, i.e. the relative timestamps of the packets will be respected. This operation requires a remarkable amount of CPU, because the synchronization takes place in the kernel driver using "busy wait" loops. Although this operation is quite CPU intensive, it often results in very high precision packet transmissions (often around few microseconds or less).

-

Note that transmitting a send queue with pcap_sendqueue_transmit() is much more efficient than performing a series of pcap_sendpacket(), because the send queue is buffered at kernel level drastically decreasing the number of context switches.

-

When a queue is no longer needed, it can be deleted with pcap_sendqueue_destroy() that frees all the buffers associated with the send queue.

-

The next program shows how to use send queues. It opens a capture file with pcap_open_offline(), then it moves the packets from the file to a properly allocated send queue. At his point it transmits the queue, synchronizing it if requested by the user.

-

Note that the link-layer of the dumpfile is compared with the one of the interface that will send the packets using pcap_datalink(), and a warning is printed if they are different – it is important that the capture-file link-layer be the same as the adapter's link layer for otherwise the tranmission is pointless.

-
/*
-
* Copyright (c) 1999 - 2005 NetGroup, Politecnico di Torino (Italy)
-
* Copyright (c) 2005 - 2006 CACE Technologies, Davis (California)
-
* All rights reserved.
-
*
-
* Redistribution and use in source and binary forms, with or without
-
* modification, are permitted provided that the following conditions
-
* are met:
-
*
-
* 1. Redistributions of source code must retain the above copyright
-
* notice, this list of conditions and the following disclaimer.
-
* 2. Redistributions in binary form must reproduce the above copyright
-
* notice, this list of conditions and the following disclaimer in the
-
* documentation and/or other materials provided with the distribution.
-
* 3. Neither the name of the Politecnico di Torino, CACE Technologies
-
* nor the names of its contributors may be used to endorse or promote
-
* products derived from this software without specific prior written
-
* permission.
-
*
-
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
*
-
*/
-
-
#include <stdlib.h>
-
#include <stdio.h>
-
-
#include <pcap.h>
-
-
void usage();
-
-
void main(int argc, char **argv)
-
{
-
pcap_t *indesc,*outdesc;
-
char errbuf[PCAP_ERRBUF_SIZE];
-
char source[PCAP_BUF_SIZE];
-
FILE *capfile;
-
int caplen, sync;
-
u_int res;
-
pcap_send_queue *squeue;
-
struct pcap_pkthdr *pktheader;
-
u_char *pktdata;
-
float cpu_time;
-
u_int npacks = 0;
-
errno_t fopen_error;
-
-
/* Check the validity of the command line */
-
if (argc <= 2 || argc >= 5)
-
{
-
usage();
-
return;
-
}
-
-
/* Retrieve the length of the capture file */
-
fopen_error = fopen_s(&capfile, argv[1],"rb");
-
if(fopen_error != 0){
-
printf("Error opening the file, errno %d.\n", fopen_error);
-
return;
-
}
-
-
fseek(capfile , 0, SEEK_END);
-
caplen= ftell(capfile)- sizeof(struct pcap_file_header);
-
fclose(capfile);
-
-
/* Chek if the timestamps must be respected */
-
if(argc == 4 && argv[3][0] == 's')
-
sync = TRUE;
-
else
-
sync = FALSE;
-
-
/* Open the capture */
-
/* Create the source string according to the new WinPcap syntax */
-
if ( pcap_createsrcstr( source, // variable that will keep the source string
-
PCAP_SRC_FILE, // we want to open a file
-
NULL, // remote host
-
NULL, // port on the remote host
-
argv[1], // name of the file we want to open
-
errbuf // error buffer
-
) != 0)
-
{
-
fprintf(stderr,"\nError creating a source string\n");
-
return;
-
}
-
-
/* Open the capture file */
-
if ( (indesc= pcap_open(source, 65536, PCAP_OPENFLAG_PROMISCUOUS, 1000, NULL, errbuf) ) == NULL)
-
{
-
fprintf(stderr,"\nUnable to open the file %s.\n", source);
-
return;
-
}
-
-
/* Open the output adapter */
-
if ( (outdesc= pcap_open(argv[2], 100, PCAP_OPENFLAG_PROMISCUOUS, 1000, NULL, errbuf) ) == NULL)
-
{
-
fprintf(stderr,"\nUnable to open adapter %s.\n", source);
-
return;
-
}
-
-
/* Check the MAC type */
-
if (pcap_datalink(indesc) != pcap_datalink(outdesc))
-
{
-
printf("Warning: the datalink of the capture differs from the one of the selected interface.\n");
-
printf("Press a key to continue, or CTRL+C to stop.\n");
-
getchar();
-
}
-
-
/* Allocate a send queue */
-
squeue = pcap_sendqueue_alloc(caplen);
-
-
/* Fill the queue with the packets from the file */
-
while ((res = pcap_next_ex( indesc, &pktheader, &pktdata)) == 1)
-
{
-
if (pcap_sendqueue_queue(squeue, pktheader, pktdata) == -1)
-
{
-
printf("Warning: packet buffer too small, not all the packets will be sent.\n");
-
break;
-
}
-
-
npacks++;
-
}
-
-
if (res == -1)
-
{
-
printf("Corrupted input file.\n");
- -
return;
-
}
-
-
/* Transmit the queue */
-
-
cpu_time = (float)clock ();
-
-
if ((res = pcap_sendqueue_transmit(outdesc, squeue, sync)) < squeue->len)
-
{
-
printf("An error occurred sending the packets: %s. Only %d bytes were sent\n", pcap_geterr(outdesc), res);
-
}
-
-
cpu_time = (clock() - cpu_time)/CLK_TCK;
-
-
printf ("\n\nElapsed time: %5.3f\n", cpu_time);
-
printf ("\nTotal packets generated = %d", npacks);
-
printf ("\nAverage packets per second = %d", (int)((double)npacks/cpu_time));
-
printf ("\n");
-
-
/* free the send queue */
- -
-
/* Close the input file */
-
pcap_close(indesc);
-
-
/*
-
* lose the output adapter
-
* IMPORTANT: remember to close the adapter, otherwise there will be no guarantee that all the
-
* packets will be sent!
-
*/
-
pcap_close(outdesc);
-
-
-
return;
-
}
-
-
-
void usage()
-
{
-
-
printf("\nSendcap, sends a libpcap/tcpdump capture file to the net. Copyright (C) 2002 Loris Degioanni.\n");
-
printf("\nUsage:\n");
-
printf("\t sendcap file_name adapter [s]\n");
-
printf("\nParameters:\n");
-
printf("\nfile_name: the name of the dump file that will be sent to the network\n");
-
printf("\nadapter: the device to use. Use \"WinDump -D\" for a list of valid devices\n");
-
printf("\ns: if present, forces the packets to be sent synchronously, i.e. respecting the timestamps in the dump file. This option will work only under Windows NTx.\n\n");
-
-
exit(0);
-
}
-

<<< Previous Next >>>

-
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/group__wpcap__tut9.html b/libs/WinPcap-413-173-b4/docs/html/group__wpcap__tut9.html deleted file mode 100644 index 4ee85531..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/group__wpcap__tut9.html +++ /dev/null @@ -1,227 +0,0 @@ - - - - - - -WinPcap: Gathering Statistics on the network traffic - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - -
-
- -
-
-

This lesson shows another advanced feature of WinPcap: the ability to collect statistics about network traffic. The statistical engine makes use of the kernel-level packet filter to efficiently classify the incoming packet. You can take a look at the NPF driver internals manual if you want to know more details.

-

In order to use this feature, the programmer must open an adapter and put it in statistical mode. This can be done with pcap_setmode(). In particular, MODE_STAT must be used as the mode argument of this function.

-

With statistical mode, making an application that monitors the TCP traffic load is a matter of few lines of code. The following sample shows how to do it.

-
/*
-
* Copyright (c) 1999 - 2005 NetGroup, Politecnico di Torino (Italy)
-
* Copyright (c) 2005 - 2006 CACE Technologies, Davis (California)
-
* All rights reserved.
-
*
-
* Redistribution and use in source and binary forms, with or without
-
* modification, are permitted provided that the following conditions
-
* are met:
-
*
-
* 1. Redistributions of source code must retain the above copyright
-
* notice, this list of conditions and the following disclaimer.
-
* 2. Redistributions in binary form must reproduce the above copyright
-
* notice, this list of conditions and the following disclaimer in the
-
* documentation and/or other materials provided with the distribution.
-
* 3. Neither the name of the Politecnico di Torino, CACE Technologies
-
* nor the names of its contributors may be used to endorse or promote
-
* products derived from this software without specific prior written
-
* permission.
-
*
-
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
*
-
*/
-
-
#include <stdlib.h>
-
#include <stdio.h>
-
-
#include <pcap.h>
-
-
void usage();
-
-
void dispatcher_handler(u_char *, const struct pcap_pkthdr *, const u_char *);
-
-
-
void main(int argc, char **argv)
-
{
-
pcap_t *fp;
-
char errbuf[PCAP_ERRBUF_SIZE];
-
struct timeval st_ts;
-
u_int netmask;
-
struct bpf_program fcode;
-
-
/* Check the validity of the command line */
-
if (argc != 2)
-
{
-
usage();
-
return;
-
}
-
-
/* Open the output adapter */
-
if ( (fp= pcap_open(argv[1], 100, PCAP_OPENFLAG_PROMISCUOUS, 1000, NULL, errbuf) ) == NULL)
-
{
-
fprintf(stderr,"\nUnable to open adapter %s.\n", errbuf);
-
return;
-
}
-
-
/* Don't care about netmask, it won't be used for this filter */
-
netmask=0xffffff;
-
-
//compile the filter
-
if (pcap_compile(fp, &fcode, "tcp", 1, netmask) <0 )
-
{
-
fprintf(stderr,"\nUnable to compile the packet filter. Check the syntax.\n");
-
/* Free the device list */
-
return;
-
}
-
-
//set the filter
-
if (pcap_setfilter(fp, &fcode)<0)
-
{
-
fprintf(stderr,"\nError setting the filter.\n");
- -
/* Free the device list */
-
return;
-
}
-
-
/* Put the interface in statstics mode */
-
if (pcap_setmode(fp, MODE_STAT)<0)
-
{
-
fprintf(stderr,"\nError setting the mode.\n");
- -
/* Free the device list */
-
return;
-
}
-
-
-
printf("TCP traffic summary:\n");
-
-
/* Start the main loop */
-
pcap_loop(fp, 0, dispatcher_handler, (PUCHAR)&st_ts);
-
- -
return;
-
}
-
-
void dispatcher_handler(u_char *state, const struct pcap_pkthdr *header, const u_char *pkt_data)
-
{
-
struct timeval *old_ts = (struct timeval *)state;
-
u_int delay;
-
LARGE_INTEGER Bps,Pps;
-
struct tm ltime;
-
char timestr[16];
-
time_t local_tv_sec;
-
-
/* Calculate the delay in microseconds from the last sample. */
-
/* This value is obtained from the timestamp that the associated with the sample. */
-
delay=(header->ts.tv_sec - old_ts->tv_sec) * 1000000 - old_ts->tv_usec + header->ts.tv_usec;
-
/* Get the number of Bits per second */
-
Bps.QuadPart=(((*(LONGLONG*)(pkt_data + 8)) * 8 * 1000000) / (delay));
-
/* ^ ^
-
| |
-
| |
-
| |
-
converts bytes in bits -- |
-
|
-
delay is expressed in microseconds --
-
*/
-
-
/* Get the number of Packets per second */
-
Pps.QuadPart=(((*(LONGLONG*)(pkt_data)) * 1000000) / (delay));
-
-
/* Convert the timestamp to readable format */
-
local_tv_sec = header->ts.tv_sec;
-
localtime_s(&ltime, &local_tv_sec);
-
strftime( timestr, sizeof timestr, "%H:%M:%S", &ltime);
-
-
/* Print timestamp*/
-
printf("%s ", timestr);
-
-
/* Print the samples */
-
printf("BPS=%I64u ", Bps.QuadPart);
-
printf("PPS=%I64u\n", Pps.QuadPart);
-
-
//store current timestamp
-
old_ts->tv_sec=header->ts.tv_sec;
-
old_ts->tv_usec=header->ts.tv_usec;
-
}
-
-
-
void usage()
-
{
-
-
printf("\nShows the TCP traffic load, in bits per second and packets per second.\nCopyright (C) 2002 Loris Degioanni.\n");
-
printf("\nUsage:\n");
-
printf("\t tcptop adapter\n");
-
printf("\t You can use \"WinDump -D\" if you don't know the name of your adapters.\n");
-
-
exit(0);
-
}
-

Before enabling statistical mode, the user has the option to set a filter that defines the subset of network traffic that will be monitored. See the paragraph on the Filtering expression syntax for details. If no filter has been set, all of the traffic will be monitored.

-

Once

- -

the interface descriptor starts to work in statistical mode. Notice the fourth parameter (to_ms) of pcap_open(): it defines the interval among the statistical samples. The callback function receives the samples calculated by the driver every to_ms milliseconds. These samples are encapsulated in the second and third parameters of the callback function, as shown in the following figure:

-
-stats_wpcap.gif -
-

Two 64-bit counters are provided: the number of packets and the amount of bytes received during the last interval.

-

In the example, the adapter is opened with a timeout of 1000 ms. This means that dispatcher_handler() is called once per second. At this point a filter that keeps only tcp packets is compiled and set. Then pcap_setmode() and pcap_loop() are called. Note that a struct timeval pointer is passed to pcap_loop() as the user parameter. This structure will be used to store a timestamp in order to calculate the interval between two samples. dispatcher_handler()uses this interval to obtain the bits per second and the packets per second and then prints these values on the screen.

-

Note finally that this example is by far more efficient than a program that captures the packets in the traditional way and calculates statistics at user-level. Statistical mode requires the minumum amount of data copies and context switches and therefore the CPU is optimized. Moreover, a very small amount of memory is required.

-

<<< Previous

-
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/group__wpcapfunc.html b/libs/WinPcap-413-173-b4/docs/html/group__wpcapfunc.html deleted file mode 100644 index fe34200d..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/group__wpcapfunc.html +++ /dev/null @@ -1,2427 +0,0 @@ - - - - - - -WinPcap: Exported functions - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - -
-
-
-
Exported functions
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Unix-compatible Functions

These functions are part of the libpcap library, and therefore work both on Windows and on Linux.

Note
errbuf in pcap_open_live(), pcap_open_dead(), pcap_open_offline(), pcap_setnonblock(), pcap_getnonblock(), pcap_findalldevs(), pcap_lookupdev(), and pcap_lookupnet() is assumed to be able to hold at least PCAP_ERRBUF_SIZE chars.
-
typedef void(* pcap_handler )(u_char *user, const struct pcap_pkthdr *pkt_header, const u_char *pkt_data)
 Prototype of the callback function that receives the packets. More...
 
pcap_tpcap_open_live (const char *device, int snaplen, int promisc, int to_ms, char *ebuf)
 Open a live capture from the network. More...
 
pcap_tpcap_open_dead (int linktype, int snaplen)
 Create a pcap_t structure without starting a capture. More...
 
pcap_tpcap_open_offline (const char *fname, char *errbuf)
 Open a savefile in the tcpdump/libpcap format to read packets. More...
 
pcap_dumper_tpcap_dump_open (pcap_t *p, const char *fname)
 Open a file to write packets. More...
 
int pcap_setnonblock (pcap_t *p, int nonblock, char *errbuf)
 Switch between blocking and nonblocking mode. More...
 
int pcap_getnonblock (pcap_t *p, char *errbuf)
 Get the "non-blocking" state of an interface. More...
 
int pcap_findalldevs (pcap_if_t **alldevsp, char *errbuf)
 Construct a list of network devices that can be opened with pcap_open_live(). More...
 
void pcap_freealldevs (pcap_if_t *alldevsp)
 Free an interface list returned by pcap_findalldevs(). More...
 
char * pcap_lookupdev (char *errbuf)
 Return the first valid device in the system. More...
 
int pcap_lookupnet (const char *device, bpf_u_int32 *netp, bpf_u_int32 *maskp, char *errbuf)
 Return the subnet and netmask of an interface. More...
 
int pcap_dispatch (pcap_t *p, int cnt, pcap_handler callback, u_char *user)
 Collect a group of packets. More...
 
int pcap_loop (pcap_t *p, int cnt, pcap_handler callback, u_char *user)
 Collect a group of packets. More...
 
u_char * pcap_next (pcap_t *p, struct pcap_pkthdr *h)
 Return the next available packet. More...
 
int pcap_next_ex (pcap_t *p, struct pcap_pkthdr **pkt_header, const u_char **pkt_data)
 Read a packet from an interface or from an offline capture. More...
 
void pcap_breakloop (pcap_t *)
 set a flag that will force pcap_dispatch() or pcap_loop() to return rather than looping. More...
 
int pcap_sendpacket (pcap_t *p, u_char *buf, int size)
 Send a raw packet. More...
 
void pcap_dump (u_char *user, const struct pcap_pkthdr *h, const u_char *sp)
 Save a packet to disk. More...
 
long pcap_dump_ftell (pcap_dumper_t *)
 Return the file position for a "savefile". More...
 
int pcap_compile (pcap_t *p, struct bpf_program *fp, char *str, int optimize, bpf_u_int32 netmask)
 Compile a packet filter, converting an high level filtering expression (see Filtering expression syntax) in a program that can be interpreted by the kernel-level filtering engine. More...
 
int pcap_compile_nopcap (int snaplen_arg, int linktype_arg, struct bpf_program *program, char *buf, int optimize, bpf_u_int32 mask)
 Compile a packet filter without the need of opening an adapter. This function converts an high level filtering expression (see Filtering expression syntax) in a program that can be interpreted by the kernel-level filtering engine. More...
 
int pcap_setfilter (pcap_t *p, struct bpf_program *fp)
 Associate a filter to a capture. More...
 
void pcap_freecode (struct bpf_program *fp)
 Free a filter. More...
 
int pcap_datalink (pcap_t *p)
 Return the link layer of an adapter. More...
 
int pcap_list_datalinks (pcap_t *p, int **dlt_buf)
 list datalinks More...
 
int pcap_set_datalink (pcap_t *p, int dlt)
 Set the current data link type of the pcap descriptor to the type specified by dlt. -1 is returned on failure. More...
 
int pcap_datalink_name_to_val (const char *name)
 Translates a data link type name, which is a DLT_ name with the DLT_ removed, to the corresponding data link type value. The translation is case-insensitive. -1 is returned on failure. More...
 
const char * pcap_datalink_val_to_name (int dlt)
 Translates a data link type value to the corresponding data link type name. NULL is returned on failure. More...
 
const char * pcap_datalink_val_to_description (int dlt)
 Translates a data link type value to a short description of that data link type. NULL is returned on failure. More...
 
int pcap_snapshot (pcap_t *p)
 Return the dimension of the packet portion (in bytes) that is delivered to the application. More...
 
int pcap_is_swapped (pcap_t *p)
 returns true if the current savefile uses a different byte order than the current system. More...
 
int pcap_major_version (pcap_t *p)
 return the major version number of the pcap library used to write the savefile. More...
 
int pcap_minor_version (pcap_t *p)
 return the minor version number of the pcap library used to write the savefile. More...
 
FILE * pcap_file (pcap_t *p)
 Return the standard stream of an offline capture. More...
 
int pcap_stats (pcap_t *p, struct pcap_stat *ps)
 Return statistics on current capture. More...
 
void pcap_perror (pcap_t *p, char *prefix)
 print the text of the last pcap library error on stderr, prefixed by prefix. More...
 
char * pcap_geterr (pcap_t *p)
 return the error text pertaining to the last pcap library error. More...
 
char * pcap_strerror (int error)
 Provided in case strerror() isn't available. More...
 
const char * pcap_lib_version (void)
 Returns a pointer to a string giving information about the version of the libpcap library being used; note that it contains more information than just a version number. More...
 
void pcap_close (pcap_t *p)
 close the files associated with p and deallocates resources. More...
 
FILE * pcap_dump_file (pcap_dumper_t *p)
 return the standard I/O stream of the 'savefile' opened by pcap_dump_open(). More...
 
int pcap_dump_flush (pcap_dumper_t *p)
 Flushes the output buffer to the savefile,'' so that any packets written with pcap_dump() but not yet written to thesavefile'' will be written. -1 is returned on error, 0 on success. More...
 
void pcap_dump_close (pcap_dumper_t *p)
 Closes a savefile. More...
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Windows-specific Extensions

The functions in this section extend libpcap to offer advanced functionalities (like remote packet capture, packet buffer size variation or high-precision packet injection). Howerver, at the moment they can be used only in Windows.

-
PAirpcapHandle pcap_get_airpcap_handle (pcap_t *p)
 Returns the AirPcap handler associated with an adapter. This handler can be used to change the wireless-related settings of the CACE Technologies AirPcap wireless capture adapters. More...
 
int pcap_offline_filter (struct bpf_program *prog, const struct pcap_pkthdr *header, const u_char *pkt_data)
 Returns if a given filter applies to an offline packet. More...
 
int pcap_live_dump (pcap_t *p, char *filename, int maxsize, int maxpacks)
 Save a capture to file. More...
 
int pcap_live_dump_ended (pcap_t *p, int sync)
 Return the status of the kernel dump process, i.e. tells if one of the limits defined with pcap_live_dump() has been reached. More...
 
struct pcap_statpcap_stats_ex (pcap_t *p, int *pcap_stat_size)
 Return statistics on current capture. More...
 
int pcap_setbuff (pcap_t *p, int dim)
 Set the size of the kernel buffer associated with an adapter. More...
 
int pcap_setmode (pcap_t *p, int mode)
 Set the working mode of the interface p to mode. More...
 
int pcap_setmintocopy (pcap_t *p, int size)
 Set the minumum amount of data received by the kernel in a single call. More...
 
HANDLE pcap_getevent (pcap_t *p)
 Return the handle of the event associated with the interface p. More...
 
pcap_send_queuepcap_sendqueue_alloc (u_int memsize)
 Allocate a send queue. More...
 
void pcap_sendqueue_destroy (pcap_send_queue *queue)
 Destroy a send queue. More...
 
int pcap_sendqueue_queue (pcap_send_queue *queue, const struct pcap_pkthdr *pkt_header, const u_char *pkt_data)
 Add a packet to a send queue. More...
 
u_int pcap_sendqueue_transmit (pcap_t *p, pcap_send_queue *queue, int sync)
 Send a queue of raw packets to the network. More...
 
int pcap_findalldevs_ex (char *source, struct pcap_rmtauth *auth, pcap_if_t **alldevs, char *errbuf)
 Create a list of network devices that can be opened with pcap_open(). More...
 
int pcap_createsrcstr (char *source, int type, const char *host, const char *port, const char *name, char *errbuf)
 Accept a set of strings (host name, port, ...), and it returns the complete source string according to the new format (e.g. 'rpcap://1.2.3.4/eth0'). More...
 
int pcap_parsesrcstr (const char *source, int *type, char *host, char *port, char *name, char *errbuf)
 Parse the source string and returns the pieces in which the source can be split. More...
 
pcap_tpcap_open (const char *source, int snaplen, int flags, int read_timeout, struct pcap_rmtauth *auth, char *errbuf)
 Open a generic source in order to capture / send (WinPcap only) traffic. More...
 
struct pcap_samp * pcap_setsampling (pcap_t *p)
 Define a sampling method for packet capture. More...
 
SOCKET pcap_remoteact_accept (const char *address, const char *port, const char *hostlist, char *connectinghost, struct pcap_rmtauth *auth, char *errbuf)
 Block until a network connection is accepted (active mode only). More...
 
int pcap_remoteact_close (const char *host, char *errbuf)
 Drop an active connection (active mode only). More...
 
void pcap_remoteact_cleanup ()
 Clean the socket that is currently used in waiting active connections. More...
 
int pcap_remoteact_list (char *hostlist, char sep, int size, char *errbuf)
 Return the hostname of the host that have an active connection with us (active mode only). More...
 
-

Detailed Description

-

Functions exported by wpcap.dll

-

Typedef Documentation

- -
-
- - - - -
typedef void(* pcap_handler)(u_char *user, const struct pcap_pkthdr *pkt_header, const u_char *pkt_data)
-
- -

Prototype of the callback function that receives the packets.

-

When pcap_dispatch() or pcap_loop() are called by the user, the packets are passed to the application by means of this callback. user is a user-defined parameter that contains the state of the capture session, it corresponds to the user parameter of pcap_dispatch() and pcap_loop(). pkt_header is the header associated by the capture driver to the packet. It is NOT a protocol header. pkt_data points to the data of the packet, including the protocol headers.

- -

Definition at line 27 of file funcs/pcap.h.

- -
-
-

Function Documentation

- -
-
- - - - - - - - -
void pcap_breakloop (pcap_t)
-
- -

set a flag that will force pcap_dispatch() or pcap_loop() to return rather than looping.

-

They will return the number of packets that have been processed so far, or -2 if no packets have been processed so far. This routine is safe to use inside a signal handler on UNIX or a console control handler on Windows, as it merely sets a flag that is checked within the loop. The flag is checked in loops reading packets from the OS - a signal by itself will not necessarily terminate those loops - as well as in loops processing a set of packets returned by the OS. Note that if you are catching signals on UNIX systems that support restarting system calls after a signal, and calling pcap_breakloop() in the signal handler, you must specify, when catching those signals, that system calls should NOT be restarted by that signal. Otherwise, if the signal interrupted a call reading packets in a live capture, when your signal handler returns after calling pcap_breakloop(), the call will be restarted, and the loop will not terminate until more packets arrive and the call completes.

Note
pcap_next() will, on some platforms, loop reading packets from the OS; that loop will not necessarily be terminated by a signal, so pcap_breakloop() should be used to terminate packet processing even if pcap_next() is being used. pcap_breakloop() does not guarantee that no further packets will be processed by pcap_dispatch() or pcap_loop() after it is called; at most one more packet might be processed. If -2 is returned from pcap_dispatch() or pcap_loop(), the flag is cleared, so a subsequent call will resume reading packets. If a positive number is returned, the flag is not cleared, so a subsequent call will return -2 and clear the flag.
- -
-
- -
-
- - - - - - - - -
void pcap_close (pcap_tp)
-
- -

close the files associated with p and deallocates resources.

-
See also
pcap_open_live(), pcap_open_offline(), pcap_open_dead()
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
int pcap_compile (pcap_tp,
struct bpf_program * fp,
char * str,
int optimize,
bpf_u_int32 netmask 
)
-
- -

Compile a packet filter, converting an high level filtering expression (see Filtering expression syntax) in a program that can be interpreted by the kernel-level filtering engine.

-

pcap_compile() is used to compile the string str into a filter program. program is a pointer to a bpf_program struct and is filled in by pcap_compile(). optimize controls whether optimization on the resulting code is performed. netmask specifies the IPv4 netmask of the network on which packets are being captured; it is used only when checking for IPv4 broadcast addresses in the filter program. If the netmask of the network on which packets are being captured isn't known to the program, or if packets are being captured on the Linux "any" pseudo-interface that can capture on more than one network, a value of 0 can be supplied; tests for IPv4 broadcast addreses won't be done correctly, but all other tests in the filter program will be OK. A return of -1 indicates an error in which case pcap_geterr() may be used to display the error text.

-
See also
pcap_open_live(), pcap_setfilter(), pcap_freecode(), pcap_snapshot()
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
int pcap_compile_nopcap (int snaplen_arg,
int linktype_arg,
struct bpf_program * program,
char * buf,
int optimize,
bpf_u_int32 mask 
)
-
- -

Compile a packet filter without the need of opening an adapter. This function converts an high level filtering expression (see Filtering expression syntax) in a program that can be interpreted by the kernel-level filtering engine.

-

pcap_compile_nopcap() is similar to pcap_compile() except that instead of passing a pcap structure, one passes the snaplen and linktype explicitly. It is intended to be used for compiling filters for direct BPF usage, without necessarily having called pcap_open(). A return of -1 indicates an error; the error text is unavailable. (pcap_compile_nopcap() is a wrapper around pcap_open_dead(), pcap_compile(), and pcap_close(); the latter three routines can be used directly in order to get the error text for a compilation error.)

-

Look at the Filtering expression syntax section for details on the str parameter.

-
See also
pcap_open_live(), pcap_setfilter(), pcap_freecode(), pcap_snapshot()
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
int pcap_createsrcstr (char * source,
int type,
const char * host,
const char * port,
const char * name,
char * errbuf 
)
-
- -

Accept a set of strings (host name, port, ...), and it returns the complete source string according to the new format (e.g. 'rpcap://1.2.3.4/eth0').

-

This function is provided in order to help the user creating the source string according to the new format. An unique source string is used in order to make easy for old applications to use the remote facilities. Think about tcpdump, for example, which has only one way to specify the interface on which the capture has to be started. However, GUI-based programs can find more useful to specify hostname, port and interface name separately. In that case, they can use this function to create the source string before passing it to the pcap_open() function.

-
Parameters
- - - - - - - -
sourcea user-allocated buffer that will contain the complete source string wen the function returns.
- The source will start with an identifier according to the new Source Specification Syntax .
- This function assumes that the allocated buffer is at least PCAP_BUF_SIZE bytes.
typeits value tells the type of the source we want to create. It can assume the values defined in the Source identification Codes .
-
hostan user-allocated buffer that keeps the host (e.g. "foo.bar.com") we want to connect to. It can be NULL in case we want to open an interface on a local host.
portan user-allocated buffer that keeps the network port (e.g. "2002") we want to use for the RPCAP protocol. It can be NULL in case we want to open an interface on a local host.
namean user-allocated buffer that keeps the interface name we want to use (e.g. "eth0"). It can be NULL in case the return string (i.e. 'source') has to be used with the pcap_findalldevs_ex(), which does not require the interface name.
errbufa pointer to a user-allocated buffer (of size PCAP_ERRBUF_SIZE) that will contain the error message (in case there is one).
-
-
-
Returns
'0' if everything is fine, '-1' if some errors occurred. The string containing the complete source is returned in the 'source' variable.
-
Warning
If the source is longer than PCAP_BUF_SIZE, the excess characters are truncated.
- -
-
- -
-
- - - - - - - - -
int pcap_datalink (pcap_tp)
-
- -

Return the link layer of an adapter.

-

returns the link layer type; link layer types it can return include:

- DLT_NULL BSD loopback encapsulation; the link layer header is a 4-byte field, in host byte order, containing a PF_ value from socket.h for the network-layer protocol of the packet. 
-    Note that ``host byte order'' is the byte order of the machine on which the packets are captured, and the PF_ values are for the OS of the machine on which the packets are captured; if a live capture is being done, ``host byte order'' is the byte order of the machine capturing the packets, and the PF_ values are those of the OS of the machine capturing the packets, but if a ``savefile'' is being read, the byte order and PF_ values are not necessarily those of the machine reading the capture file. 
-- DLT_EN10MB Ethernet (10Mb, 100Mb, 1000Mb, and up) 
-- DLT_IEEE802: IEEE 802.5 Token Ring 
-- DLT_ARCNET: ARCNET 
-- DLT_SLIP: SLIP; the link layer header contains, in order:
-        -# a 1-byte flag, which is 0 for packets received by the machine and 1 for packets sent by the machine;
-        -# a 1-byte field, the upper 4 bits of which indicate the type of packet, as per RFC 1144:
-            - 0x40: an unmodified IP datagram (TYPE_IP); 
-            - 0x70: an uncompressed-TCP IP datagram (UNCOMPRESSED_TCP), with that byte being the first byte of the raw IP header on the wire, containing the connection number in the protocol field; 
-            - 0x80: a compressed-TCP IP datagram (COMPRESSED_TCP), with that byte being the first byte of the compressed TCP/IP datagram header; 
-        -# for UNCOMPRESSED_TCP, the rest of the modified IP header, and for COMPRESSED_TCP, the compressed TCP/IP datagram header; 
-        -# for a total of 16 bytes; the uncompressed IP datagram follows the header. 
-
-- DLT_PPP: PPP; if the first 2 bytes are 0xff and 0x03, it's PPP in HDLC-like framing, with the PPP header following those two bytes, otherwise it's PPP without framing, and the packet begins with the PPP header. 
-- DLT_FDDI: FDDI 
-- DLT_ATM_RFC1483: RFC 1483 LLC/SNAP-encapsulated ATM; the packet begins with an IEEE 802.2 LLC header. 
-- DLT_RAW: raw IP; the packet begins with an IP header. 
-- DLT_PPP_SERIAL: PPP in HDLC-like framing, as per RFC 1662, or Cisco PPP with HDLC framing, as per section 4.3.1 of RFC 1547; the first byte will be 0xFF for PPP in HDLC-like framing, and will be 0x0F or 0x8F for Cisco PPP with HDLC framing. 
-- DLT_PPP_ETHER: PPPoE; the packet begins with a PPPoE header, as per RFC 2516. 
-- DLT_C_HDLC: Cisco PPP with HDLC framing, as per section 4.3.1 of RFC 1547. 
-- DLT_IEEE802_11: IEEE 802.11 wireless LAN 
-- DLT_FRELAY: Frame Relay 
-- DLT_LOOP: OpenBSD loopback encapsulation; the link layer header is a 4-byte field, in network byte order, containing a PF_ value from OpenBSD's socket.h for the network-layer protocol of the packet. 
-    Note that, if a ``savefile'' is being read, those PF_ values are not necessarily those of the machine reading the capture file. 
-- DLT_LINUX_SLL: Linux "cooked" capture encapsulation; the link layer header contains, in order:
-    - a 2-byte "packet type", in network byte order, which is one of:
-        -# packet was sent to us by somebody else 
-        -# packet was broadcast by somebody else 
-        -# packet was multicast, but not broadcast, by somebody else 
-        -# packet was sent by somebody else to somebody else 
-        -# packet was sent by us 
-    - a 2-byte field, in network byte order, containing a Linux ARPHRD_ value for the link layer device type;
-    - a 2-byte field, in network byte order, containing the length of the link layer address of the sender of the packet (which could be 0);
-    - an 8-byte field containing that number of bytes of the link layer header (if there are more than 8 bytes, only the first 8 are present);
-    - 2-byte field containing an Ethernet protocol type, in network byte order, or containing 1 for Novell 802.3 frames without an 802.2 LLC header or 4 for frames beginning with an 802.2 LLC header. 
-- DLT_LTALK: Apple LocalTalk; the packet begins with an AppleTalk LLAP header. 
-- DLT_PFLOG: OpenBSD pflog; the link layer header contains, in order:
-    - a 4-byte PF_ value, in network byte order;
-    - a 16-character interface name;
-    - a 2-byte rule number, in network byte order;
-    - a 2-byte reason code, in network byte order, which is one of:
-        -# match 
-        -# bad offset 
-        -# fragment 
-        -# short 
-        -# normalize 
-        -# memory
-    -a 2-byte action code, in network byte order, which is one of:
-        -# passed 
-        -# dropped 
-        -# scrubbed 
-    - a 2-byte direction, in network byte order, which is one of:
-        -# incoming or outgoing 
-        -# incoming 
-        -# outgoing 
-- DLT_PRISM_HEADER: Prism monitor mode information followed by an 802.11 header. 
-- DLT_IP_OVER_FC: RFC 2625 IP-over-Fibre Channel, with the link-layer header being the Network_Header as described in that RFC. 
-- DLT_SUNATM: SunATM devices; the link layer header contains, in order:
-    - a 1-byte flag field, containing a direction flag in the uppermost bit, which is set for packets transmitted by the machine and clear for packets received by the machine, and a 4-byte traffic type in the low-order 4 bits, which is one of:
-        -# raw traffic 
-        -# LANE traffic 
-        -# LLC-encapsulated traffic 
-        -# MARS traffic 
-        -# IFMP traffic 
-        -# ILMI traffic 
-        -# Q.2931 traffic 
-    - a 1-byte VPI value;
-    - a 2-byte VCI field, in network byte order. 
-- DLT_IEEE802_11_RADIO: link-layer information followed by an 802.11 header - see http://www.radiotap.org/ for a description of the link-layer information. 
-- DLT_ARCNET_LINUX: ARCNET, with no exception frames, reassembled packets rather than raw frames, and an extra 16-bit offset field between the destination host and type bytes. 
-- DLT_LINUX_IRDA: Linux-IrDA packets, with a DLT_LINUX_SLL header followed by the IrLAP header. 
-
See also
pcap_list_datalinks(), pcap_set_datalink(), pcap_datalink_name_to_val()
- -
-
- -
-
- - - - - - - - -
int pcap_datalink_name_to_val (const char * name)
-
- -

Translates a data link type name, which is a DLT_ name with the DLT_ removed, to the corresponding data link type value. The translation is case-insensitive. -1 is returned on failure.

- -
-
- -
-
- - - - - - - - -
const char* pcap_datalink_val_to_description (int dlt)
-
- -

Translates a data link type value to a short description of that data link type. NULL is returned on failure.

- -
-
- -
-
- - - - - - - - -
const char* pcap_datalink_val_to_name (int dlt)
-
- -

Translates a data link type value to the corresponding data link type name. NULL is returned on failure.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
int pcap_dispatch (pcap_tp,
int cnt,
pcap_handler callback,
u_char * user 
)
-
- -

Collect a group of packets.

-

pcap_dispatch() is used to collect and process packets. cnt specifies the maximum number of packets to process before returning. This is not a minimum number; when reading a live capture, only one bufferful of packets is read at a time, so fewer than cnt packets may be processed. A cnt of -1 processes all the packets received in one buffer when reading a live capture, or all the packets in the file when reading a ``savefile''. callback specifies a routine to be called with three arguments: a u_char pointer which is passed in from pcap_dispatch(), a const struct pcap_pkthdr pointer, and a const u_char pointer to the first caplen (as given in the struct pcap_pkthdr a pointer to which is passed to the callback routine) bytes of data from the packet (which won't necessarily be the entire packet; to capture the entire packet, you will have to provide a value for snaplen in your call to pcap_open_live() that is sufficiently large to get all of the packet's data - a value of 65535 should be sufficient on most if not all networks).

-

The number of packets read is returned. 0 is returned if no packets were read from a live capture (if, for example, they were discarded because they didn't pass the packet filter, or if, on platforms that support a read timeout that starts before any packets arrive, the timeout expires before any packets arrive, or if the file descriptor for the capture device is in non-blocking mode and no packets were available to be read) or if no more packets are available in a ``savefile.'' A return of -1 indicates an error in which case pcap_perror() or pcap_geterr() may be used to display the error text. A return of -2 indicates that the loop terminated due to a call to pcap_breakloop() before any packets were processed. If your application uses pcap_breakloop(), make sure that you explicitly check for -1 and -2, rather than just checking for a return value < 0.

-
Note
when reading a live capture, pcap_dispatch() will not necessarily return when the read times out; on some platforms, the read timeout isn't supported, and, on other platforms, the timer doesn't start until at least one packet arrives. This means that the read timeout should NOT be used in, for example, an interactive application, to allow the packet capture loop to ``poll'' for user input periodically, as there's no guarantee that pcap_dispatch() will return after the timeout expires.
-
See also
pcap_loop(), pcap_next(), pcap_open_live(), pcap_open_offline(), pcap_handler
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void pcap_dump (u_char * user,
const struct pcap_pkthdrh,
const u_char * sp 
)
-
- -

Save a packet to disk.

-

pcap_dump() outputs a packet to the "savefile" opened with pcap_dump_open(). Note that its calling arguments are suitable for use with pcap_dispatch() or pcap_loop(). If called directly, the user parameter is of type pcap_dumper_t as returned by pcap_dump_open().

-
See also
pcap_dump_open(), pcap_dump_close(), pcap_dispatch(), pcap_loop()
- -
-
- -
-
- - - - - - - - -
void pcap_dump_close (pcap_dumper_tp)
-
- -

Closes a savefile.

-
See also
pcap_dump_open(), pcap_dump()
- -
-
- -
-
- - - - - - - - -
FILE* pcap_dump_file (pcap_dumper_tp)
-
- -

return the standard I/O stream of the 'savefile' opened by pcap_dump_open().

- -
-
- -
-
- - - - - - - - -
int pcap_dump_flush (pcap_dumper_tp)
-
- -

Flushes the output buffer to the savefile,'' so that any packets written with pcap_dump() but not yet written to thesavefile'' will be written. -1 is returned on error, 0 on success.

- -
-
- -
-
- - - - - - - - -
long pcap_dump_ftell (pcap_dumper_t)
-
- -

Return the file position for a "savefile".

-

pcap_dump_ftell() returns the current file position for the "savefile", representing the number of bytes written by pcap_dump_open() and pcap_dump() . -1 is returned on error.

-
See also
pcap_dump_open(), pcap_dump()
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
pcap_dumper_t* pcap_dump_open (pcap_tp,
const char * fname 
)
-
- -

Open a file to write packets.

-

pcap_dump_open() is called to open a "savefile" for writing. The name "-" in a synonym for stdout. NULL is returned on failure. p is a pcap struct as returned by pcap_open_offline() or pcap_open_live(). fname specifies the name of the file to open. Alternatively, you may call pcap_dump_fopen() to write data to an existing open stream fp. Note that on Windows, that stream should be opened in binary mode. If NULL is returned, pcap_geterr() can be used to get the error text.

-
See also
pcap_dump_close(), pcap_dump()
- -
-
- -
-
- - - - - - - - -
FILE* pcap_file (pcap_tp)
-
- -

Return the standard stream of an offline capture.

-

pcap_file() returns the standard I/O stream of the "savefile", if a "savefile" was opened with pcap_open_offline(), or NULL, if a network device was opened with pcap_open_live().

Deprecated:
Due to incompatibilities between the C Runtime (CRT) used to compile WinPcap and the one used by WinPcap-based applications, this function may return an invalid FILE pointer, i.e. a descriptor that causes all the standard I/O stream functions (ftell, fseek, fclose...) to fail. The function is still available for backwards binary compatibility, only.
-
See also
pcap_open_offline(), pcap_open_live()
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
int pcap_findalldevs (pcap_if_t ** alldevsp,
char * errbuf 
)
-
- -

Construct a list of network devices that can be opened with pcap_open_live().

-
Note
that there may be network devices that cannot be opened with pcap_open_live() by the process calling pcap_findalldevs(), because, for example, that process might not have sufficient privileges to open them for capturing; if so, those devices will not appear on the list.) alldevsp is set to point to the first element of the list; each element of the list is of type pcap_if_t,
-

-1 is returned on failure, in which case errbuf is filled in with an appropriate error message; 0 is returned on success.

-
See also
struct pcap_if, pcap_freealldevs(), pcap_open_live(), pcap_lookupdev(), pcap_lookupnet()
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
int pcap_findalldevs_ex (char * source,
struct pcap_rmtauth * auth,
pcap_if_t ** alldevs,
char * errbuf 
)
-
- -

Create a list of network devices that can be opened with pcap_open().

-

This function is a superset of the old 'pcap_findalldevs()', which allows listing only the devices present on the local machine. Vice versa, pcap_findalldevs_ex() allows listing the devices present on a remote machine as well. Additionally, it can list all the pcap files available into a given folder. Moreover, pcap_findalldevs_ex() is platform independent, since it relies on the standard pcap_findalldevs() to get addresses on the local machine.

-

In case the function has to list the interfaces on a remote machine, it opens a new control connection toward that machine, it retrieves the interfaces, and it drops the connection. However, if this function detects that the remote machine is in 'active' mode, the connection is not dropped and the existing socket is used.

-

The 'source' is a parameter that tells the function where the lookup has to be done and it uses the same syntax of the pcap_open().

-

Differently from the pcap_findalldevs(), the interface names (pointed by the alldevs->name and the other ones in the linked list) are already ready to be used in the pcap_open() call. Vice versa, the output that comes from pcap_findalldevs() must be formatted with the new pcap_createsrcstr() before passing the source identifier to the pcap_open().

-
Parameters
- - - - - -
sourcea char* buffer that keeps the 'source localtion', according to the new WinPcap syntax. This source will be examined looking for adapters (local or remote) (e.g. source can be 'rpcap://' for local adapters or 'rpcap://host:port' for adapters on a remote host) or pcap files (e.g. source can be 'file://c:/myfolder/').
- The strings that must be prepended to the 'source' in order to define if we want local/remote adapters or files is defined in the new Source Specification Syntax .
autha pointer to a pcap_rmtauth structure. This pointer keeps the information required to authenticate the RPCAP connection to the remote host. This parameter is not meaningful in case of a query to the local host: in that case it can be NULL.
alldevsa 'struct pcap_if_t' pointer, which will be properly allocated inside this function. When the function returns, it is set to point to the first element of the interface list; each element of the list is of type 'struct pcap_if_t'.
errbufa pointer to a user-allocated buffer (of size PCAP_ERRBUF_SIZE) that will contain the error message (in case there is one).
-
-
-
Returns
'0' if everything is fine, '-1' if some errors occurred. The list of the devices is returned in the 'alldevs' variable. When the function returns correctly, 'alldevs' cannot be NULL. In other words, this function returns '-1' also in case the system does not have any interface to list.
-

The error message is returned in the 'errbuf' variable. An error could be due to several reasons:

    -
  • libpcap/WinPcap was not installed on the local/remote host
  • -
  • the user does not have enough privileges to list the devices / files
  • -
  • a network problem
  • -
  • the RPCAP version negotiation failed
  • -
  • other errors (not enough memory and others).
  • -
-
Warning
There may be network devices that cannot be opened with pcap_open() by the process calling pcap_findalldevs(), because, for example, that process might not have sufficient privileges to open them for capturing; if so, those devices will not appear on the list.
-
-The interface list must be deallocated manually by using the pcap_freealldevs().
- -
-
- -
-
- - - - - - - - -
void pcap_freealldevs (pcap_if_talldevsp)
-
- -

Free an interface list returned by pcap_findalldevs().

-

pcap_freealldevs() is used to free a list allocated by pcap_findalldevs().

-
See also
pcap_findalldevs()
- -
-
- -
-
- - - - - - - - -
void pcap_freecode (struct bpf_program * fp)
-
- -

Free a filter.

-

pcap_freecode() is used to free up allocated memory pointed to by a bpf_program struct generated by pcap_compile() when that BPF program is no longer needed, for example after it has been made the filter program for a pcap structure by a call to pcap_setfilter().

-
See also
pcap_compile(), pcap_compile_nopcap()
- -
-
- -
-
- - - - - - - - -
PAirpcapHandle pcap_get_airpcap_handle (pcap_tp)
-
- -

Returns the AirPcap handler associated with an adapter. This handler can be used to change the wireless-related settings of the CACE Technologies AirPcap wireless capture adapters.

-
Note
THIS FUNCTION SHOULD BE CONSIDERED PROVISIONAL, AND MAY BE REPLACED IN THE FUTURE BY A MORE COMPLETE SET OF FUNCTIONS FOR WIRELESS SUPPORT.
-

pcap_get_airpcap_handle() allows to obtain the airpcap handle of an open adapter. This handle can be used with the AirPcap API functions to perform wireless-releated operations, e.g. changing the channel or enabling WEP decryption. For more details about the AirPcap wireless capture adapters, see http://www.cacetech.com/products/airpcap.html

-
Parameters
- - -
phandle to an open libpcap adapter
-
-
-
Returns
a pointer to an open AirPcap handle, used internally by the libpcap open adapter. NULL if the libpcap adapter doesn't have wireless support through AirPcap.
- -
-
- -
-
- - - - - - - - -
char* pcap_geterr (pcap_tp)
-
- -

return the error text pertaining to the last pcap library error.

-
Note
the pointer Return will no longer point to a valid error message string after the pcap_t passed to it is closed; you must use or copy the string before closing the pcap_t.
-
See also
pcap_perror()
- -
-
- -
-
- - - - - - - - -
HANDLE pcap_getevent (pcap_tp)
-
- -

Return the handle of the event associated with the interface p.

-

This event can be passed to functions like WaitForSingleObject() or WaitForMultipleObjects() to wait until the driver's buffer contains some data without performing a read.

-

We disourage the use of this function because it is not portable.

-
See also
pcap_open_live()
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
int pcap_getnonblock (pcap_tp,
char * errbuf 
)
-
- -

Get the "non-blocking" state of an interface.

-

pcap_getnonblock() returns the current "non-blocking" state of the capture descriptor; it always returns 0 on "savefiles". If there is an error, -1 is returned and errbuf is filled in with an appropriate error message.

-
See also
pcap_setnonblock()
- -
-
- -
-
- - - - - - - - -
int pcap_is_swapped (pcap_tp)
-
- -

returns true if the current savefile uses a different byte order than the current system.

- -
-
- -
-
- - - - - - - - -
const char* pcap_lib_version (void )
-
- -

Returns a pointer to a string giving information about the version of the libpcap library being used; note that it contains more information than just a version number.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
int pcap_list_datalinks (pcap_tp,
int ** dlt_buf 
)
-
- -

list datalinks

-

pcap_list_datalinks() is used to get a list of the supported data link types of the interface associated with the pcap descriptor. pcap_list_datalinks() allocates an array to hold the list and sets *dlt_buf. The caller is responsible for freeing the array. -1 is returned on failure; otherwise, the number of data link types in the array is returned.

-
See also
pcap_datalink(), pcap_set_datalink(), pcap_datalink_name_to_val()
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
int pcap_live_dump (pcap_tp,
char * filename,
int maxsize,
int maxpacks 
)
-
- -

Save a capture to file.

-
Note
: this function does not work in current version of WinPcap.
-

pcap_live_dump() dumps the network traffic from an interface to a file. Using this function the dump is performed at kernel level, therefore it is more efficient than using pcap_dump().

-

The parameters of this function are an interface descriptor (obtained with pcap_open_live()), a string with the name of the dump file, the maximum size of the file (in bytes) and the maximum number of packets that the file will contain. Setting maxsize or maxpacks to 0 means no limit. When maxsize or maxpacks are reached, the dump ends.

-

pcap_live_dump() is non-blocking, threfore Return immediately. pcap_live_dump_ended() can be used to check the status of the dump process or to wait until it is finished. pcap_close() can instead be used to end the dump process.

-

Note that when one of the two limits is reached, the dump is stopped, but the file remains opened. In order to correctly flush the data and put the file in a consistent state, the adapter must be closed with pcap_close().

-
See also
pcap_live_dump_ended(), pcap_open_live(), pcap_close(), pcap_dump_open(), pcap_dump()
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
int pcap_live_dump_ended (pcap_tp,
int sync 
)
-
- -

Return the status of the kernel dump process, i.e. tells if one of the limits defined with pcap_live_dump() has been reached.

-
Note
: this function does not work in current version of WinPcap.
-

pcap_live_dump_ended() informs the user about the limits that were set with a previous call to pcap_live_dump() on the interface pointed by p: if the return value is nonzero, one of the limits has been reched and the dump process is currently stopped.

-

If sync is nonzero, the function blocks until the dump is finished, otherwise Return immediately.

-
Warning
if the dump process has no limits (i.e. if the maxsize and maxpacks arguments of pcap_live_dump() were both 0), the dump process will never stop, therefore setting sync to TRUE will block the application on this call forever.
-
See also
pcap_live_dump()
- -
-
- -
-
- - - - - - - - -
char* pcap_lookupdev (char * errbuf)
-
- -

Return the first valid device in the system.

-
Deprecated:
Use pcap_findalldevs() or pcap_findalldevs_ex() instead.
-
   pcap_lookupdev() returns a pointer  to  a  network  device
-   suitable  for  use  with pcap_open_live() and pcap_lookupnet().
-   If there is an error, NULL is returned and  errbuf
-   is filled in with an appropriate error message.
-
See also
pcap_findalldevs(), pcap_open_live()
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
int pcap_lookupnet (const char * device,
bpf_u_int32netp,
bpf_u_int32maskp,
char * errbuf 
)
-
- -

Return the subnet and netmask of an interface.

-
Deprecated:
Use pcap_findalldevs() or pcap_findalldevs_ex() instead.
-
   pcap_lookupnet()  is  used to determine the network number
-   and mask associated with the network device device.   Both
-   netp  and  maskp are bpf_u_int32 pointers.  A return of -1
-   indicates an error in which case errbuf is filled in  with
-   an appropriate error message.
-
See also
pcap_findalldevs()
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
int pcap_loop (pcap_tp,
int cnt,
pcap_handler callback,
u_char * user 
)
-
- -

Collect a group of packets.

-

pcap_loop() is similar to pcap_dispatch() except it keeps reading packets until cnt packets are processed or an error occurs. It does not return when live read timeouts occur. Rather, specifying a non-zero read timeout to pcap_open_live() and then calling pcap_dispatch() allows the reception and processing of any packets that arrive when the timeout occurs. A negative cnt causes pcap_loop() to loop forever (or at least until an error occurs). -1 is returned on an error; 0 is returned if cnt is exhausted; -2 is returned if the loop terminated due to a call to pcap_breakloop() before any packets were processed. If your application uses pcap_breakloop(), make sure that you explicitly check for -1 and -2, rather than just checking for a return value < 0.

-
See also
pcap_dispatch(), pcap_next(), pcap_open_live(), pcap_open_offline(), pcap_handler
- -
-
- -
-
- - - - - - - - -
int pcap_major_version (pcap_tp)
-
- -

return the major version number of the pcap library used to write the savefile.

-
See also
pcap_minor_version()
- -
-
- -
-
- - - - - - - - -
int pcap_minor_version (pcap_tp)
-
- -

return the minor version number of the pcap library used to write the savefile.

-
See also
pcap_major_version()
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
u_char* pcap_next (pcap_tp,
struct pcap_pkthdrh 
)
-
- -

Return the next available packet.

-

pcap_next() reads the next packet (by calling pcap_dispatch() with a cnt of 1) and returns a u_char pointer to the data in that packet. (The pcap_pkthdr struct for that packet is not supplied.) NULL is returned if an error occured, or if no packets were read from a live capture (if, for example, they were discarded because they didn't pass the packet filter, or if, on platforms that support a read timeout that starts before any packets arrive, the timeout expires before any packets arrive, or if the file descriptor for the capture device is in non-blocking mode and no packets were available to be read), or if no more packets are available in a ``savefile.'' Unfortunately, there is no way to determine whether an error occured or not.

See also
pcap_dispatch(), pcap_loop()
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
int pcap_next_ex (pcap_tp,
struct pcap_pkthdr ** pkt_header,
const u_char ** pkt_data 
)
-
- -

Read a packet from an interface or from an offline capture.

-

This function is used to retrieve the next available packet, bypassing the callback method traditionally provided by libpcap.

-

pcap_next_ex fills the pkt_header and pkt_data parameters (see pcap_handler()) with the pointers to the header and to the data of the next captured packet.

-

The return value can be:

    -
  • 1 if the packet has been read without problems
  • -
  • 0 if the timeout set with pcap_open_live() has elapsed. In this case pkt_header and pkt_data don't point to a valid packet
  • -
  • -1 if an error occurred
  • -
  • -2 if EOF was reached reading from an offline capture
  • -
-
See also
pcap_open_live(), pcap_loop(), pcap_dispatch(), pcap_handler()
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
int pcap_offline_filter (struct bpf_program * prog,
const struct pcap_pkthdrheader,
const u_char * pkt_data 
)
-
- -

Returns if a given filter applies to an offline packet.

-

This function is used to apply a filter to a packet that is currently in memory. This process does not need to open an adapter; we need just to create the proper filter (by settings parameters like the snapshot length, or the link-layer type) by means of the pcap_compile_nopcap().

-

The current API of libpcap does not allow to receive a packet and to filter the packet after it has been received. However, this can be useful in case you want to filter packets in the application, instead of into the receiving process. This function allows you to do the job.

-
Parameters
- - - - -
progbpf program (created with the pcap_compile_nopcap() )
headerheader of the packet that has to be filtered
pkt_databuffer containing the packet, in network-byte order.
-
-
-
Returns
the length of the bytes that are currently available into the packet if the packet satisfies the filter, 0 otherwise.
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
pcap_t* pcap_open (const char * source,
int snaplen,
int flags,
int read_timeout,
struct pcap_rmtauth * auth,
char * errbuf 
)
-
- -

Open a generic source in order to capture / send (WinPcap only) traffic.

-

The pcap_open() replaces all the pcap_open_xxx() functions with a single call.

-

This function hides the differences between the different pcap_open_xxx() functions so that the programmer does not have to manage different opening function. In this way, the 'true' open function is decided according to the source type, which is included into the source string (in the form of source prefix).

-

This function can rely on the pcap_createsrcstr() to create the string that keeps the capture device according to the new syntax, and the pcap_parsesrcstr() for the other way round.

-
Parameters
- - - - - - - -
sourcezero-terminated string containing the source name to open. The source name has to include the format prefix according to the new Source Specification Syntax and it cannot be NULL.
- On on Linux systems with 2.2 or later kernels, a device argument of "any" (i.e. rpcap://any) can be used to capture packets from all interfaces.
- In order to makes the source syntax easier, please remember that: -
snaplenlength of the packet that has to be retained. For each packet received by the filter, only the first 'snaplen' bytes are stored in the buffer and passed to the user application. For instance, snaplen equal to 100 means that only the first 100 bytes of each packet are stored.
flagskeeps several flags that can be needed for capturing packets. The allowed flags are defined in the pcap_open() flags .
read_timeoutread timeout in milliseconds. The read timeout is used to arrange that the read not necessarily return immediately when a packet is seen, but that it waits for some amount of time to allow more packets to arrive and to read multiple packets from the OS kernel in one operation. Not all platforms support a read timeout; on platforms that don't, the read timeout is ignored.
autha pointer to a 'struct pcap_rmtauth' that keeps the information required to authenticate the user on a remote machine. In case this is not a remote capture, this pointer can be set to NULL.
errbufa pointer to a user-allocated buffer which will contain the error in case this function fails. The pcap_open() and findalldevs() are the only two functions which have this parameter, since they do not have (yet) a pointer to a pcap_t structure, which reserves space for the error string. Since these functions do not have (yet) a pcap_t pointer (the pcap_t pointer is NULL in case of errors), they need an explicit 'errbuf' variable. 'errbuf' may also be set to warning text when pcap_open_live() succeds; to detect this case the caller should store a zero-length string in 'errbuf' before calling pcap_open_live() and display the warning to the user if 'errbuf' is no longer a zero-length string.
-
-
-
Returns
A pointer to a 'pcap_t' which can be used as a parameter to the following calls (pcap_compile() and so on) and that specifies an opened WinPcap session. In case of problems, it returns NULL and the 'errbuf' variable keeps the error message.
-
Warning
The source cannot be larger than PCAP_BUF_SIZE.
-
-The following formats are not allowed as 'source' strings:
    -
  • rpcap:// [to open the first local adapter]
  • -
  • rpcap://hostname/ [to open the first remote adapter]
  • -
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
pcap_t* pcap_open_dead (int linktype,
int snaplen 
)
-
- -

Create a pcap_t structure without starting a capture.

-

pcap_open_dead() is used for creating a pcap_t structure to use when calling the other functions in libpcap. It is typically used when just using libpcap for compiling BPF code.

-
See also
pcap_open_offline(), pcap_open_live(), pcap_findalldevs(), pcap_compile(), pcap_setfilter(), pcap_close()
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
pcap_t* pcap_open_live (const char * device,
int snaplen,
int promisc,
int to_ms,
char * ebuf 
)
-
- -

Open a live capture from the network.

-

pcap_open_live() is used to obtain a packet capture descriptor to look at packets on the network. device is a string that specifies the network device to open; on Linux systems with 2.2 or later kernels, a device argument of "any" or NULL can be used to capture packets from all interfaces. snaplen specifies the maximum number of bytes to capture. If this value is less than the size of a packet that is captured, only the first snaplen bytes of that packet will be captured and provided as packet data. A value of 65535 should be sufficient, on most if not all networks, to capture all the data available from the packet. promisc specifies if the interface is to be put into promiscuous mode. (Note that even if this parameter is false, the interface could well be in promiscuous mode for some other reason.) For now, this doesn't work on the "any" device; if an argument of "any" or NULL is supplied, the promisc flag is ignored. to_ms specifies the read timeout in milliseconds. The read timeout is used to arrange that the read not necessarily return immediately when a packet is seen, but that it wait for some amount of time to allow more packets to arrive and to read multiple packets from the OS kernel in one operation. Not all platforms support a read timeout; on platforms that don't, the read timeout is ignored. A zero value for to_ms, on platforms that support a read timeout, will cause a read to wait forever to allow enough packets to arrive, with no timeout. errbuf is used to return error or warning text. It will be set to error text when pcap_open_live() fails and returns NULL. errbuf may also be set to warning text when pcap_open_live() succeds; to detect this case the caller should store a zero-length string in errbuf before calling pcap_open_live() and display the warning to the user if errbuf is no longer a zero-length string.

-
See also
pcap_open_offline(), pcap_open_dead(), pcap_findalldevs(), pcap_close()
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
pcap_t* pcap_open_offline (const char * fname,
char * errbuf 
)
-
- -

Open a savefile in the tcpdump/libpcap format to read packets.

-

pcap_open_offline() is called to open a "savefile" for reading. fname specifies the name of the file to open. The file has the same format as those used by tcpdump(1) and tcpslice(1). The name "-" in a synonym for stdin. Alternatively, you may call pcap_fopen_offline() to read dumped data from an existing open stream fp. Note that on Windows, that stream should be opened in binary mode. errbuf is used to return error text and is only set when pcap_open_offline() or pcap_fopen_offline() fails and returns NULL.

-
See also
pcap_open_live(), pcap_dump_open(), pcap_findalldevs(), pcap_close()
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
int pcap_parsesrcstr (const char * source,
int * type,
char * host,
char * port,
char * name,
char * errbuf 
)
-
- -

Parse the source string and returns the pieces in which the source can be split.

-

This call is the other way round of pcap_createsrcstr(). It accepts a null-terminated string and it returns the parameters related to the source. This includes:

    -
  • the type of the source (file, winpcap on a remote adapter, winpcap on local adapter), which is determined by the source prefix (PCAP_SRC_IF_STRING and so on)
  • -
  • the host on which the capture has to be started (only for remote captures)
  • -
  • the 'raw' name of the source (file name, name of the remote adapter, name of the local adapter), without the source prefix. The string returned does not include the type of the source itself (i.e. the string returned does not include "file://" or rpcap:// or such).
  • -
-

The user can omit some parameters in case it is not interested in them.

-
Parameters
- - - - - - - -
sourcea null-terminated string containing the WinPcap source. This source starts with an identifier according to the new Source Specification Syntax .
typepointer to an integer, which is used to return the code corrisponding to the selected source. The code will be one defined in the Source identification Codes .
- In case the source string does not exists (i.e. 'source == NULL') or it is empty ('*source == NULL'), it returns PCAP_SRC_IF_LOCAL (i.e. you are ready to call pcap_open_live() ). This behavior is kept only for compatibility with older applications (e.g. tcpdump); therefore we suggest to move to the new syntax for sources.
- This parameter can be NULL in case the user is not interested in that.
hostuser-allocated buffer (of size PCAP_BUF_SIZE) that is used to return the host name on which the capture has to be started. This value is meaningful only in case of remote capture; otherwise, the returned string will be empty (""). This parameter can be NULL in case the user is not interested in that.
portuser-allocated buffer (of size PCAP_BUF_SIZE) that is used to return the port that has to be used by the RPCAP protocol to contact the other host. This value is meaningful only in case of remote capture and if the user wants to use a non-standard port; otherwise, the returned string will be empty (""). In case of remote capture, an emply string means "use the standard RPCAP port". This parameter can be NULL in case the user is not interested in that.
nameuser-allocated buffer (of size PCAP_BUF_SIZE) that is used to return the source name, without the source prefix. If the name does not exist (for example because source contains 'rpcap://' that means 'default local adapter'), it returns NULL. This parameter can be NULL in case the user is not interested in that.
errbufpointer to a user-allocated buffer (of size PCAP_ERRBUF_SIZE) that will contain the error message (in case there is one). This parameter can be NULL in case the user is not interested in that.
-
-
-
Returns
'0' if everything is fine, '-1' if some errors occurred. The requested values (host name, network port, type of the source) are returned into the proper variables passed by reference.
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
void pcap_perror (pcap_tp,
char * prefix 
)
-
- -

print the text of the last pcap library error on stderr, prefixed by prefix.

-
See also
pcap_geterr()
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SOCKET pcap_remoteact_accept (const char * address,
const char * port,
const char * hostlist,
char * connectinghost,
struct pcap_rmtauth * auth,
char * errbuf 
)
-
- -

Block until a network connection is accepted (active mode only).

-

This function has been defined to allow the client dealing with the 'active mode'. In other words, in the 'active mode' the server opens the connection toward the client, so that the client has to open a socket in order to wait for connections. When a new connection is accepted, the RPCAP protocol starts as usual; the only difference is that the connection is initiated by the server.

-

This function accepts only ONE connection, then it closes the waiting socket. This means that if some error occurs, the application has to call it again in order to accept another connection.

-

This function returns when a new connection (coming from a valid host 'connectinghost') is accepted; it returns error otherwise.

-
Parameters
- - - - - - - -
addressa string that keeps the network address we have to bind to; usually it is NULL (it means 'bind on all local addresses').
porta string that keeps the network port on which we have to bind to; usually it is NULL (it means 'bind on the predefined port', i.e. RPCAP_DEFAULT_NETPORT_ACTIVE).
hostlista string that keeps the host name of the host from whom we are expecting a connection; it can be NULL (it means 'accept connection from everyone'). Host names are separated by a whatever character in the RPCAP_HOSTLIST_SEP list.
connectinghosta user-allocated buffer that will contain the name of the host is trying to connect to us. This variable must be at least RPCAP_HOSTLIST_SIZE bytes..
autha pointer to a pcap_rmtauth structure. This pointer keeps the information required to authenticate the RPCAP connection to the remote host.
errbufa pointer to a user-allocated buffer (of size PCAP_ERRBUF_SIZE) that will contain the error message (in case there is one).
-
-
-
Returns
The SOCKET identifier of the new control connection if everything is fine, a negative number if some errors occurred. The error message is returned into the errbuf variable. In case it returns '-1', this means 'everything is fine', but the host cannot be admitted. In case it returns '-2', in means 'unrecoverable error' (for example it is not able to bind the socket, or something like that). In case it returns '-3', it means 'authentication failed'. The authentication check is performed only if the connecting host is among the ones that are allowed to connect to this host.
-

The host that is connecting to us is returned into the hostlist variable, which ust be allocated by the user. This variable contains the host name both in case the host is allowed, and in case the connection is refused.

-
Warning
Although this function returns the socket established by the new control connection, this value should not be used. This value will be stored into some libpcap internal variables and it will be managed automatically by the library. In other words, all the following calls to findalldevs() and pcap_open() will check if the host is among one that already has a control connection in place; if so, that one will be used.
-
-This function has several problems if used inside a thread, which is stopped when this call is blocked into the accept(). In this case, the socket on which we accept connections is not freed (thread termination is a very dirty job), so that we are no longer able to accept other connections until the program (i.e. the process) stops. In order to solve the problem, call the pcap_remoteact_cleanup().
- -
-
- -
-
- - - - - - - -
void pcap_remoteact_cleanup ()
-
- -

Clean the socket that is currently used in waiting active connections.

-

This function does a very dirty job. The fact is that is the waiting socket is not freed if the pcap_remoteaccept() is killed inside a new thread. This function is able to clean the socket in order to allow the next calls to pcap_remoteact_accept() to work.

-

This function is useful only if you launch pcap_remoteact_accept() inside a new thread, and you stops (not very gracefully) the thread (for example because the user changed idea, and it does no longer want to wait for an active connection). So, basically, the flow should be the following:

-

This function has no effects in other cases.

-
Returns
None.
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
int pcap_remoteact_close (const char * host,
char * errbuf 
)
-
- -

Drop an active connection (active mode only).

-

This function has been defined to allow the client dealing with the 'active mode'. This function closes an active connection that is still in place and it purges the host name from the 'activeHost' list. From this point on, the client will not have any connection with that host in place.

-
Parameters
- - - -
hosta string that keeps the host name of the host for which we want to close the active connection.
errbufa pointer to a user-allocated buffer (of size PCAP_ERRBUF_SIZE) that will contain the error message (in case there is one).
-
-
-
Returns
'0' if everything is fine, '-1' if some errors occurred. The error message is returned into the errbuf variable.
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
int pcap_remoteact_list (char * hostlist,
char sep,
int size,
char * errbuf 
)
-
- -

Return the hostname of the host that have an active connection with us (active mode only).

-

This function has been defined to allow the client dealing with the 'active mode'. This function returns the list of hosts that are currently having an active connection with us. This function is useful in order to delete an active connection that is still in place.

-
Parameters
- - - - - -
hostlista user-allocated string that will keep the list of host that are currently connected with us.
septhe character that has to be sued as a separator between the hosts (',' for example).
sizesize of the hostlist buffer.
errbufa pointer to a user-allocated buffer (of size PCAP_ERRBUF_SIZE) that will contain the error message (in case there is one).
-
-
-
Returns
'0' if everything is fine, '-1' if some errors occurred. The error message is returned into the errbuf variable.
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
int pcap_sendpacket (pcap_tp,
u_char * buf,
int size 
)
-
- -

Send a raw packet.

-

This function allows to send a raw packet to the network. p is the interface that will be used to send the packet, buf contains the data of the packet to send (including the various protocol headers), size is the dimension of the buffer pointed by buf, i.e. the size of the packet to send. The MAC CRC doesn't need to be included, because it is transparently calculated and added by the network interface driver. The return value is 0 if the packet is succesfully sent, -1 otherwise.

-
See also
pcap_open_live()
- -
-
- -
-
- - - - - - - - -
pcap_send_queue* pcap_sendqueue_alloc (u_int memsize)
-
- -

Allocate a send queue.

-

This function allocates a send queue, i.e. a buffer containing a set of raw packets that will be transimtted on the network with pcap_sendqueue_transmit().

-

memsize is the size, in bytes, of the queue, therefore it determines the maximum amount of data that the queue will contain.

-

Use pcap_sendqueue_queue() to insert packets in the queue.

-
See also
pcap_sendqueue_queue(), pcap_sendqueue_transmit(), pcap_sendqueue_destroy()
- -
-
- -
-
- - - - - - - - -
void pcap_sendqueue_destroy (pcap_send_queuequeue)
-
- -

Destroy a send queue.

-

Deletes a send queue and frees all the memory associated with it.

-
See also
pcap_sendqueue_alloc(), pcap_sendqueue_queue(), pcap_sendqueue_transmit()
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
int pcap_sendqueue_queue (pcap_send_queuequeue,
const struct pcap_pkthdrpkt_header,
const u_char * pkt_data 
)
-
- -

Add a packet to a send queue.

-

pcap_sendqueue_queue() adds a packet at the end of the send queue pointed by the queue parameter. pkt_header points to a pcap_pkthdr structure with the timestamp and the length of the packet, pkt_data points to a buffer with the data of the packet.

-

The pcap_pkthdr structure is the same used by WinPcap and libpcap to store the packets in a file, therefore sending a capture file is straightforward. 'Raw packet' means that the sending application will have to include the protocol headers, since every packet is sent to the network 'as is'. The CRC of the packets needs not to be calculated, because it will be transparently added by the network interface.

-
See also
pcap_sendqueue_alloc(), pcap_sendqueue_transmit(), pcap_sendqueue_destroy()
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
u_int pcap_sendqueue_transmit (pcap_tp,
pcap_send_queuequeue,
int sync 
)
-
- -

Send a queue of raw packets to the network.

-

This function transmits the content of a queue to the wire. p is a pointer to the adapter on which the packets will be sent, queue points to a pcap_send_queue structure containing the packets to send (see pcap_sendqueue_alloc() and pcap_sendqueue_queue()), sync determines if the send operation must be synchronized: if it is non-zero, the packets are sent respecting the timestamps, otherwise they are sent as fast as possible.

-

The return value is the amount of bytes actually sent. If it is smaller than the size parameter, an error occurred during the send. The error can be caused by a driver/adapter problem or by an inconsistent/bogus send queue.

-
Note
Using this function is more efficient than issuing a series of pcap_sendpacket(), because the packets are buffered in the kernel driver, so the number of context switches is reduced. Therefore, expect a better throughput when using pcap_sendqueue_transmit.
-
-When Sync is set to TRUE, the packets are synchronized in the kernel with a high precision timestamp. This requires a non-negligible amount of CPU, but allows normally to send the packets with a precision of some microseconds (depending on the accuracy of the performance counter of the machine). Such a precision cannot be reached sending the packets with pcap_sendpacket().
-
See also
pcap_sendqueue_alloc(), pcap_sendqueue_queue(), pcap_sendqueue_destroy()
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
int pcap_set_datalink (pcap_tp,
int dlt 
)
-
- -

Set the current data link type of the pcap descriptor to the type specified by dlt. -1 is returned on failure.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
int pcap_setbuff (pcap_tp,
int dim 
)
-
- -

Set the size of the kernel buffer associated with an adapter.

-

dim specifies the size of the buffer in bytes. The return value is 0 when the call succeeds, -1 otherwise. If an old buffer was already created with a previous call to pcap_setbuff(), it is deleted and its content is discarded. pcap_open_live() creates a 1 MByte buffer by default.

-
See also
pcap_open_live(), pcap_loop(), pcap_dispatch()
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
int pcap_setfilter (pcap_tp,
struct bpf_program * fp 
)
-
- -

Associate a filter to a capture.

-

pcap_setfilter() is used to specify a filter program. fp is a pointer to a bpf_program struct, usually the result of a call to pcap_compile(). -1 is returned on failure, in which case pcap_geterr() may be used to display the error text; 0 is returned on success.

-
See also
pcap_compile(), pcap_compile_nopcap()
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
int pcap_setmintocopy (pcap_tp,
int size 
)
-
- -

Set the minumum amount of data received by the kernel in a single call.

-

pcap_setmintocopy() changes the minimum amount of data in the kernel buffer that causes a read from the application to return (unless the timeout expires). If the value of size is large, the kernel is forced to wait the arrival of several packets before copying the data to the user. This guarantees a low number of system calls, i.e. low processor usage, and is a good setting for applications like packet-sniffers and protocol analyzers. Vice versa, in presence of a small value for this variable, the kernel will copy the packets as soon as the application is ready to receive them. This is useful for real time applications that need the best responsiveness from the kernel. pcap_open_live() sets a default mintocopy value of 16000 bytes.

-
See also
pcap_open_live(), pcap_loop(), pcap_dispatch()
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
int pcap_setmode (pcap_tp,
int mode 
)
-
- -

Set the working mode of the interface p to mode.

-

Valid values for mode are MODE_CAPT (default capture mode) and MODE_STAT (statistical mode). See the tutorial "\ref wpcap_tut9" for details about statistical mode.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
int pcap_setnonblock (pcap_tp,
int nonblock,
char * errbuf 
)
-
- -

Switch between blocking and nonblocking mode.

-

pcap_setnonblock() puts a capture descriptor, opened with pcap_open_live(), into "non-blocking" mode, or takes it out of "non-blocking" mode, depending on whether the nonblock argument is non-zero or zero. It has no effect on "savefiles". If there is an error, -1 is returned and errbuf is filled in with an appropriate error message; otherwise, 0 is returned. In "non-blocking" mode, an attempt to read from the capture descriptor with pcap_dispatch() will, if no packets are currently available to be read, return 0 immediately rather than blocking waiting for packets to arrive. pcap_loop() and pcap_next() will not work in "non-blocking" mode.

-
See also
pcap_getnonblock(), pcap_dispatch()
- -
-
- -
-
- - - - - - - - -
struct pcap_samp* pcap_setsampling (pcap_tp)
-
- -

Define a sampling method for packet capture.

-

This function allows applying a sampling method to the packet capture process. The currently sampling methods (and the way to set them) are described into the struct pcap_samp. In other words, the user must set the appropriate parameters into it; these will be applied as soon as the capture starts.

-
Warning
Sampling parameters cannot be changed when a capture is active. These parameters must be applied before starting the capture. If they are applied when the capture is in progress, the new settings are ignored.
-
-Sampling works only when capturing data on Win32 or reading from a file. It has not been implemented on other platforms. Sampling works on remote machines provided that the probe (i.e. the capturing device) is a Win32 workstation.
- -
-
- -
-
- - - - - - - - -
int pcap_snapshot (pcap_tp)
-
- -

Return the dimension of the packet portion (in bytes) that is delivered to the application.

-

pcap_snapshot() returns the snapshot length specified when pcap_open_live was called.

-
See also
pcap_open_live(), pcap_compile(), pcap_compile_nopcap()
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
int pcap_stats (pcap_tp,
struct pcap_statps 
)
-
- -

Return statistics on current capture.

-

pcap_stats() returns 0 and fills in a pcap_stat struct. The values represent packet statistics from the start of the run to the time of the call. If there is an error or the underlying packet capture doesn't support packet statistics, -1 is returned and the error text can be obtained with pcap_perror() or pcap_geterr(). pcap_stats() is supported only on live captures, not on "savefiles"; no statistics are stored in "savefiles", so no statistics are available when reading from a "savefile".

-
See also
pcap_stats_ex(), pcap_open_live()
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
struct pcap_stat* pcap_stats_ex (pcap_tp,
int * pcap_stat_size 
)
-
- -

Return statistics on current capture.

-

pcap_stats_ex() extends the pcap_stats() allowing to return more statistical parameters than the old call. One of the advantages of this new call is that the pcap_stat structure is not allocated by the user; instead, it is returned back by the system. This allow to extend the pcap_stat structure without affecting backward compatibility on older applications. These will simply check at the values of the members at the beginning of the structure, while only newest applications are able to read new statistical values, which are appended in tail.

-

To be sure not to read a piece of mamory which has not been allocated by the system, the variable pcap_stat_size will return back the size of the structure pcap_stat allocated by the system.

-
Parameters
- - - -
ppointer to the pcap_t currently in use.
pcap_stat_sizepointer to an integer that will contain (when the function returns back) the size of the structure pcap_stat as it has been allocated by the system.
-
-
-
Returns
: a pointer to a pcap_stat structure, that will contain the statistics related to the current device. The return value is NULL in case of errors, and the error text can be obtained with pcap_perror() or pcap_geterr().
-
Warning
pcap_stats_ex() is supported only on live captures, not on "savefiles"; no statistics are stored in "savefiles", so no statistics are available when reading from a "savefile".
-
See also
pcap_stats()
- -
-
- -
-
- - - - - - - - -
char* pcap_strerror (int error)
-
- -

Provided in case strerror() isn't available.

-
See also
pcap_perror(), pcap_geterr()
- -
-
-
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/group__wpcapsamps.html b/libs/WinPcap-413-173-b4/docs/html/group__wpcapsamps.html deleted file mode 100644 index 575e531c..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/group__wpcapsamps.html +++ /dev/null @@ -1,518 +0,0 @@ - - - - - - -WinPcap: Using WinPcap in your programs - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - -
-
-
-
Using WinPcap in your programs
-
-
- - - - - - - - - - -

Creating an application that uses wpcap.dll

-

To create an application that uses wpcap.dll with Microsoft Visual C++, -follow these -steps:

-
    -
  • Include the file pcap.h at the beginning of every source file that - uses the functions exported by library.
  • -
  • If your program uses Win32 specific functions of WinPcap, remember to include WPCAP - among the preprocessor definitions.
  • -
  • If your program uses the remote capture capabilities of WinPcap, add - HAVE_REMOTE among the preprocessor definitions. Do not include - remote-ext.h directly in your source files.
  • Set the options of the linker to include the wpcap.lib library - file specific for your target (x86 or x64). wpcap.lib for x86 can be - found in the \lib folder of the WinPcap developer's - pack, wpcap.lib for x64 can - be found in the \lib\x64 folder.
  • Set the options of the linker to include the winsock library file - ws2_32.lib. This file is distributed with the C compiler - and contains the socket functions for Windows. It is needed by some - functions used by the samples in the tutorial.
  • -
-

How to properly set Microsoft Visual Studio
-
-
Visual Studio 6

-
    -
  • To add a preprocessor definition, you must select Settings from the Project menu, then select C/C++ - from the tab control, and under the category General, you must add - the definition under the Preprocessor Definitions text box. -
  • To add a new library to the project with Microsoft Visual C++, you must - select Settings from the Project menu, then select Link - from the tab control, and then add the name of the new library in the Object/library - modules editbox. -
  • To add a new path where Microsoft Visual C++ will look for the libraries, - you must select Options from the Tools menu, then - Directories - from the tab control, Library files from the Show directories - for combobox, and the add the path in the Directories box. -
  • To add a new path where Microsoft Visual C++ will look for include files, you must select Options from the Tools menu, then - Directories - from the tab control, Include files from the Show directories - for combobox, and the add the path in the Directories box.
  • -
-

Visual Studio 2005 (needed to compile x64 applications)

-
    -
  • To add a preprocessor definition, you must select Properties from the Project menu, then select C/C++ - from the list control on the left, and under the category Preprocessor, you must add - the definition under the Preprocessor Definitions text box. -
  • To add a new library to the project, you must - select Properties from the Project menu, then select Linker - from the list control on the left, and under the category Input add the name of the new library in the - Additional Dependencies text box.
  • To add a new path where Microsoft Visual - Studio will look for the libraries, - you must select Options from the Tools menu, then - Project and Solutions from the list control on the left, VC++ - Directories, then choose Library Files in the Show directories - for combobox, and the add the path in the box below. -
  • To add a new path where Microsoft Visual - Studio will look for the include files, - you must select Options from the Tools menu, then - Project and Solutions from the list control on the left, VC++ - Directories, then choose Include Files in the Show directories - for combobox, and the add the path in the box below. -
-

 

-

Sample programs

-

A couple of sample programs are provided to show the usage of the WinPcap API. The -source of the examples, along with all the files needed to compile and run them, can be found in the Developer's -Pack.  For didactic purpose we provide here a browsable version of the -code: it is possible to click on the variables and functions to jump the -documentation of each of them. For a more complete set of samples, try WinPcap -Tutorial Section.

- - - - - - - - - - - - - - - -

Packet Dump

-

This program reads packets from a file or a network adapter, depending on -a command line switch. If a source is not provided, the program shows a list of -available adapters, one of which can be selected. Once the -capture is started, the program prints the timestamp, the length and the raw -contents of the packets. Once compiled, it will run on all the Win32 platforms. It -can be compiled to run on Unix as well (the makefile is provided).

- - - - -
/*
-
* Copyright (c) 1999 - 2005 NetGroup, Politecnico di Torino (Italy)
-
* Copyright (c) 2005 - 2006 CACE Technologies, Davis (California)
-
* All rights reserved.
-
*
-
* Redistribution and use in source and binary forms, with or without
-
* modification, are permitted provided that the following conditions
-
* are met:
-
*
-
* 1. Redistributions of source code must retain the above copyright
-
* notice, this list of conditions and the following disclaimer.
-
* 2. Redistributions in binary form must reproduce the above copyright
-
* notice, this list of conditions and the following disclaimer in the
-
* documentation and/or other materials provided with the distribution.
-
* 3. Neither the name of the Politecnico di Torino, CACE Technologies
-
* nor the names of its contributors may be used to endorse or promote
-
* products derived from this software without specific prior written
-
* permission.
-
*
-
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
*
-
*/
-
-
-
#include <stdlib.h>
-
#include <stdio.h>
-
-
//
-
// NOTE: remember to include WPCAP and HAVE_REMOTE among your
-
// preprocessor definitions.
-
//
-
-
#include <pcap.h>
-
-
#define LINE_LEN 16
-
-
int main(int argc, char **argv)
-
{
-
pcap_if_t *alldevs, *d;
-
pcap_t *fp;
-
u_int inum, i=0;
-
char errbuf[PCAP_ERRBUF_SIZE];
-
int res;
-
struct pcap_pkthdr *header;
-
const u_char *pkt_data;
-
-
printf("pktdump_ex: prints the packets of the network using WinPcap.\n");
-
printf(" Usage: pktdump_ex [-s source]\n\n"
-
" Examples:\n"
-
" pktdump_ex -s file://c:/temp/file.acp\n"
-
" pktdump_ex -s rpcap://\\Device\\NPF_{C8736017-F3C3-4373-94AC-9A34B7DAD998}\n\n");
-
-
if(argc < 3)
-
{
-
-
printf("\nNo adapter selected: printing the device list:\n");
-
/* The user didn't provide a packet source: Retrieve the local device list */
-
if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL, &alldevs, errbuf) == -1)
-
{
-
fprintf(stderr,"Error in pcap_findalldevs_ex: %s\n", errbuf);
-
return -1;
-
}
-
-
/* Print the list */
-
for(d=alldevs; d; d=d->next)
-
{
-
printf("%d. %s\n ", ++i, d->name);
-
-
if (d->description)
-
printf(" (%s)\n", d->description);
-
else
-
printf(" (No description available)\n");
-
}
-
-
if (i==0)
-
{
-
fprintf(stderr,"No interfaces found! Exiting.\n");
-
return -1;
-
}
-
-
printf("Enter the interface number (1-%d):",i);
-
scanf_s("%d", &inum);
-
-
if (inum < 1 || inum > i)
-
{
-
printf("\nInterface number out of range.\n");
-
-
/* Free the device list */
-
pcap_freealldevs(alldevs);
-
return -1;
-
}
-
-
/* Jump to the selected adapter */
-
for (d=alldevs, i=0; i< inum-1 ;d=d->next, i++);
-
-
/* Open the device */
-
if ( (fp= pcap_open(d->name,
-
100 /*snaplen*/,
-
PCAP_OPENFLAG_PROMISCUOUS /*flags*/,
-
20 /*read timeout*/,
-
NULL /* remote authentication */,
-
errbuf)
-
) == NULL)
-
{
-
fprintf(stderr,"\nError opening adapter\n");
-
return -1;
-
}
-
}
-
else
-
{
-
// Do not check for the switch type ('-s')
-
if ( (fp= pcap_open(argv[2],
-
100 /*snaplen*/,
-
PCAP_OPENFLAG_PROMISCUOUS /*flags*/,
-
20 /*read timeout*/,
-
NULL /* remote authentication */,
-
errbuf)
-
) == NULL)
-
{
-
fprintf(stderr,"\nError opening source: %s\n", errbuf);
-
return -1;
-
}
-
}
-
-
/* Read the packets */
-
while((res = pcap_next_ex( fp, &header, &pkt_data)) >= 0)
-
{
-
-
if(res == 0)
-
/* Timeout elapsed */
-
continue;
-
-
/* print pkt timestamp and pkt len */
-
printf("%ld:%ld (%ld)\n", header->ts.tv_sec, header->ts.tv_usec, header->len);
-
-
/* Print the packet */
-
for (i=1; (i < header->caplen + 1 ) ; i++)
-
{
-
printf("%.2x ", pkt_data[i-1]);
-
if ( (i % LINE_LEN) == 0) printf("\n");
-
}
-
-
printf("\n\n");
-
}
-
-
if(res == -1)
-
{
-
fprintf(stderr, "Error reading the packets: %s\n", pcap_geterr(fp));
-
return -1;
-
}
-
-
return 0;
-
}
-
- - - - - - - - - - -

Packet Filter

- -

This is a more complete example of libpcap usage. It shows, among other -things, how to create and set filters and how to save a capture to disk. It can -be compiled under Win32 or Unix (projects and makefiles are provided). -Pcap_filter (pf.exe) is a general-purpose packet filtering application: its -input parameters are a source of packets (it can be a physical interface or a -file), a filter and an output file. It takes packets from the source until -CTRL+C is pressed or the whole file is processed, applies the filter to the -incoming packets and saves them to the output file if they satisfy the filter. -Pcap_filter can be used to dump network data according to a particular filter, -but also to extract a set of packets from a previously saved file. The format of -both input and output files is the format used by libpcap, i.e. same of WinDump, tcpdump -and many other network tools.

- - - - -
/*
-
* Copyright (c) 1999 - 2005 NetGroup, Politecnico di Torino (Italy)
-
* Copyright (c) 2005 - 2006 CACE Technologies, Davis (California)
-
* All rights reserved.
-
*
-
* Redistribution and use in source and binary forms, with or without
-
* modification, are permitted provided that the following conditions
-
* are met:
-
*
-
* 1. Redistributions of source code must retain the above copyright
-
* notice, this list of conditions and the following disclaimer.
-
* 2. Redistributions in binary form must reproduce the above copyright
-
* notice, this list of conditions and the following disclaimer in the
-
* documentation and/or other materials provided with the distribution.
-
* 3. Neither the name of the Politecnico di Torino, CACE Technologies
-
* nor the names of its contributors may be used to endorse or promote
-
* products derived from this software without specific prior written
-
* permission.
-
*
-
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
*
-
*/
-
-
-
#include <stdlib.h>
-
#include <stdio.h>
-
-
#include <pcap.h>
-
-
#define MAX_PRINT 80
-
#define MAX_LINE 16
-
-
-
void usage();
-
-
-
void main(int argc, char **argv)
-
{
-
pcap_t *fp;
-
char errbuf[PCAP_ERRBUF_SIZE];
-
char *source=NULL;
-
char *ofilename=NULL;
-
char *filter=NULL;
-
int i;
-
pcap_dumper_t *dumpfile;
-
struct bpf_program fcode;
-
bpf_u_int32 NetMask;
-
int res;
-
struct pcap_pkthdr *header;
-
const u_char *pkt_data;
-
-
if (argc == 1)
-
{
-
usage();
-
return;
-
}
-
-
for(i=1;i < argc; i+= 2)
-
{
-
-
switch (argv[i] [1])
-
{
-
case 's':
-
{
-
source=argv[i+1];
-
};
-
break;
-
-
case 'o':
-
{
-
ofilename=argv[i+1];
-
};
-
break;
-
-
case 'f':
-
{
-
filter=argv[i+1];
-
};
-
break;
-
}
-
}
-
-
// open a capture from the network
-
if (source != NULL)
-
{
-
if ( (fp= pcap_open(source,
-
1514 /*snaplen*/,
-
PCAP_OPENFLAG_PROMISCUOUS /*flags*/,
-
20 /*read timeout*/,
-
NULL /* remote authentication */,
-
errbuf)
-
) == NULL)
-
{
-
fprintf(stderr,"\nUnable to open the adapter.\n");
-
return;
-
}
-
}
-
-
else usage();
-
-
if (filter != NULL)
-
{
-
// We should loop through the adapters returned by the pcap_findalldevs_ex()
-
// in order to locate the correct one.
-
//
-
// Let's do things simpler: we suppose to be in a C class network ;-)
-
NetMask=0xffffff;
-
-
//compile the filter
-
if(pcap_compile(fp, &fcode, filter, 1, NetMask) < 0)
-
{
-
fprintf(stderr,"\nError compiling filter: wrong syntax.\n");
-
return;
-
}
-
-
//set the filter
-
if(pcap_setfilter(fp, &fcode)<0)
-
{
-
fprintf(stderr,"\nError setting the filter\n");
-
return;
-
}
-
-
}
-
-
//open the dump file
-
if (ofilename != NULL)
-
{
-
dumpfile= pcap_dump_open(fp, ofilename);
-
-
if (dumpfile == NULL)
-
{
-
fprintf(stderr,"\nError opening output file\n");
-
return;
-
}
-
}
-
else usage();
-
-
//start the capture
-
while((res = pcap_next_ex( fp, &header, &pkt_data)) >= 0)
-
{
-
-
if(res == 0)
-
/* Timeout elapsed */
-
continue;
-
-
//save the packet on the dump file
-
pcap_dump((unsigned char *) dumpfile, header, pkt_data);
-
-
}
-
}
-
-
-
void usage()
-
{
-
-
printf("\npf - Generic Packet Filter.\n");
-
printf("\nUsage:\npf -s source -o output_file_name [-f filter_string]\n\n");
-
exit(0);
-
}
-
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/incs_2pcap_8h.html b/libs/WinPcap-413-173-b4/docs/html/incs_2pcap_8h.html deleted file mode 100644 index 9f1147ae..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/incs_2pcap_8h.html +++ /dev/null @@ -1,125 +0,0 @@ - - - - - - -WinPcap: pcap.h File Reference - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - - - -
-
- -
-
incs/pcap.h File Reference
-
-
-
#include <pcap-stdinc.h>
-#include <net/bpf.h>
-#include <stdio.h>
-
-

Go to the source code of this file.

- - - - - - - - - - - - - - - - - -

-Data Structures

struct  pcap_file_header
 Header of a libpcap dump file. More...
 
struct  pcap_pkthdr
 Header of a packet in the dump file. More...
 
struct  pcap_stat
 Structure that keeps statistical values on an interface. More...
 
struct  pcap_if
 Item in a list of interfaces, used by pcap_findalldevs(). More...
 
struct  pcap_addr
 Representation of an interface address, used by pcap_findalldevs(). More...
 
- - - - - - - - - - - - - -

-Macros

#define PCAP_VERSION_MAJOR   2
 Major libpcap dump file version. More...
 
#define PCAP_VERSION_MINOR   4
 Minor libpcap dump file version. More...
 
#define PCAP_ERRBUF_SIZE   256
 Size to use when allocating the buffer that contains the libpcap errors. More...
 
#define PCAP_IF_LOOPBACK   0x00000001
 interface is loopback More...
 
- - - - - - - - - - - - - - - - - - - -

-Typedefs

typedef int bpf_int32
 32-bit integer More...
 
typedef u_int bpf_u_int32
 32-bit unsigned integer More...
 
typedef struct pcap pcap_t
 Descriptor of an open capture instance. This structure is opaque to the user, that handles its content through the functions provided by wpcap.dll. More...
 
typedef struct pcap_dumper pcap_dumper_t
 libpcap savefile descriptor. More...
 
typedef struct pcap_if pcap_if_t
 Item in a list of interfaces, see pcap_if. More...
 
typedef struct pcap_addr pcap_addr_t
 Representation of an interface address, see pcap_addr. More...
 
-
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/incs_2pcap_8h_source.html b/libs/WinPcap-413-173-b4/docs/html/incs_2pcap_8h_source.html deleted file mode 100644 index 8be0cb90..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/incs_2pcap_8h_source.html +++ /dev/null @@ -1,216 +0,0 @@ - - - - - - -WinPcap: pcap.h Source File - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - - - -
-
-
-
incs/pcap.h
-
-
-Go to the documentation of this file.
1 /* -*- Mode: c; tab-width: 8; indent-tabs-mode: 1; c-basic-offset: 8; -*- */
-
2 /*
-
3  * Copyright (c) 1993, 1994, 1995, 1996, 1997
-
4  * The Regents of the University of California. All rights reserved.
-
5  *
-
6  * Redistribution and use in source and binary forms, with or without
-
7  * modification, are permitted provided that the following conditions
-
8  * are met:
-
9  * 1. Redistributions of source code must retain the above copyright
-
10  * notice, this list of conditions and the following disclaimer.
-
11  * 2. Redistributions in binary form must reproduce the above copyright
-
12  * notice, this list of conditions and the following disclaimer in the
-
13  * documentation and/or other materials provided with the distribution.
-
14  * 3. All advertising materials mentioning features or use of this software
-
15  * must display the following acknowledgement:
-
16  * This product includes software developed by the Computer Systems
-
17  * Engineering Group at Lawrence Berkeley Laboratory.
-
18  * 4. Neither the name of the University nor of the Laboratory may be used
-
19  * to endorse or promote products derived from this software without
-
20  * specific prior written permission.
-
21  *
-
22  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
-
23  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-
24  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-
25  * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
-
26  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-
27  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-
28  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-
29  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-
30  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-
31  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-
32  * SUCH DAMAGE.
-
33  *
-
34  * @(#) $Header: /usr/cvsroot_private/winpcap/dox/libpcap/incs/pcap.h,v 1.5 2005/11/30 21:48:23 gianlucav Exp $ (LBL)
-
35  */
-
36 
-
37 
-
44 #ifndef lib_pcap_h
-
45 #define lib_pcap_h
-
46 
-
47 #include <pcap-stdinc.h>
-
48 #include <net/bpf.h>
-
49 
-
50 #include <stdio.h>
-
51 
-
52 #ifdef __cplusplus
-
53 extern "C" {
-
54 #endif
-
55 
-
56 #define PCAP_VERSION_MAJOR 2
-
57 #define PCAP_VERSION_MINOR 4
-
58 
-
59 #define PCAP_ERRBUF_SIZE 256
-
60 
-
61 
-
65 #if BPF_RELEASE - 0 < 199406
-
66 typedef int bpf_int32;
-
67 typedef u_int bpf_u_int32;
-
68 #endif
-
69 
-
70 typedef struct pcap pcap_t;
-
71 typedef struct pcap_dumper pcap_dumper_t;
-
72 typedef struct pcap_if pcap_if_t;
-
73 typedef struct pcap_addr pcap_addr_t;
-
74 
- -
111  bpf_u_int32 magic;
-
112  u_short version_major;
-
113  u_short version_minor;
-
114  bpf_int32 thiszone;
-
115  bpf_u_int32 sigfigs;
-
116  bpf_u_int32 snaplen;
-
117  bpf_u_int32 linktype;
-
118 };
-
119 
-
126 struct pcap_pkthdr {
-
127  struct timeval ts;
-
128  bpf_u_int32 caplen;
-
129  bpf_u_int32 len;
-
130 };
-
131 
-
136 struct pcap_stat {
-
137  u_int ps_recv;
-
138  u_int ps_drop;
-
139  u_int ps_ifdrop;
-
140 #ifdef _WIN32
-
141  u_int bs_capt;
-
142 #endif /* _WIN32 */
-
143 };
-
144 
-
148 struct pcap_if {
-
149  struct pcap_if *next;
-
150  char *name;
-
151  char *description;
- -
153  u_int flags;
-
154 };
-
155 
-
156 #define PCAP_IF_LOOPBACK 0x00000001
-
157 
-
158 
-
161 struct pcap_addr {
-
162  struct pcap_addr *next;
-
163  struct sockaddr *addr;
-
164  struct sockaddr *netmask;
-
165  struct sockaddr *broadaddr;
-
166  struct sockaddr *dstaddr;
-
167 };
-
168 
-
169 #if defined(_WIN32)
-
170 
-
171 
-
172 #define MODE_CAPT 0
-
173 #define MODE_STAT 1
-
174 
-
175 #endif /* _WIN32 */
-
176 
-
177 #ifdef __cplusplus
-
178 }
-
179 #endif
-
180 
-
181 #endif
-
182 
-
u_int flags
PCAP_IF_ interface flags. Currently the only possible flag is PCAP_IF_LOOPBACK, that is set if the in...
Definition: incs/pcap.h:153
-
bpf_u_int32 sigfigs
accuracy of timestamps
Definition: incs/pcap.h:115
-
Header of a packet in the dump file.
Definition: incs/pcap.h:126
-
bpf_int32 thiszone
gmt to local correction
Definition: incs/pcap.h:114
-
char * name
a pointer to a string giving a name for the device to pass to pcap_open_live()
Definition: incs/pcap.h:150
-
bpf_u_int32 magic
Definition: incs/pcap.h:111
-
struct pcap pcap_t
Descriptor of an open capture instance. This structure is opaque to the user, that handles its conten...
Definition: incs/pcap.h:70
-
struct sockaddr * broadaddr
if not NULL, a pointer to a struct sockaddr that contains the broadcast address corre� sponding to th...
Definition: incs/pcap.h:165
-
bpf_u_int32 caplen
length of portion present
Definition: incs/pcap.h:128
-
struct timeval ts
time stamp
Definition: incs/pcap.h:127
-
struct pcap_addr * next
if not NULL, a pointer to the next element in the list; NULL for the last element of the list ...
Definition: incs/pcap.h:162
-
u_short version_major
Libpcap major version.
Definition: incs/pcap.h:112
-
Structure that keeps statistical values on an interface.
Definition: incs/pcap.h:136
-
bpf_u_int32 len
length this packet (off wire)
Definition: incs/pcap.h:129
-
u_int ps_recv
number of packets transited on the network
Definition: incs/pcap.h:137
-
int bpf_int32
32-bit integer
Definition: incs/pcap.h:66
-
struct sockaddr * dstaddr
if not NULL, a pointer to a struct sockaddr that contains the destination address corre� sponding to ...
Definition: incs/pcap.h:166
-
bpf_u_int32 linktype
data link type (LINKTYPE_*)
Definition: incs/pcap.h:117
-
struct pcap_if * next
if not NULL, a pointer to the next element in the list; NULL for the last element of the list ...
Definition: incs/pcap.h:149
-
Representation of an interface address, used by pcap_findalldevs().
Definition: incs/pcap.h:161
-
u_int ps_drop
number of packets dropped by the driver
Definition: incs/pcap.h:138
-
char * description
if not NULL, a pointer to a string giving a human-readable description of the device ...
Definition: incs/pcap.h:151
-
struct sockaddr * netmask
if not NULL, a pointer to a struct sockaddr that contains the netmask corresponding to the address po...
Definition: incs/pcap.h:164
-
struct pcap_dumper pcap_dumper_t
libpcap savefile descriptor.
Definition: incs/pcap.h:71
-
u_short version_minor
Libpcap minor version.
Definition: incs/pcap.h:113
-
struct pcap_addr * addresses
a pointer to the first element of a list of addresses for the interface
Definition: incs/pcap.h:152
-
Item in a list of interfaces, used by pcap_findalldevs().
Definition: incs/pcap.h:148
-
u_int ps_ifdrop
drops by interface, not yet supported
Definition: incs/pcap.h:139
-
bpf_u_int32 snaplen
max length saved portion of each pkt
Definition: incs/pcap.h:116
-
u_int bpf_u_int32
32-bit unsigned integer
Definition: incs/pcap.h:67
-
Header of a libpcap dump file.
Definition: incs/pcap.h:110
-
struct sockaddr * addr
a pointer to a struct sockaddr containing an address
Definition: incs/pcap.h:163
-
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/index.hhc b/libs/WinPcap-413-173-b4/docs/html/index.hhc deleted file mode 100644 index c5d19469..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/index.hhc +++ /dev/null @@ -1,1353 +0,0 @@ - - - - - -
    -
  • -
  • -
  • -
      -
    • -
        -
      • -
          -
        • -
            -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          -
        • -
            -
          • -
              -
            • -
            • -
            • -
            • -
            • -
            • -
            • -
            -
          • -
              -
            • -
            • -
            • -
            -
          • -
              -
            • -
            • -
            • -
            -
          • -
              -
            • -
            • -
            • -
            • -
            -
          • -
              -
            • -
            • -
            • -
            • -
            • -
            -
          • -
              -
            • -
            • -
            -
          • -
              -
            • -
            • -
            • -
            • -
            • -
            • -
            • -
            • -
            • -
            • -
            • -
            -
          • -
              -
            • -
            • -
            • -
            • -
            • -
            • -
            • -
            • -
            • -
            • -
            • -
            • -
            • -
            • -
            • -
            • -
            • -
            • -
            • -
            • -
            • -
            • -
            • -
            • -
            • -
            • -
            • -
            • -
            • -
            • -
            • -
            • -
            • -
            • -
            • -
            • -
            • -
            • -
            • -
            • -
            • -
            • -
            • -
            • -
            • -
            • -
            • -
            • -
            • -
            • -
            • -
            -
          • -
              -
            • -
            • -
            -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
              -
            • -
            • -
            • -
            -
          • -
          • -
          • -
          • -
          • -
          -
        • -
            -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          -
        • -
            -
          • -
              -
            • -
            • -
            • -
            • -
            -
          • -
              -
            • -
            • -
            -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          -
        -
      • -
          -
        -
      • -
          -
        -
      -
    • -
        -
      • -
          -
        • -
            -
          • -
          • -
          • -
          • -
          • -
          • -
          • -
          -
        • -
            -
          • -
          • -
          • -
          -
        • -
            -
          • -
          • -
          • -
          -
        • -
            -
          • -
          • -
          • -
          • -
          • -
          -
        • -
            -
          • -
          • -
          • -
          • -
          • -
          -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        -
      • -
          -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        -
      • -
          -
        • -
            -
          -
        • -
            -
          -
        • -
            -
          -
        • -
            -
          -
        • -
            -
          -
        • -
            -
          -
        • -
            -
          -
        • -
            -
          -
        • -
            -
          -
        -
      • -
          -
        -
      • -
          -
        -
      -
    • -
        -
      • -
          -
        • -
            -
          -
        • -
            -
          -
        • -
            -
          -
        • -
            -
          -
        • -
            -
          -
        -
      • -
          -
        -
      • -
          -
        -
      • -
          -
        • -
            -
          • -
          • -
          • -
          -
        • -
            -
          • -
          • -
          • -
          • -
          -
        • -
            -
          • -
          • -
          • -
          • -
          • -
          -
        • -
            -
          • -
          • -
          • -
          • -
          -
        • -
            -
          • -
          • -
          -
        • -
            -
          • -
          • -
          • -
          • -
          -
        • -
            -
          • -
          • -
          • -
          -
        • -
            -
          • -
          • -
          • -
          • -
          • -
          -
        • -
            -
          • -
          • -
          • -
          -
        • -
            -
          • -
          • -
          • -
          • -
          -
        • -
            -
          • -
          • -
          • -
          • -
          -
        • -
            -
          • -
          • -
          • -
          • -
          -
        • -
            -
          • -
          • -
          • -
          • -
          -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        -
      -
    -
  • -
      -
    • -
        -
      • -
          -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        -
      • -
          -
        • -
        • -
        -
      • -
          -
        • -
        • -
        • -
        • -
        -
      • -
          -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        -
      • -
          -
        • -
        • -
        • -
        -
      • -
          -
        • -
        • -
        • -
        • -
        • -
        -
      • -
          -
        • -
        • -
        • -
        -
      • -
          -
        • -
        • -
        • -
        • -
        -
      • -
          -
        • -
        • -
        -
      • -
          -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        -
      • -
          -
        • -
        • -
        -
      • -
          -
        • -
        • -
        • -
        • -
        • -
        -
      • -
          -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        -
      • -
          -
        • -
        • -
        • -
        • -
        • -
        -
      • -
          -
        • -
        • -
        • -
        -
      • -
          -
        • -
        • -
        • -
        -
      • -
          -
        • -
        • -
        • -
        -
      • -
          -
        • -
        • -
        • -
        • -
        -
      • -
          -
        • -
        • -
        • -
        -
      • -
          -
        • -
        • -
        • -
        • -
        -
      • -
          -
        • -
        • -
        • -
        • -
        • -
        -
      • -
          -
        • -
        • -
        • -
        • -
        -
      • -
          -
        • -
        • -
        • -
        • -
        -
      • -
          -
        • -
        • -
        -
      • -
          -
        • -
        • -
        • -
        • -
        • -
        -
      • -
          -
        • -
        • -
        • -
        • -
        -
      • -
          -
        • -
        • -
        • -
        -
      • -
          -
        • -
        • -
        • -
        • -
        -
      • -
          -
        • -
        • -
        • -
        • -
        -
      • -
          -
        • -
        • -
        • -
        -
      -
    • -
        -
      • -
      • -
      -
    -
  • -
      -
    • -
        -
      • -
          -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        -
      • -
          -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        -
      • -
          -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
            -
          • -
          • -
          • -
          -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        -
      • -
          -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        -
      • -
          -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        -
      • -
          -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        -
      • -
          -
        • -
            -
          • -
          • -
          • -
          -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        -
      • -
      -
    • -
        -
      • -
          -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        • -
        -
      • -
      • -
      • -
      • -
      • -
      • -
      -
    -
- - diff --git a/libs/WinPcap-413-173-b4/docs/html/ioctls_8h.html b/libs/WinPcap-413-173-b4/docs/html/ioctls_8h.html deleted file mode 100644 index 941ab60f..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/ioctls_8h.html +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - -WinPcap: ioctls.h File Reference - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - - - -
-
- -
-
ioctls.h File Reference
-
-
- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Macros

#define BIOCSETBUFFERSIZE   9592
 IOCTL code: set kernel buffer size. More...
 
#define BIOCSETF   9030
 IOCTL code: set packet filtering program. More...
 
#define BIOCGSTATS   9031
 IOCTL code: get the capture stats. More...
 
#define BIOCSRTIMEOUT   7416
 IOCTL code: set the read timeout. More...
 
#define BIOCSMODE   7412
 IOCTL code: set working mode. More...
 
#define BIOCSWRITEREP   7413
 IOCTL code: set number of physical repetions of every packet written by the app. More...
 
#define BIOCSMINTOCOPY   7414
 IOCTL code: set minimum amount of data in the kernel buffer that unlocks a read call. More...
 
#define BIOCSETOID   0x80000000
 IOCTL code: set an OID value. More...
 
#define BIOCQUERYOID   0x80000004
 IOCTL code: get an OID value. More...
 
#define BIOCSETDUMPFILENAME   9029
 IOCTL code: set the name of a the file used by kernel dump mode. More...
 
#define BIOCGEVNAME   7415
 IOCTL code: get the name of the event that the driver signals when some data is present in the buffer. More...
 
#define BIOCSENDPACKETSNOSYNC   9032
 IOCTL code: Send a buffer containing multiple packets to the network, ignoring the timestamps. More...
 
#define BIOCSENDPACKETSSYNC   9033
 IOCTL code: Send a buffer containing multiple packets to the network, considering the timestamps. More...
 
#define BIOCSETDUMPLIMITS   9034
 IOCTL code: Set the dump file limits. More...
 
#define BIOCISDUMPENDED   7411
 IOCTL code: Get the status of the kernel dump process. More...
 
#define BIOCISETLOBBEH   7410
 IOCTL code: set the loopback behavior. More...
 
#define BIOCSETEVENTHANDLE   7920
 This IOCTL passes the read event HANDLE allocated by the user (packet.dll) to kernel level. More...
 
-
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/ioctls_8h_source.html b/libs/WinPcap-413-173-b4/docs/html/ioctls_8h_source.html deleted file mode 100644 index d853c453..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/ioctls_8h_source.html +++ /dev/null @@ -1,134 +0,0 @@ - - - - - - -WinPcap: ioctls.h Source File - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - - - -
-
-
-
ioctls.h
-
-
-Go to the documentation of this file.
1 /*
-
2  * Copyright (c) 2007 CACE Technologies, Davis (California)
-
3  * All rights reserved.
-
4  *
-
5  * Redistribution and use in source and binary forms, with or without
-
6  * modification, are permitted provided that the following conditions
-
7  * are met:
-
8  *
-
9  * 1. Redistributions of source code must retain the above copyright
-
10  * notice, this list of conditions and the following disclaimer.
-
11  * 2. Redistributions in binary form must reproduce the above copyright
-
12  * notice, this list of conditions and the following disclaimer in the
-
13  * documentation and/or other materials provided with the distribution.
-
14  * 3. Neither the name of CACE Technologies nor the names of its
-
15  * contributors may be used to endorse or promote products derived from
-
16  * this software without specific prior written permission.
-
17  *
-
18  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-
19  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-
20  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-
21  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-
22  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-
23  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-
24  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-
25  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-
26  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-
27  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-
28  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
29  *
-
30  */
-
31 
-
32 #ifndef __NPF_IOCTLS_H__
-
33 #define __NPF_IOCTLS_H__
-
34 
-
35 /***************************/
-
36 /* IOCTLs */
-
37 /***************************/
-
38 
-
55 #define BIOCSETBUFFERSIZE 9592
-
56 
-
67 #define BIOCSETF 9030
-
68 
-
75 #define BIOCGSTATS 9031
-
76 
-
82 #define BIOCSRTIMEOUT 7416
-
83 
-
91 #define BIOCSMODE 7412
-
92 
-
99 #define BIOCSWRITEREP 7413
-
100 
-
106 #define BIOCSMINTOCOPY 7414
-
107 
-
113 #define BIOCSETOID 0x80000000
-
114 
-
120 #define BIOCQUERYOID 0x80000004
-
121 
-
129 #define BIOCSETDUMPFILENAME 9029
-
130 
-
137 #define BIOCGEVNAME 7415
-
138 
-
146 #define BIOCSENDPACKETSNOSYNC 9032
-
147 
-
156 #define BIOCSENDPACKETSSYNC 9033
-
157 
-
164 #define BIOCSETDUMPLIMITS 9034
-
165 
-
172 #define BIOCISDUMPENDED 7411
-
173 
-
179 #define BIOCISETLOBBEH 7410
-
180 
-
190 #define BIOCSETEVENTHANDLE 7920
-
191 
-
203 #endif //__NPF_IOCTLS_H__
-
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/jitter_8h.html b/libs/WinPcap-413-173-b4/docs/html/jitter_8h.html deleted file mode 100644 index 22a16f3c..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/jitter_8h.html +++ /dev/null @@ -1,283 +0,0 @@ - - - - - - -WinPcap: jitter.h File Reference - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - - - -
-
- -
-
jitter.h File Reference
-
-
- -

Go to the source code of this file.

- - - - - - - - -

-Data Structures

struct  binary_stream
 A stream of X86 binary code. More...
 
struct  JIT_BPF_Filter
 Structure describing a x86 filtering program created by the jitter. More...
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Macros

#define EAX   0
 
#define ECX   1
 
#define EDX   2
 
#define EBX   3
 
#define ESP   4
 
#define EBP   5
 
#define ESI   6
 
#define EDI   7
 
#define AX   0
 
#define CX   1
 
#define DX   2
 
#define BX   3
 
#define SP   4
 
#define BP   5
 
#define SI   6
 
#define DI   7
 
#define AL   0
 
#define CL   1
 
#define DL   2
 
#define BL   3
 
#define MOVid(r32, i32)   emitm(&stream, 11 << 4 | 1 << 3 | r32 & 0x7, 1); emitm(&stream, i32, 4);
 mov r32,i32 More...
 
#define MOVrd(dr32, sr32)   emitm(&stream, 8 << 4 | 3 | 1 << 3, 1); emitm(&stream, 3 << 6 | (dr32 & 0x7) << 3 | sr32 & 0x7, 1);
 mov dr32,sr32 More...
 
#define MOVodd(dr32, sr32, off)
 mov dr32,sr32[off] More...
 
#define MOVobd(dr32, sr32, or32)
 mov dr32,sr32[or32] More...
 
#define MOVobw(dr32, sr32, or32)
 mov dr16,sr32[or32] More...
 
#define MOVobb(dr8, sr32, or32)
 mov dr8,sr32[or32] More...
 
#define MOVomd(dr32, or32, sr32)
 mov [dr32][or32],sr32 More...
 
#define BSWAP(dr32)
 bswap dr32 More...
 
#define SWAP_AX()
 xchg al,ah More...
 
#define PUSH(r32)   emitm(&stream, 5 << 4 | 0 << 3 | r32 & 0x7, 1);
 push r32 More...
 
#define POP(r32)   emitm(&stream, 5 << 4 | 1 << 3 | r32 & 0x7, 1);
 pop r32 More...
 
#define RET()   emitm(&stream, 12 << 4 | 0 << 3 | 3, 1);
 ret More...
 
#define ADDrd(dr32, sr32)
 add dr32,sr32 More...
 
#define ADD_EAXi(i32)
 add eax,i32 More...
 
#define ADDid(r32, i32)
 add r32,i32 More...
 
#define ADDib(r32, i8)
 add r32,i8 More...
 
#define SUBrd(dr32, sr32)
 sub dr32,sr32 More...
 
#define SUB_EAXi(i32)
 sub eax,i32 More...
 
#define MULrd(r32)
 mul r32 More...
 
#define DIVrd(r32)
 div r32 More...
 
#define ANDib(r8, i8)
 and r8,i8 More...
 
#define ANDid(r32, i32)
 and r32,i32 More...
 
#define ANDrd(dr32, sr32)
 and dr32,sr32 More...
 
#define ORrd(dr32, sr32)
 or dr32,sr32 More...
 
#define ORid(r32, i32)
 or r32,i32 More...
 
#define SHLib(r32, i8)
 shl r32,i8 More...
 
#define SHL_CLrb(dr32)
 shl dr32,cl More...
 
#define SHRib(r32, i8)
 shr r32,i8 More...
 
#define SHR_CLrb(dr32)
 shr dr32,cl More...
 
#define NEGd(r32)
 neg r32 More...
 
#define CMPodd(dr32, sr32, off)
 cmp dr32,sr32[off] More...
 
#define CMPrd(dr32, sr32)
 cmp dr32,sr32 More...
 
#define CMPid(dr32, i32)
 cmp dr32,i32 More...
 
#define JNEb(off8)
 jne off32 More...
 
#define JAb(off8)
 ja off32 More...
 
#define JE(off32)
 je off32 More...
 
#define JLE(off32)
 jle off32 More...
 
#define JLEb(off8)
 jle off8 More...
 
#define JBEb(off8)
 jbe off8 More...
 
#define JBb(off8)
 jb off8 More...
 
#define JA(off32)
 ja off32 More...
 
#define JAE(off32)
 jae off32 More...
 
#define JG(off32)
 jg off32 More...
 
#define JGE(off32)
 jge off32 More...
 
#define JMP(off32)
 jmp off32 More...
 
- - - - - - - - - - - - - -

-Typedefs

typedef struct binary_stream binary_stream
 A stream of X86 binary code. More...
 
typedef UINT(__cdecl * BPF_filter_function )(PVOID *, ULONG, UINT)
 Prototype of a filtering function created by the jitter. More...
 
typedef void(* emit_func )(binary_stream *stream, ULONG value, UINT n)
 Prototype of the emit functions. More...
 
typedef struct JIT_BPF_Filter JIT_BPF_Filter
 Structure describing a x86 filtering program created by the jitter. More...
 
- - - - - - - - - - -

-Functions

JIT_BPF_FilterBPF_jitter (struct bpf_insn *fp, INT nins)
 BPF jitter, builds an x86 function from a BPF program. More...
 
BPF_filter_function BPFtoX86 (struct bpf_insn *ins, UINT nins, INT *mem)
 Translates a set of BPF instructions in a set of x86 ones. More...
 
void BPF_Destroy_JIT_Filter (JIT_BPF_Filter *Filter)
 Deletes a filtering function that was previously created by BPF_jitter(). More...
 
-
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/jitter_8h_source.html b/libs/WinPcap-413-173-b4/docs/html/jitter_8h_source.html deleted file mode 100644 index 2855b3a2..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/jitter_8h_source.html +++ /dev/null @@ -1,377 +0,0 @@ - - - - - - -WinPcap: jitter.h Source File - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - - - -
-
-
-
jitter.h
-
-
-Go to the documentation of this file.
1 /*
-
2  * Copyright (c) 2002 - 2005 NetGroup, Politecnico di Torino (Italy)
-
3  * Copyright (c) 2005 - 2007 CACE Technologies, Davis (California)
-
4  * All rights reserved.
-
5  *
-
6  * Redistribution and use in source and binary forms, with or without
-
7  * modification, are permitted provided that the following conditions
-
8  * are met:
-
9  *
-
10  * 1. Redistributions of source code must retain the above copyright
-
11  * notice, this list of conditions and the following disclaimer.
-
12  * 2. Redistributions in binary form must reproduce the above copyright
-
13  * notice, this list of conditions and the following disclaimer in the
-
14  * documentation and/or other materials provided with the distribution.
-
15  * 3. Neither the name of the Politecnico di Torino, CACE Technologies
-
16  * nor the names of its contributors may be used to endorse or promote
-
17  * products derived from this software without specific prior written
-
18  * permission.
-
19  *
-
20  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-
21  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-
22  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-
23  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-
24  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-
25  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-
26  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-
27  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-
28  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-
29  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-
30  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
31  *
-
32  */
-
33 
-
42 //
-
43 // Registers
-
44 //
-
45 #define EAX 0
-
46 #define ECX 1
-
47 #define EDX 2
-
48 #define EBX 3
-
49 #define ESP 4
-
50 #define EBP 5
-
51 #define ESI 6
-
52 #define EDI 7
-
53 
-
54 #define AX 0
-
55 #define CX 1
-
56 #define DX 2
-
57 #define BX 3
-
58 #define SP 4
-
59 #define BP 5
-
60 #define SI 6
-
61 #define DI 7
-
62 
-
63 #define AL 0
-
64 #define CL 1
-
65 #define DL 2
-
66 #define BL 3
-
67 
-
69 typedef struct binary_stream{
-
70  INT cur_ip;
-
71  INT bpf_pc;
-
72  PCHAR ibuf;
-
73  PUINT refs;
- -
75 
-
76 
-
82 typedef UINT (__cdecl *BPF_filter_function)( PVOID *, ULONG, UINT);
-
83 
-
92 typedef void (*emit_func)(binary_stream *stream, ULONG value, UINT n);
-
93 
-
95 typedef struct JIT_BPF_Filter{
- -
97  PINT mem;
-
98 }
- -
100 
-
101 
-
102 
-
103 
-
104 /**************************/
-
105 /* X86 INSTRUCTION MACROS */
-
106 /**************************/
-
107 
-
109 #define MOVid(r32, i32) \
-
110  emitm(&stream, 11 << 4 | 1 << 3 | r32 & 0x7, 1); emitm(&stream, i32, 4);
-
111 
-
113 #define MOVrd(dr32, sr32) \
-
114  emitm(&stream, 8 << 4 | 3 | 1 << 3, 1); emitm(&stream, 3 << 6 | (dr32 & 0x7) << 3 | sr32 & 0x7, 1);
-
115 
-
117 #define MOVodd(dr32, sr32, off) \
-
118  emitm(&stream, 8 << 4 | 3 | 1 << 3, 1); \
-
119  emitm(&stream, 1 << 6 | (dr32 & 0x7) << 3 | sr32 & 0x7, 1);\
-
120  emitm(&stream, off, 1);
-
121 
-
123 #define MOVobd(dr32, sr32, or32) \
-
124  emitm(&stream, 8 << 4 | 3 | 1 << 3, 1); \
-
125  emitm(&stream, (dr32 & 0x7) << 3 | 4 , 1);\
-
126  emitm(&stream, (or32 & 0x7) << 3 | (sr32 & 0x7) , 1);
-
127 
-
129 #define MOVobw(dr32, sr32, or32) \
-
130  emitm(&stream, 0x66, 1); \
-
131  emitm(&stream, 8 << 4 | 3 | 1 << 3, 1); \
-
132  emitm(&stream, (dr32 & 0x7) << 3 | 4 , 1);\
-
133  emitm(&stream, (or32 & 0x7) << 3 | (sr32 & 0x7) , 1);
-
134 
-
136 #define MOVobb(dr8, sr32, or32) \
-
137  emitm(&stream, 0x8a, 1); \
-
138  emitm(&stream, (dr8 & 0x7) << 3 | 4 , 1);\
-
139  emitm(&stream, (or32 & 0x7) << 3 | (sr32 & 0x7) , 1);
-
140 
-
142 #define MOVomd(dr32, or32, sr32) \
-
143  emitm(&stream, 0x89, 1); \
-
144  emitm(&stream, (sr32 & 0x7) << 3 | 4 , 1);\
-
145  emitm(&stream, (or32 & 0x7) << 3 | (dr32 & 0x7) , 1);
-
146 
-
148 #define BSWAP(dr32) \
-
149  emitm(&stream, 0xf, 1); \
-
150  emitm(&stream, 0x19 << 3 | dr32 , 1);
-
151 
-
153 #define SWAP_AX() \
-
154  emitm(&stream, 0x86, 1); \
-
155  emitm(&stream, 0xc4 , 1);
-
156 
-
158 #define PUSH(r32) \
-
159  emitm(&stream, 5 << 4 | 0 << 3 | r32 & 0x7, 1);
-
160 
-
162 #define POP(r32) \
-
163  emitm(&stream, 5 << 4 | 1 << 3 | r32 & 0x7, 1);
-
164 
-
166 #define RET() \
-
167  emitm(&stream, 12 << 4 | 0 << 3 | 3, 1);
-
168 
-
170 #define ADDrd(dr32, sr32) \
-
171  emitm(&stream, 0x03, 1);\
-
172  emitm(&stream, 3 << 6 | (dr32 & 0x7) << 3 | (sr32 & 0x7), 1);
-
173 
-
175 #define ADD_EAXi(i32) \
-
176  emitm(&stream, 0x05, 1);\
-
177  emitm(&stream, i32, 4);
-
178 
-
180 #define ADDid(r32, i32) \
-
181  emitm(&stream, 0x81, 1);\
-
182  emitm(&stream, 24 << 3 | r32, 1);\
-
183  emitm(&stream, i32, 4);
-
184 
-
186 #define ADDib(r32, i8) \
-
187  emitm(&stream, 0x83, 1);\
-
188  emitm(&stream, 24 << 3 | r32, 1);\
-
189  emitm(&stream, i8, 1);
-
190 
-
192 #define SUBrd(dr32, sr32) \
-
193  emitm(&stream, 0x2b, 1);\
-
194  emitm(&stream, 3 << 6 | (dr32 & 0x7) << 3 | (sr32 & 0x7), 1);
-
195 
-
197 #define SUB_EAXi(i32) \
-
198  emitm(&stream, 0x2d, 1);\
-
199  emitm(&stream, i32, 4);
-
200 
-
202 #define MULrd(r32) \
-
203  emitm(&stream, 0xf7, 1);\
-
204  emitm(&stream, 7 << 5 | (r32 & 0x7), 1);
-
205 
-
207 #define DIVrd(r32) \
-
208  emitm(&stream, 0xf7, 1);\
-
209  emitm(&stream, 15 << 4 | (r32 & 0x7), 1);
-
210 
-
212 #define ANDib(r8, i8) \
-
213  emitm(&stream, 0x80, 1);\
-
214  emitm(&stream, 7 << 5 | r8, 1);\
-
215  emitm(&stream, i8, 1);
-
216 
-
218 #define ANDid(r32, i32) \
-
219  if (r32 == EAX){ \
-
220  emitm(&stream, 0x25, 1);\
-
221  emitm(&stream, i32, 4);}\
-
222  else{ \
-
223  emitm(&stream, 0x81, 1);\
-
224  emitm(&stream, 7 << 5 | r32, 1);\
-
225  emitm(&stream, i32, 4);}
-
226 
-
228 #define ANDrd(dr32, sr32) \
-
229  emitm(&stream, 0x23, 1);\
-
230  emitm(&stream, 3 << 6 | (dr32 & 0x7) << 3 | sr32 & 0x7, 1);
-
231 
-
233 #define ORrd(dr32, sr32) \
-
234  emitm(&stream, 0x0b, 1);\
-
235  emitm(&stream, 3 << 6 | (dr32 & 0x7) << 3 | sr32 & 0x7, 1);
-
236 
-
238 #define ORid(r32, i32) \
-
239  if (r32 == EAX){ \
-
240  emitm(&stream, 0x0d, 1);\
-
241  emitm(&stream, i32, 4);}\
-
242  else{ \
-
243  emitm(&stream, 0x81, 1);\
-
244  emitm(&stream, 25 << 3 | r32, 1);\
-
245  emitm(&stream, i32, 4);}
-
246 
-
248 #define SHLib(r32, i8) \
-
249  emitm(&stream, 0xc1, 1);\
-
250  emitm(&stream, 7 << 5 | r32 & 0x7, 1);\
-
251  emitm(&stream, i8, 1);
-
252 
-
254 #define SHL_CLrb(dr32) \
-
255  emitm(&stream, 0xd3, 1);\
-
256  emitm(&stream, 7 << 5 | dr32 & 0x7, 1);
-
257 
-
259 #define SHRib(r32, i8) \
-
260  emitm(&stream, 0xc1, 1);\
-
261  emitm(&stream, 29 << 3 | r32 & 0x7, 1);\
-
262  emitm(&stream, i8, 1);
-
263 
-
265 #define SHR_CLrb(dr32) \
-
266  emitm(&stream, 0xd3, 1);\
-
267  emitm(&stream, 29 << 3 | dr32 & 0x7, 1);
-
268 
-
270 #define NEGd(r32) \
-
271  emitm(&stream, 0xf7, 1);\
-
272  emitm(&stream, 27 << 3 | r32 & 0x7, 1);
-
273 
-
275 #define CMPodd(dr32, sr32, off) \
-
276  emitm(&stream, 3 << 4 | 3 | 1 << 3, 1); \
-
277  emitm(&stream, 1 << 6 | (dr32 & 0x7) << 3 | sr32 & 0x7, 1);\
-
278  emitm(&stream, off, 1);
-
279 
-
281 #define CMPrd(dr32, sr32) \
-
282  emitm(&stream, 0x3b, 1); \
-
283  emitm(&stream, 3 << 6 | (dr32 & 0x7) << 3 | sr32 & 0x7, 1);
-
284 
-
286 #define CMPid(dr32, i32) \
-
287  if (dr32 == EAX){ \
-
288  emitm(&stream, 0x3d, 1); \
-
289  emitm(&stream, i32, 4);} \
-
290  else{ \
-
291  emitm(&stream, 0x81, 1); \
-
292  emitm(&stream, 0x1f << 3 | (dr32 & 0x7), 1);\
-
293  emitm(&stream, i32, 4);}
-
294 
-
296 #define JNEb(off8) \
-
297  emitm(&stream, 0x75, 1);\
-
298  emitm(&stream, off8, 1);
-
299 
-
301 #define JAb(off8) \
-
302  emitm(&stream, 0x77, 1);\
-
303  emitm(&stream, off8, 1);
-
304 
-
306 #define JE(off32) \
-
307  emitm(&stream, 0x0f, 1);\
-
308  emitm(&stream, 0x84, 1);\
-
309  emitm(&stream, off32, 4);
-
310 
-
312 #define JLE(off32) \
-
313  emitm(&stream, 0x0f, 1);\
-
314  emitm(&stream, 0x8e, 1);\
-
315  emitm(&stream, off32, 4);
-
316 
-
318 #define JLEb(off8) \
-
319  emitm(&stream, 0x7e, 1);\
-
320  emitm(&stream, off8, 1);
-
321 
-
323 #define JBEb(off8) \
-
324  emitm(&stream, 0x76, 1);\
-
325  emitm(&stream, off8, 1);
-
326 
-
328 #define JBb(off8) \
-
329  emitm(&stream, 0x72, 1);\
-
330  emitm(&stream, off8, 1);
-
331 
-
333 #define JA(off32) \
-
334  emitm(&stream, 0x0f, 1);\
-
335  emitm(&stream, 0x87, 1);\
-
336  emitm(&stream, off32, 4);
-
337 
-
339 #define JAE(off32) \
-
340  emitm(&stream, 0x0f, 1);\
-
341  emitm(&stream, 0x83, 1);\
-
342  emitm(&stream, off32, 4);
-
343 
-
345 #define JG(off32) \
-
346  emitm(&stream, 0x0f, 1);\
-
347  emitm(&stream, 0x8f, 1);\
-
348  emitm(&stream, off32, 4);
-
349 
-
351 #define JGE(off32) \
-
352  emitm(&stream, 0x0f, 1);\
-
353  emitm(&stream, 0x8d, 1);\
-
354  emitm(&stream, off32, 4);
-
355 
-
357 #define JMP(off32) \
-
358  emitm(&stream, 0xe9, 1);\
-
359  emitm(&stream, off32, 4);
-
360 
-
365 /**************************/
-
366 /* Prototypes */
-
367 /**************************/
-
368 
-
382 JIT_BPF_Filter* BPF_jitter(struct bpf_insn *fp, INT nins);
-
383 
-
395 BPF_filter_function BPFtoX86(struct bpf_insn *ins, UINT nins, INT *mem);
- -
403 
-
PINT mem
Definition: jitter.h:97
-
Structure describing a x86 filtering program created by the jitter.
Definition: jitter.h:95
-
INT cur_ip
Current X86 instruction pointer.
Definition: jitter.h:70
-
A stream of X86 binary code.
Definition: jitter.h:69
-
struct binary_stream binary_stream
A stream of X86 binary code.
-
PUINT refs
Jumps reference table.
Definition: jitter.h:73
-
void BPF_Destroy_JIT_Filter(JIT_BPF_Filter *Filter)
Deletes a filtering function that was previously created by BPF_jitter().
-
PCHAR ibuf
Instruction buffer, contains the X86 generated code.
Definition: jitter.h:72
-
BPF_filter_function Function
The x86 filtering binary, in the form of a BPF_filter_function.
Definition: jitter.h:96
-
INT bpf_pc
Current BPF instruction pointer, i.e. position in the BPF program reached by the jitter.
Definition: jitter.h:71
-
UINT(__cdecl * BPF_filter_function)(PVOID *, ULONG, UINT)
Prototype of a filtering function created by the jitter.
Definition: jitter.h:82
-
JIT_BPF_Filter * BPF_jitter(struct bpf_insn *fp, INT nins)
BPF jitter, builds an x86 function from a BPF program.
-
BPF_filter_function BPFtoX86(struct bpf_insn *ins, UINT nins, INT *mem)
Translates a set of BPF instructions in a set of x86 ones.
-
struct JIT_BPF_Filter JIT_BPF_Filter
Structure describing a x86 filtering program created by the jitter.
-
void(* emit_func)(binary_stream *stream, ULONG value, UINT n)
Prototype of the emit functions.
Definition: jitter.h:92
-
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/jquery.js b/libs/WinPcap-413-173-b4/docs/html/jquery.js deleted file mode 100644 index 6aa2e4c2..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/jquery.js +++ /dev/null @@ -1,39 +0,0 @@ -/*! - * jQuery JavaScript Library v1.7.1 - * http://jquery.com/ - * - * Copyright 2011, John Resig - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * Includes Sizzle.js - * http://sizzlejs.com/ - * Copyright 2011, The Dojo Foundation - * Released under the MIT, BSD, and GPL Licenses. - * - * Date: Mon Nov 21 21:11:03 2011 -0500 - */ -(function(bb,L){var av=bb.document,bu=bb.navigator,bl=bb.location;var b=(function(){var bF=function(b0,b1){return new bF.fn.init(b0,b1,bD)},bU=bb.jQuery,bH=bb.$,bD,bY=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,bM=/\S/,bI=/^\s+/,bE=/\s+$/,bA=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,bN=/^[\],:{}\s]*$/,bW=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,bP=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,bJ=/(?:^|:|,)(?:\s*\[)+/g,by=/(webkit)[ \/]([\w.]+)/,bR=/(opera)(?:.*version)?[ \/]([\w.]+)/,bQ=/(msie) ([\w.]+)/,bS=/(mozilla)(?:.*? rv:([\w.]+))?/,bB=/-([a-z]|[0-9])/ig,bZ=/^-ms-/,bT=function(b0,b1){return(b1+"").toUpperCase()},bX=bu.userAgent,bV,bC,e,bL=Object.prototype.toString,bG=Object.prototype.hasOwnProperty,bz=Array.prototype.push,bK=Array.prototype.slice,bO=String.prototype.trim,bv=Array.prototype.indexOf,bx={};bF.fn=bF.prototype={constructor:bF,init:function(b0,b4,b3){var b2,b5,b1,b6;if(!b0){return this}if(b0.nodeType){this.context=this[0]=b0;this.length=1;return this}if(b0==="body"&&!b4&&av.body){this.context=av;this[0]=av.body;this.selector=b0;this.length=1;return this}if(typeof b0==="string"){if(b0.charAt(0)==="<"&&b0.charAt(b0.length-1)===">"&&b0.length>=3){b2=[null,b0,null]}else{b2=bY.exec(b0)}if(b2&&(b2[1]||!b4)){if(b2[1]){b4=b4 instanceof bF?b4[0]:b4;b6=(b4?b4.ownerDocument||b4:av);b1=bA.exec(b0);if(b1){if(bF.isPlainObject(b4)){b0=[av.createElement(b1[1])];bF.fn.attr.call(b0,b4,true)}else{b0=[b6.createElement(b1[1])]}}else{b1=bF.buildFragment([b2[1]],[b6]);b0=(b1.cacheable?bF.clone(b1.fragment):b1.fragment).childNodes}return bF.merge(this,b0)}else{b5=av.getElementById(b2[2]);if(b5&&b5.parentNode){if(b5.id!==b2[2]){return b3.find(b0)}this.length=1;this[0]=b5}this.context=av;this.selector=b0;return this}}else{if(!b4||b4.jquery){return(b4||b3).find(b0)}else{return this.constructor(b4).find(b0)}}}else{if(bF.isFunction(b0)){return b3.ready(b0)}}if(b0.selector!==L){this.selector=b0.selector;this.context=b0.context}return bF.makeArray(b0,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return bK.call(this,0)},get:function(b0){return b0==null?this.toArray():(b0<0?this[this.length+b0]:this[b0])},pushStack:function(b1,b3,b0){var b2=this.constructor();if(bF.isArray(b1)){bz.apply(b2,b1)}else{bF.merge(b2,b1)}b2.prevObject=this;b2.context=this.context;if(b3==="find"){b2.selector=this.selector+(this.selector?" ":"")+b0}else{if(b3){b2.selector=this.selector+"."+b3+"("+b0+")"}}return b2},each:function(b1,b0){return bF.each(this,b1,b0)},ready:function(b0){bF.bindReady();bC.add(b0);return this},eq:function(b0){b0=+b0;return b0===-1?this.slice(b0):this.slice(b0,b0+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(bK.apply(this,arguments),"slice",bK.call(arguments).join(","))},map:function(b0){return this.pushStack(bF.map(this,function(b2,b1){return b0.call(b2,b1,b2)}))},end:function(){return this.prevObject||this.constructor(null)},push:bz,sort:[].sort,splice:[].splice};bF.fn.init.prototype=bF.fn;bF.extend=bF.fn.extend=function(){var b9,b2,b0,b1,b6,b7,b5=arguments[0]||{},b4=1,b3=arguments.length,b8=false;if(typeof b5==="boolean"){b8=b5;b5=arguments[1]||{};b4=2}if(typeof b5!=="object"&&!bF.isFunction(b5)){b5={}}if(b3===b4){b5=this;--b4}for(;b40){return}bC.fireWith(av,[bF]);if(bF.fn.trigger){bF(av).trigger("ready").off("ready")}}},bindReady:function(){if(bC){return}bC=bF.Callbacks("once memory");if(av.readyState==="complete"){return setTimeout(bF.ready,1)}if(av.addEventListener){av.addEventListener("DOMContentLoaded",e,false);bb.addEventListener("load",bF.ready,false)}else{if(av.attachEvent){av.attachEvent("onreadystatechange",e);bb.attachEvent("onload",bF.ready);var b0=false;try{b0=bb.frameElement==null}catch(b1){}if(av.documentElement.doScroll&&b0){bw()}}}},isFunction:function(b0){return bF.type(b0)==="function"},isArray:Array.isArray||function(b0){return bF.type(b0)==="array"},isWindow:function(b0){return b0&&typeof b0==="object"&&"setInterval" in b0},isNumeric:function(b0){return !isNaN(parseFloat(b0))&&isFinite(b0)},type:function(b0){return b0==null?String(b0):bx[bL.call(b0)]||"object"},isPlainObject:function(b2){if(!b2||bF.type(b2)!=="object"||b2.nodeType||bF.isWindow(b2)){return false}try{if(b2.constructor&&!bG.call(b2,"constructor")&&!bG.call(b2.constructor.prototype,"isPrototypeOf")){return false}}catch(b1){return false}var b0;for(b0 in b2){}return b0===L||bG.call(b2,b0)},isEmptyObject:function(b1){for(var b0 in b1){return false}return true},error:function(b0){throw new Error(b0)},parseJSON:function(b0){if(typeof b0!=="string"||!b0){return null}b0=bF.trim(b0);if(bb.JSON&&bb.JSON.parse){return bb.JSON.parse(b0)}if(bN.test(b0.replace(bW,"@").replace(bP,"]").replace(bJ,""))){return(new Function("return "+b0))()}bF.error("Invalid JSON: "+b0)},parseXML:function(b2){var b0,b1;try{if(bb.DOMParser){b1=new DOMParser();b0=b1.parseFromString(b2,"text/xml")}else{b0=new ActiveXObject("Microsoft.XMLDOM");b0.async="false";b0.loadXML(b2)}}catch(b3){b0=L}if(!b0||!b0.documentElement||b0.getElementsByTagName("parsererror").length){bF.error("Invalid XML: "+b2)}return b0},noop:function(){},globalEval:function(b0){if(b0&&bM.test(b0)){(bb.execScript||function(b1){bb["eval"].call(bb,b1)})(b0)}},camelCase:function(b0){return b0.replace(bZ,"ms-").replace(bB,bT)},nodeName:function(b1,b0){return b1.nodeName&&b1.nodeName.toUpperCase()===b0.toUpperCase()},each:function(b3,b6,b2){var b1,b4=0,b5=b3.length,b0=b5===L||bF.isFunction(b3);if(b2){if(b0){for(b1 in b3){if(b6.apply(b3[b1],b2)===false){break}}}else{for(;b40&&b0[0]&&b0[b1-1])||b1===0||bF.isArray(b0));if(b3){for(;b21?aJ.call(arguments,0):bG;if(!(--bw)){bC.resolveWith(bC,bx)}}}function bz(bF){return function(bG){bB[bF]=arguments.length>1?aJ.call(arguments,0):bG;bC.notifyWith(bE,bB)}}if(e>1){for(;bv
a";bI=bv.getElementsByTagName("*");bF=bv.getElementsByTagName("a")[0];if(!bI||!bI.length||!bF){return{}}bG=av.createElement("select");bx=bG.appendChild(av.createElement("option"));bE=bv.getElementsByTagName("input")[0];bJ={leadingWhitespace:(bv.firstChild.nodeType===3),tbody:!bv.getElementsByTagName("tbody").length,htmlSerialize:!!bv.getElementsByTagName("link").length,style:/top/.test(bF.getAttribute("style")),hrefNormalized:(bF.getAttribute("href")==="/a"),opacity:/^0.55/.test(bF.style.opacity),cssFloat:!!bF.style.cssFloat,checkOn:(bE.value==="on"),optSelected:bx.selected,getSetAttribute:bv.className!=="t",enctype:!!av.createElement("form").enctype,html5Clone:av.createElement("nav").cloneNode(true).outerHTML!=="<:nav>",submitBubbles:true,changeBubbles:true,focusinBubbles:false,deleteExpando:true,noCloneEvent:true,inlineBlockNeedsLayout:false,shrinkWrapBlocks:false,reliableMarginRight:true};bE.checked=true;bJ.noCloneChecked=bE.cloneNode(true).checked;bG.disabled=true;bJ.optDisabled=!bx.disabled;try{delete bv.test}catch(bC){bJ.deleteExpando=false}if(!bv.addEventListener&&bv.attachEvent&&bv.fireEvent){bv.attachEvent("onclick",function(){bJ.noCloneEvent=false});bv.cloneNode(true).fireEvent("onclick")}bE=av.createElement("input");bE.value="t";bE.setAttribute("type","radio");bJ.radioValue=bE.value==="t";bE.setAttribute("checked","checked");bv.appendChild(bE);bD=av.createDocumentFragment();bD.appendChild(bv.lastChild);bJ.checkClone=bD.cloneNode(true).cloneNode(true).lastChild.checked;bJ.appendChecked=bE.checked;bD.removeChild(bE);bD.appendChild(bv);bv.innerHTML="";if(bb.getComputedStyle){bA=av.createElement("div");bA.style.width="0";bA.style.marginRight="0";bv.style.width="2px";bv.appendChild(bA);bJ.reliableMarginRight=(parseInt((bb.getComputedStyle(bA,null)||{marginRight:0}).marginRight,10)||0)===0}if(bv.attachEvent){for(by in {submit:1,change:1,focusin:1}){bB="on"+by;bw=(bB in bv);if(!bw){bv.setAttribute(bB,"return;");bw=(typeof bv[bB]==="function")}bJ[by+"Bubbles"]=bw}}bD.removeChild(bv);bD=bG=bx=bA=bv=bE=null;b(function(){var bM,bU,bV,bT,bN,bO,bL,bS,bR,e,bP,bQ=av.getElementsByTagName("body")[0];if(!bQ){return}bL=1;bS="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;";bR="visibility:hidden;border:0;";e="style='"+bS+"border:5px solid #000;padding:0;'";bP="
";bM=av.createElement("div");bM.style.cssText=bR+"width:0;height:0;position:static;top:0;margin-top:"+bL+"px";bQ.insertBefore(bM,bQ.firstChild);bv=av.createElement("div");bM.appendChild(bv);bv.innerHTML="
t
";bz=bv.getElementsByTagName("td");bw=(bz[0].offsetHeight===0);bz[0].style.display="";bz[1].style.display="none";bJ.reliableHiddenOffsets=bw&&(bz[0].offsetHeight===0);bv.innerHTML="";bv.style.width=bv.style.paddingLeft="1px";b.boxModel=bJ.boxModel=bv.offsetWidth===2;if(typeof bv.style.zoom!=="undefined"){bv.style.display="inline";bv.style.zoom=1;bJ.inlineBlockNeedsLayout=(bv.offsetWidth===2);bv.style.display="";bv.innerHTML="
";bJ.shrinkWrapBlocks=(bv.offsetWidth!==2)}bv.style.cssText=bS+bR;bv.innerHTML=bP;bU=bv.firstChild;bV=bU.firstChild;bN=bU.nextSibling.firstChild.firstChild;bO={doesNotAddBorder:(bV.offsetTop!==5),doesAddBorderForTableAndCells:(bN.offsetTop===5)};bV.style.position="fixed";bV.style.top="20px";bO.fixedPosition=(bV.offsetTop===20||bV.offsetTop===15);bV.style.position=bV.style.top="";bU.style.overflow="hidden";bU.style.position="relative";bO.subtractsBorderForOverflowNotVisible=(bV.offsetTop===-5);bO.doesNotIncludeMarginInBodyOffset=(bQ.offsetTop!==bL);bQ.removeChild(bM);bv=bM=null;b.extend(bJ,bO)});return bJ})();var aS=/^(?:\{.*\}|\[.*\])$/,aA=/([A-Z])/g;b.extend({cache:{},uuid:0,expando:"jQuery"+(b.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:true,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:true},hasData:function(e){e=e.nodeType?b.cache[e[b.expando]]:e[b.expando];return !!e&&!S(e)},data:function(bx,bv,bz,by){if(!b.acceptData(bx)){return}var bG,bA,bD,bE=b.expando,bC=typeof bv==="string",bF=bx.nodeType,e=bF?b.cache:bx,bw=bF?bx[bE]:bx[bE]&&bE,bB=bv==="events";if((!bw||!e[bw]||(!bB&&!by&&!e[bw].data))&&bC&&bz===L){return}if(!bw){if(bF){bx[bE]=bw=++b.uuid}else{bw=bE}}if(!e[bw]){e[bw]={};if(!bF){e[bw].toJSON=b.noop}}if(typeof bv==="object"||typeof bv==="function"){if(by){e[bw]=b.extend(e[bw],bv)}else{e[bw].data=b.extend(e[bw].data,bv)}}bG=bA=e[bw];if(!by){if(!bA.data){bA.data={}}bA=bA.data}if(bz!==L){bA[b.camelCase(bv)]=bz}if(bB&&!bA[bv]){return bG.events}if(bC){bD=bA[bv];if(bD==null){bD=bA[b.camelCase(bv)]}}else{bD=bA}return bD},removeData:function(bx,bv,by){if(!b.acceptData(bx)){return}var bB,bA,bz,bC=b.expando,bD=bx.nodeType,e=bD?b.cache:bx,bw=bD?bx[bC]:bC;if(!e[bw]){return}if(bv){bB=by?e[bw]:e[bw].data;if(bB){if(!b.isArray(bv)){if(bv in bB){bv=[bv]}else{bv=b.camelCase(bv);if(bv in bB){bv=[bv]}else{bv=bv.split(" ")}}}for(bA=0,bz=bv.length;bA-1){return true}}return false},val:function(bx){var e,bv,by,bw=this[0];if(!arguments.length){if(bw){e=b.valHooks[bw.nodeName.toLowerCase()]||b.valHooks[bw.type];if(e&&"get" in e&&(bv=e.get(bw,"value"))!==L){return bv}bv=bw.value;return typeof bv==="string"?bv.replace(aU,""):bv==null?"":bv}return}by=b.isFunction(bx);return this.each(function(bA){var bz=b(this),bB;if(this.nodeType!==1){return}if(by){bB=bx.call(this,bA,bz.val())}else{bB=bx}if(bB==null){bB=""}else{if(typeof bB==="number"){bB+=""}else{if(b.isArray(bB)){bB=b.map(bB,function(bC){return bC==null?"":bC+""})}}}e=b.valHooks[this.nodeName.toLowerCase()]||b.valHooks[this.type];if(!e||!("set" in e)||e.set(this,bB,"value")===L){this.value=bB}})}});b.extend({valHooks:{option:{get:function(e){var bv=e.attributes.value;return !bv||bv.specified?e.value:e.text}},select:{get:function(e){var bA,bv,bz,bx,by=e.selectedIndex,bB=[],bC=e.options,bw=e.type==="select-one";if(by<0){return null}bv=bw?by:0;bz=bw?by+1:bC.length;for(;bv=0});if(!e.length){bv.selectedIndex=-1}return e}}},attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(bA,bx,bB,bz){var bw,e,by,bv=bA.nodeType; -if(!bA||bv===3||bv===8||bv===2){return}if(bz&&bx in b.attrFn){return b(bA)[bx](bB)}if(typeof bA.getAttribute==="undefined"){return b.prop(bA,bx,bB)}by=bv!==1||!b.isXMLDoc(bA);if(by){bx=bx.toLowerCase();e=b.attrHooks[bx]||(ao.test(bx)?aY:be)}if(bB!==L){if(bB===null){b.removeAttr(bA,bx);return}else{if(e&&"set" in e&&by&&(bw=e.set(bA,bB,bx))!==L){return bw}else{bA.setAttribute(bx,""+bB);return bB}}}else{if(e&&"get" in e&&by&&(bw=e.get(bA,bx))!==null){return bw}else{bw=bA.getAttribute(bx);return bw===null?L:bw}}},removeAttr:function(bx,bz){var by,bA,bv,e,bw=0;if(bz&&bx.nodeType===1){bA=bz.toLowerCase().split(af);e=bA.length;for(;bw=0)}}})});var bd=/^(?:textarea|input|select)$/i,n=/^([^\.]*)?(?:\.(.+))?$/,J=/\bhover(\.\S+)?\b/,aO=/^key/,bf=/^(?:mouse|contextmenu)|click/,T=/^(?:focusinfocus|focusoutblur)$/,U=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,Y=function(e){var bv=U.exec(e);if(bv){bv[1]=(bv[1]||"").toLowerCase();bv[3]=bv[3]&&new RegExp("(?:^|\\s)"+bv[3]+"(?:\\s|$)")}return bv},j=function(bw,e){var bv=bw.attributes||{};return((!e[1]||bw.nodeName.toLowerCase()===e[1])&&(!e[2]||(bv.id||{}).value===e[2])&&(!e[3]||e[3].test((bv["class"]||{}).value)))},bt=function(e){return b.event.special.hover?e:e.replace(J,"mouseenter$1 mouseleave$1")};b.event={add:function(bx,bC,bJ,bA,by){var bD,bB,bK,bI,bH,bF,e,bG,bv,bz,bw,bE;if(bx.nodeType===3||bx.nodeType===8||!bC||!bJ||!(bD=b._data(bx))){return}if(bJ.handler){bv=bJ;bJ=bv.handler}if(!bJ.guid){bJ.guid=b.guid++}bK=bD.events;if(!bK){bD.events=bK={}}bB=bD.handle;if(!bB){bD.handle=bB=function(bL){return typeof b!=="undefined"&&(!bL||b.event.triggered!==bL.type)?b.event.dispatch.apply(bB.elem,arguments):L};bB.elem=bx}bC=b.trim(bt(bC)).split(" ");for(bI=0;bI=0){bG=bG.slice(0,-1);bw=true}if(bG.indexOf(".")>=0){bx=bG.split(".");bG=bx.shift();bx.sort()}if((!bA||b.event.customEvent[bG])&&!b.event.global[bG]){return}bv=typeof bv==="object"?bv[b.expando]?bv:new b.Event(bG,bv):new b.Event(bG);bv.type=bG;bv.isTrigger=true;bv.exclusive=bw;bv.namespace=bx.join(".");bv.namespace_re=bv.namespace?new RegExp("(^|\\.)"+bx.join("\\.(?:.*\\.)?")+"(\\.|$)"):null;by=bG.indexOf(":")<0?"on"+bG:"";if(!bA){e=b.cache;for(bC in e){if(e[bC].events&&e[bC].events[bG]){b.event.trigger(bv,bD,e[bC].handle.elem,true)}}return}bv.result=L;if(!bv.target){bv.target=bA}bD=bD!=null?b.makeArray(bD):[];bD.unshift(bv);bF=b.event.special[bG]||{};if(bF.trigger&&bF.trigger.apply(bA,bD)===false){return}bB=[[bA,bF.bindType||bG]];if(!bJ&&!bF.noBubble&&!b.isWindow(bA)){bI=bF.delegateType||bG;bH=T.test(bI+bG)?bA:bA.parentNode;bz=null;for(;bH;bH=bH.parentNode){bB.push([bH,bI]);bz=bH}if(bz&&bz===bA.ownerDocument){bB.push([bz.defaultView||bz.parentWindow||bb,bI])}}for(bC=0;bCbA){bH.push({elem:this,matches:bz.slice(bA)})}for(bC=0;bC0?this.on(e,null,bx,bw):this.trigger(e)};if(b.attrFn){b.attrFn[e]=true}if(aO.test(e)){b.event.fixHooks[e]=b.event.keyHooks}if(bf.test(e)){b.event.fixHooks[e]=b.event.mouseHooks}}); -/*! - * Sizzle CSS Selector Engine - * Copyright 2011, The Dojo Foundation - * Released under the MIT, BSD, and GPL Licenses. - * More information: http://sizzlejs.com/ - */ -(function(){var bH=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,bC="sizcache"+(Math.random()+"").replace(".",""),bI=0,bL=Object.prototype.toString,bB=false,bA=true,bK=/\\/g,bO=/\r\n/g,bQ=/\W/;[0,0].sort(function(){bA=false;return 0});var by=function(bV,e,bY,bZ){bY=bY||[];e=e||av;var b1=e;if(e.nodeType!==1&&e.nodeType!==9){return[]}if(!bV||typeof bV!=="string"){return bY}var bS,b3,b6,bR,b2,b5,b4,bX,bU=true,bT=by.isXML(e),bW=[],b0=bV;do{bH.exec("");bS=bH.exec(b0);if(bS){b0=bS[3];bW.push(bS[1]);if(bS[2]){bR=bS[3];break}}}while(bS);if(bW.length>1&&bD.exec(bV)){if(bW.length===2&&bE.relative[bW[0]]){b3=bM(bW[0]+bW[1],e,bZ)}else{b3=bE.relative[bW[0]]?[e]:by(bW.shift(),e);while(bW.length){bV=bW.shift();if(bE.relative[bV]){bV+=bW.shift()}b3=bM(bV,b3,bZ)}}}else{if(!bZ&&bW.length>1&&e.nodeType===9&&!bT&&bE.match.ID.test(bW[0])&&!bE.match.ID.test(bW[bW.length-1])){b2=by.find(bW.shift(),e,bT);e=b2.expr?by.filter(b2.expr,b2.set)[0]:b2.set[0]}if(e){b2=bZ?{expr:bW.pop(),set:bF(bZ)}:by.find(bW.pop(),bW.length===1&&(bW[0]==="~"||bW[0]==="+")&&e.parentNode?e.parentNode:e,bT);b3=b2.expr?by.filter(b2.expr,b2.set):b2.set;if(bW.length>0){b6=bF(b3)}else{bU=false}while(bW.length){b5=bW.pop();b4=b5;if(!bE.relative[b5]){b5=""}else{b4=bW.pop()}if(b4==null){b4=e}bE.relative[b5](b6,b4,bT)}}else{b6=bW=[]}}if(!b6){b6=b3}if(!b6){by.error(b5||bV)}if(bL.call(b6)==="[object Array]"){if(!bU){bY.push.apply(bY,b6)}else{if(e&&e.nodeType===1){for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&(b6[bX]===true||b6[bX].nodeType===1&&by.contains(e,b6[bX]))){bY.push(b3[bX])}}}else{for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&b6[bX].nodeType===1){bY.push(b3[bX])}}}}}else{bF(b6,bY)}if(bR){by(bR,b1,bY,bZ);by.uniqueSort(bY)}return bY};by.uniqueSort=function(bR){if(bJ){bB=bA;bR.sort(bJ);if(bB){for(var e=1;e0};by.find=function(bX,e,bY){var bW,bS,bU,bT,bV,bR;if(!bX){return[]}for(bS=0,bU=bE.order.length;bS":function(bW,bR){var bV,bU=typeof bR==="string",bS=0,e=bW.length;if(bU&&!bQ.test(bR)){bR=bR.toLowerCase();for(;bS=0)){if(!bS){e.push(bV)}}else{if(bS){bR[bU]=false}}}}return false},ID:function(e){return e[1].replace(bK,"")},TAG:function(bR,e){return bR[1].replace(bK,"").toLowerCase()},CHILD:function(e){if(e[1]==="nth"){if(!e[2]){by.error(e[0])}e[2]=e[2].replace(/^\+|\s*/g,"");var bR=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(e[2]==="even"&&"2n"||e[2]==="odd"&&"2n+1"||!/\D/.test(e[2])&&"0n+"+e[2]||e[2]);e[2]=(bR[1]+(bR[2]||1))-0;e[3]=bR[3]-0}else{if(e[2]){by.error(e[0])}}e[0]=bI++;return e},ATTR:function(bU,bR,bS,e,bV,bW){var bT=bU[1]=bU[1].replace(bK,"");if(!bW&&bE.attrMap[bT]){bU[1]=bE.attrMap[bT]}bU[4]=(bU[4]||bU[5]||"").replace(bK,"");if(bU[2]==="~="){bU[4]=" "+bU[4]+" "}return bU},PSEUDO:function(bU,bR,bS,e,bV){if(bU[1]==="not"){if((bH.exec(bU[3])||"").length>1||/^\w/.test(bU[3])){bU[3]=by(bU[3],null,null,bR)}else{var bT=by.filter(bU[3],bR,bS,true^bV);if(!bS){e.push.apply(e,bT)}return false}}else{if(bE.match.POS.test(bU[0])||bE.match.CHILD.test(bU[0])){return true}}return bU},POS:function(e){e.unshift(true);return e}},filters:{enabled:function(e){return e.disabled===false&&e.type!=="hidden"},disabled:function(e){return e.disabled===true},checked:function(e){return e.checked===true},selected:function(e){if(e.parentNode){e.parentNode.selectedIndex}return e.selected===true},parent:function(e){return !!e.firstChild},empty:function(e){return !e.firstChild},has:function(bS,bR,e){return !!by(e[3],bS).length},header:function(e){return(/h\d/i).test(e.nodeName)},text:function(bS){var e=bS.getAttribute("type"),bR=bS.type;return bS.nodeName.toLowerCase()==="input"&&"text"===bR&&(e===bR||e===null)},radio:function(e){return e.nodeName.toLowerCase()==="input"&&"radio"===e.type},checkbox:function(e){return e.nodeName.toLowerCase()==="input"&&"checkbox"===e.type},file:function(e){return e.nodeName.toLowerCase()==="input"&&"file"===e.type},password:function(e){return e.nodeName.toLowerCase()==="input"&&"password"===e.type},submit:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"submit"===bR.type},image:function(e){return e.nodeName.toLowerCase()==="input"&&"image"===e.type},reset:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"reset"===bR.type},button:function(bR){var e=bR.nodeName.toLowerCase();return e==="input"&&"button"===bR.type||e==="button"},input:function(e){return(/input|select|textarea|button/i).test(e.nodeName)},focus:function(e){return e===e.ownerDocument.activeElement}},setFilters:{first:function(bR,e){return e===0},last:function(bS,bR,e,bT){return bR===bT.length-1},even:function(bR,e){return e%2===0},odd:function(bR,e){return e%2===1 -},lt:function(bS,bR,e){return bRe[3]-0},nth:function(bS,bR,e){return e[3]-0===bR},eq:function(bS,bR,e){return e[3]-0===bR}},filter:{PSEUDO:function(bS,bX,bW,bY){var e=bX[1],bR=bE.filters[e];if(bR){return bR(bS,bW,bX,bY)}else{if(e==="contains"){return(bS.textContent||bS.innerText||bw([bS])||"").indexOf(bX[3])>=0}else{if(e==="not"){var bT=bX[3];for(var bV=0,bU=bT.length;bV=0)}}},ID:function(bR,e){return bR.nodeType===1&&bR.getAttribute("id")===e},TAG:function(bR,e){return(e==="*"&&bR.nodeType===1)||!!bR.nodeName&&bR.nodeName.toLowerCase()===e},CLASS:function(bR,e){return(" "+(bR.className||bR.getAttribute("class"))+" ").indexOf(e)>-1},ATTR:function(bV,bT){var bS=bT[1],e=by.attr?by.attr(bV,bS):bE.attrHandle[bS]?bE.attrHandle[bS](bV):bV[bS]!=null?bV[bS]:bV.getAttribute(bS),bW=e+"",bU=bT[2],bR=bT[4];return e==null?bU==="!=":!bU&&by.attr?e!=null:bU==="="?bW===bR:bU==="*="?bW.indexOf(bR)>=0:bU==="~="?(" "+bW+" ").indexOf(bR)>=0:!bR?bW&&e!==false:bU==="!="?bW!==bR:bU==="^="?bW.indexOf(bR)===0:bU==="$="?bW.substr(bW.length-bR.length)===bR:bU==="|="?bW===bR||bW.substr(0,bR.length+1)===bR+"-":false},POS:function(bU,bR,bS,bV){var e=bR[2],bT=bE.setFilters[e];if(bT){return bT(bU,bS,bR,bV)}}}};var bD=bE.match.POS,bx=function(bR,e){return"\\"+(e-0+1)};for(var bz in bE.match){bE.match[bz]=new RegExp(bE.match[bz].source+(/(?![^\[]*\])(?![^\(]*\))/.source));bE.leftMatch[bz]=new RegExp(/(^(?:.|\r|\n)*?)/.source+bE.match[bz].source.replace(/\\(\d+)/g,bx))}var bF=function(bR,e){bR=Array.prototype.slice.call(bR,0);if(e){e.push.apply(e,bR);return e}return bR};try{Array.prototype.slice.call(av.documentElement.childNodes,0)[0].nodeType}catch(bP){bF=function(bU,bT){var bS=0,bR=bT||[];if(bL.call(bU)==="[object Array]"){Array.prototype.push.apply(bR,bU)}else{if(typeof bU.length==="number"){for(var e=bU.length;bS";e.insertBefore(bR,e.firstChild);if(av.getElementById(bS)){bE.find.ID=function(bU,bV,bW){if(typeof bV.getElementById!=="undefined"&&!bW){var bT=bV.getElementById(bU[1]);return bT?bT.id===bU[1]||typeof bT.getAttributeNode!=="undefined"&&bT.getAttributeNode("id").nodeValue===bU[1]?[bT]:L:[]}};bE.filter.ID=function(bV,bT){var bU=typeof bV.getAttributeNode!=="undefined"&&bV.getAttributeNode("id");return bV.nodeType===1&&bU&&bU.nodeValue===bT}}e.removeChild(bR);e=bR=null})();(function(){var e=av.createElement("div");e.appendChild(av.createComment(""));if(e.getElementsByTagName("*").length>0){bE.find.TAG=function(bR,bV){var bU=bV.getElementsByTagName(bR[1]);if(bR[1]==="*"){var bT=[];for(var bS=0;bU[bS];bS++){if(bU[bS].nodeType===1){bT.push(bU[bS])}}bU=bT}return bU}}e.innerHTML="";if(e.firstChild&&typeof e.firstChild.getAttribute!=="undefined"&&e.firstChild.getAttribute("href")!=="#"){bE.attrHandle.href=function(bR){return bR.getAttribute("href",2)}}e=null})();if(av.querySelectorAll){(function(){var e=by,bT=av.createElement("div"),bS="__sizzle__";bT.innerHTML="

";if(bT.querySelectorAll&&bT.querySelectorAll(".TEST").length===0){return}by=function(b4,bV,bZ,b3){bV=bV||av;if(!b3&&!by.isXML(bV)){var b2=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b4);if(b2&&(bV.nodeType===1||bV.nodeType===9)){if(b2[1]){return bF(bV.getElementsByTagName(b4),bZ)}else{if(b2[2]&&bE.find.CLASS&&bV.getElementsByClassName){return bF(bV.getElementsByClassName(b2[2]),bZ)}}}if(bV.nodeType===9){if(b4==="body"&&bV.body){return bF([bV.body],bZ)}else{if(b2&&b2[3]){var bY=bV.getElementById(b2[3]);if(bY&&bY.parentNode){if(bY.id===b2[3]){return bF([bY],bZ)}}else{return bF([],bZ)}}}try{return bF(bV.querySelectorAll(b4),bZ)}catch(b0){}}else{if(bV.nodeType===1&&bV.nodeName.toLowerCase()!=="object"){var bW=bV,bX=bV.getAttribute("id"),bU=bX||bS,b6=bV.parentNode,b5=/^\s*[+~]/.test(b4);if(!bX){bV.setAttribute("id",bU)}else{bU=bU.replace(/'/g,"\\$&")}if(b5&&b6){bV=bV.parentNode}try{if(!b5||b6){return bF(bV.querySelectorAll("[id='"+bU+"'] "+b4),bZ)}}catch(b1){}finally{if(!bX){bW.removeAttribute("id")}}}}}return e(b4,bV,bZ,b3)};for(var bR in e){by[bR]=e[bR]}bT=null})()}(function(){var e=av.documentElement,bS=e.matchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.msMatchesSelector;if(bS){var bU=!bS.call(av.createElement("div"),"div"),bR=false;try{bS.call(av.documentElement,"[test!='']:sizzle")}catch(bT){bR=true}by.matchesSelector=function(bW,bY){bY=bY.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!by.isXML(bW)){try{if(bR||!bE.match.PSEUDO.test(bY)&&!/!=/.test(bY)){var bV=bS.call(bW,bY);if(bV||!bU||bW.document&&bW.document.nodeType!==11){return bV}}}catch(bX){}}return by(bY,null,null,[bW]).length>0}}})();(function(){var e=av.createElement("div");e.innerHTML="
";if(!e.getElementsByClassName||e.getElementsByClassName("e").length===0){return}e.lastChild.className="e";if(e.getElementsByClassName("e").length===1){return}bE.order.splice(1,0,"CLASS");bE.find.CLASS=function(bR,bS,bT){if(typeof bS.getElementsByClassName!=="undefined"&&!bT){return bS.getElementsByClassName(bR[1])}};e=null})();function bv(bR,bW,bV,bZ,bX,bY){for(var bT=0,bS=bZ.length;bT0){bU=e;break}}}e=e[bR]}bZ[bT]=bU}}}if(av.documentElement.contains){by.contains=function(bR,e){return bR!==e&&(bR.contains?bR.contains(e):true)}}else{if(av.documentElement.compareDocumentPosition){by.contains=function(bR,e){return !!(bR.compareDocumentPosition(e)&16)}}else{by.contains=function(){return false}}}by.isXML=function(e){var bR=(e?e.ownerDocument||e:0).documentElement;return bR?bR.nodeName!=="HTML":false};var bM=function(bS,e,bW){var bV,bX=[],bU="",bY=e.nodeType?[e]:e;while((bV=bE.match.PSEUDO.exec(bS))){bU+=bV[0];bS=bS.replace(bE.match.PSEUDO,"")}bS=bE.relative[bS]?bS+"*":bS;for(var bT=0,bR=bY.length;bT0){for(bB=bA;bB=0:b.filter(e,this).length>0:this.filter(e).length>0)},closest:function(by,bx){var bv=[],bw,e,bz=this[0];if(b.isArray(by)){var bB=1;while(bz&&bz.ownerDocument&&bz!==bx){for(bw=0;bw-1:b.find.matchesSelector(bz,by)){bv.push(bz);break}else{bz=bz.parentNode;if(!bz||!bz.ownerDocument||bz===bx||bz.nodeType===11){break}}}}bv=bv.length>1?b.unique(bv):bv;return this.pushStack(bv,"closest",by)},index:function(e){if(!e){return(this[0]&&this[0].parentNode)?this.prevAll().length:-1}if(typeof e==="string"){return b.inArray(this[0],b(e))}return b.inArray(e.jquery?e[0]:e,this)},add:function(e,bv){var bx=typeof e==="string"?b(e,bv):b.makeArray(e&&e.nodeType?[e]:e),bw=b.merge(this.get(),bx);return this.pushStack(C(bx[0])||C(bw[0])?bw:b.unique(bw))},andSelf:function(){return this.add(this.prevObject)}});function C(e){return !e||!e.parentNode||e.parentNode.nodeType===11}b.each({parent:function(bv){var e=bv.parentNode;return e&&e.nodeType!==11?e:null},parents:function(e){return b.dir(e,"parentNode")},parentsUntil:function(bv,e,bw){return b.dir(bv,"parentNode",bw)},next:function(e){return b.nth(e,2,"nextSibling")},prev:function(e){return b.nth(e,2,"previousSibling")},nextAll:function(e){return b.dir(e,"nextSibling")},prevAll:function(e){return b.dir(e,"previousSibling")},nextUntil:function(bv,e,bw){return b.dir(bv,"nextSibling",bw)},prevUntil:function(bv,e,bw){return b.dir(bv,"previousSibling",bw)},siblings:function(e){return b.sibling(e.parentNode.firstChild,e)},children:function(e){return b.sibling(e.firstChild)},contents:function(e){return b.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:b.makeArray(e.childNodes)}},function(e,bv){b.fn[e]=function(by,bw){var bx=b.map(this,bv,by);if(!ab.test(e)){bw=by}if(bw&&typeof bw==="string"){bx=b.filter(bw,bx)}bx=this.length>1&&!ay[e]?b.unique(bx):bx;if((this.length>1||a9.test(bw))&&aq.test(e)){bx=bx.reverse()}return this.pushStack(bx,e,P.call(arguments).join(","))}});b.extend({filter:function(bw,e,bv){if(bv){bw=":not("+bw+")"}return e.length===1?b.find.matchesSelector(e[0],bw)?[e[0]]:[]:b.find.matches(bw,e)},dir:function(bw,bv,by){var e=[],bx=bw[bv];while(bx&&bx.nodeType!==9&&(by===L||bx.nodeType!==1||!b(bx).is(by))){if(bx.nodeType===1){e.push(bx)}bx=bx[bv]}return e},nth:function(by,e,bw,bx){e=e||1;var bv=0;for(;by;by=by[bw]){if(by.nodeType===1&&++bv===e){break}}return by},sibling:function(bw,bv){var e=[];for(;bw;bw=bw.nextSibling){if(bw.nodeType===1&&bw!==bv){e.push(bw)}}return e}});function aG(bx,bw,e){bw=bw||0;if(b.isFunction(bw)){return b.grep(bx,function(bz,by){var bA=!!bw.call(bz,by,bz);return bA===e})}else{if(bw.nodeType){return b.grep(bx,function(bz,by){return(bz===bw)===e})}else{if(typeof bw==="string"){var bv=b.grep(bx,function(by){return by.nodeType===1});if(bp.test(bw)){return b.filter(bw,bv,!e)}else{bw=b.filter(bw,bv)}}}}return b.grep(bx,function(bz,by){return(b.inArray(bz,bw)>=0)===e})}function a(e){var bw=aR.split("|"),bv=e.createDocumentFragment();if(bv.createElement){while(bw.length){bv.createElement(bw.pop())}}return bv}var aR="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",ag=/ jQuery\d+="(?:\d+|null)"/g,ar=/^\s+/,R=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,d=/<([\w:]+)/,w=/",""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]},ac=a(av); -ax.optgroup=ax.option;ax.tbody=ax.tfoot=ax.colgroup=ax.caption=ax.thead;ax.th=ax.td;if(!b.support.htmlSerialize){ax._default=[1,"div
","
"]}b.fn.extend({text:function(e){if(b.isFunction(e)){return this.each(function(bw){var bv=b(this);bv.text(e.call(this,bw,bv.text()))})}if(typeof e!=="object"&&e!==L){return this.empty().append((this[0]&&this[0].ownerDocument||av).createTextNode(e))}return b.text(this)},wrapAll:function(e){if(b.isFunction(e)){return this.each(function(bw){b(this).wrapAll(e.call(this,bw))})}if(this[0]){var bv=b(e,this[0].ownerDocument).eq(0).clone(true);if(this[0].parentNode){bv.insertBefore(this[0])}bv.map(function(){var bw=this;while(bw.firstChild&&bw.firstChild.nodeType===1){bw=bw.firstChild}return bw}).append(this)}return this},wrapInner:function(e){if(b.isFunction(e)){return this.each(function(bv){b(this).wrapInner(e.call(this,bv))})}return this.each(function(){var bv=b(this),bw=bv.contents();if(bw.length){bw.wrapAll(e)}else{bv.append(e)}})},wrap:function(e){var bv=b.isFunction(e);return this.each(function(bw){b(this).wrapAll(bv?e.call(this,bw):e)})},unwrap:function(){return this.parent().each(function(){if(!b.nodeName(this,"body")){b(this).replaceWith(this.childNodes)}}).end()},append:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.appendChild(e)}})},prepend:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.insertBefore(e,this.firstChild)}})},before:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this)})}else{if(arguments.length){var e=b.clean(arguments);e.push.apply(e,this.toArray());return this.pushStack(e,"before",arguments)}}},after:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this.nextSibling)})}else{if(arguments.length){var e=this.pushStack(this,"after",arguments);e.push.apply(e,b.clean(arguments));return e}}},remove:function(e,bx){for(var bv=0,bw;(bw=this[bv])!=null;bv++){if(!e||b.filter(e,[bw]).length){if(!bx&&bw.nodeType===1){b.cleanData(bw.getElementsByTagName("*"));b.cleanData([bw])}if(bw.parentNode){bw.parentNode.removeChild(bw)}}}return this},empty:function(){for(var e=0,bv;(bv=this[e])!=null;e++){if(bv.nodeType===1){b.cleanData(bv.getElementsByTagName("*"))}while(bv.firstChild){bv.removeChild(bv.firstChild)}}return this},clone:function(bv,e){bv=bv==null?false:bv;e=e==null?bv:e;return this.map(function(){return b.clone(this,bv,e)})},html:function(bx){if(bx===L){return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(ag,""):null}else{if(typeof bx==="string"&&!ae.test(bx)&&(b.support.leadingWhitespace||!ar.test(bx))&&!ax[(d.exec(bx)||["",""])[1].toLowerCase()]){bx=bx.replace(R,"<$1>");try{for(var bw=0,bv=this.length;bw1&&bw0?this.clone(true):this).get();b(bC[bA])[bv](by);bz=bz.concat(by)}return this.pushStack(bz,e,bC.selector)}}});function bg(e){if(typeof e.getElementsByTagName!=="undefined"){return e.getElementsByTagName("*")}else{if(typeof e.querySelectorAll!=="undefined"){return e.querySelectorAll("*")}else{return[]}}}function az(e){if(e.type==="checkbox"||e.type==="radio"){e.defaultChecked=e.checked}}function E(e){var bv=(e.nodeName||"").toLowerCase();if(bv==="input"){az(e)}else{if(bv!=="script"&&typeof e.getElementsByTagName!=="undefined"){b.grep(e.getElementsByTagName("input"),az)}}}function al(e){var bv=av.createElement("div");ac.appendChild(bv);bv.innerHTML=e.outerHTML;return bv.firstChild}b.extend({clone:function(by,bA,bw){var e,bv,bx,bz=b.support.html5Clone||!ah.test("<"+by.nodeName)?by.cloneNode(true):al(by);if((!b.support.noCloneEvent||!b.support.noCloneChecked)&&(by.nodeType===1||by.nodeType===11)&&!b.isXMLDoc(by)){ai(by,bz);e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){if(bv[bx]){ai(e[bx],bv[bx])}}}if(bA){t(by,bz);if(bw){e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){t(e[bx],bv[bx])}}}e=bv=null;return bz},clean:function(bw,by,bH,bA){var bF;by=by||av;if(typeof by.createElement==="undefined"){by=by.ownerDocument||by[0]&&by[0].ownerDocument||av}var bI=[],bB;for(var bE=0,bz;(bz=bw[bE])!=null;bE++){if(typeof bz==="number"){bz+=""}if(!bz){continue}if(typeof bz==="string"){if(!W.test(bz)){bz=by.createTextNode(bz)}else{bz=bz.replace(R,"<$1>");var bK=(d.exec(bz)||["",""])[1].toLowerCase(),bx=ax[bK]||ax._default,bD=bx[0],bv=by.createElement("div");if(by===av){ac.appendChild(bv)}else{a(by).appendChild(bv)}bv.innerHTML=bx[1]+bz+bx[2];while(bD--){bv=bv.lastChild}if(!b.support.tbody){var e=w.test(bz),bC=bK==="table"&&!e?bv.firstChild&&bv.firstChild.childNodes:bx[1]===""&&!e?bv.childNodes:[];for(bB=bC.length-1;bB>=0;--bB){if(b.nodeName(bC[bB],"tbody")&&!bC[bB].childNodes.length){bC[bB].parentNode.removeChild(bC[bB])}}}if(!b.support.leadingWhitespace&&ar.test(bz)){bv.insertBefore(by.createTextNode(ar.exec(bz)[0]),bv.firstChild)}bz=bv.childNodes}}var bG;if(!b.support.appendChecked){if(bz[0]&&typeof(bG=bz.length)==="number"){for(bB=0;bB=0){return bx+"px"}}else{return bx}}}});if(!b.support.opacity){b.cssHooks.opacity={get:function(bv,e){return au.test((e&&bv.currentStyle?bv.currentStyle.filter:bv.style.filter)||"")?(parseFloat(RegExp.$1)/100)+"":e?"1":""},set:function(by,bz){var bx=by.style,bv=by.currentStyle,e=b.isNumeric(bz)?"alpha(opacity="+bz*100+")":"",bw=bv&&bv.filter||bx.filter||"";bx.zoom=1;if(bz>=1&&b.trim(bw.replace(ak,""))===""){bx.removeAttribute("filter");if(bv&&!bv.filter){return}}bx.filter=ak.test(bw)?bw.replace(ak,e):bw+" "+e}}}b(function(){if(!b.support.reliableMarginRight){b.cssHooks.marginRight={get:function(bw,bv){var e;b.swap(bw,{display:"inline-block"},function(){if(bv){e=Z(bw,"margin-right","marginRight")}else{e=bw.style.marginRight}});return e}}}});if(av.defaultView&&av.defaultView.getComputedStyle){aI=function(by,bw){var bv,bx,e;bw=bw.replace(z,"-$1").toLowerCase();if((bx=by.ownerDocument.defaultView)&&(e=bx.getComputedStyle(by,null))){bv=e.getPropertyValue(bw);if(bv===""&&!b.contains(by.ownerDocument.documentElement,by)){bv=b.style(by,bw)}}return bv}}if(av.documentElement.currentStyle){aX=function(bz,bw){var bA,e,by,bv=bz.currentStyle&&bz.currentStyle[bw],bx=bz.style;if(bv===null&&bx&&(by=bx[bw])){bv=by}if(!bc.test(bv)&&bn.test(bv)){bA=bx.left;e=bz.runtimeStyle&&bz.runtimeStyle.left;if(e){bz.runtimeStyle.left=bz.currentStyle.left}bx.left=bw==="fontSize"?"1em":(bv||0);bv=bx.pixelLeft+"px";bx.left=bA;if(e){bz.runtimeStyle.left=e}}return bv===""?"auto":bv}}Z=aI||aX;function p(by,bw,bv){var bA=bw==="width"?by.offsetWidth:by.offsetHeight,bz=bw==="width"?an:a1,bx=0,e=bz.length; -if(bA>0){if(bv!=="border"){for(;bx)<[^<]*)*<\/script>/gi,q=/^(?:select|textarea)/i,h=/\s+/,br=/([?&])_=[^&]*/,K=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,A=b.fn.load,aa={},r={},aE,s,aV=["*/"]+["*"];try{aE=bl.href}catch(aw){aE=av.createElement("a");aE.href="";aE=aE.href}s=K.exec(aE.toLowerCase())||[];function f(e){return function(by,bA){if(typeof by!=="string"){bA=by;by="*"}if(b.isFunction(bA)){var bx=by.toLowerCase().split(h),bw=0,bz=bx.length,bv,bB,bC;for(;bw=0){var e=bw.slice(by,bw.length);bw=bw.slice(0,by)}var bx="GET";if(bz){if(b.isFunction(bz)){bA=bz;bz=L}else{if(typeof bz==="object"){bz=b.param(bz,b.ajaxSettings.traditional);bx="POST"}}}var bv=this;b.ajax({url:bw,type:bx,dataType:"html",data:bz,complete:function(bC,bB,bD){bD=bC.responseText;if(bC.isResolved()){bC.done(function(bE){bD=bE});bv.html(e?b("
").append(bD.replace(a6,"")).find(e):bD)}if(bA){bv.each(bA,[bD,bB,bC])}}});return this},serialize:function(){return b.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?b.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||q.test(this.nodeName)||aZ.test(this.type))}).map(function(e,bv){var bw=b(this).val();return bw==null?null:b.isArray(bw)?b.map(bw,function(by,bx){return{name:bv.name,value:by.replace(bs,"\r\n")}}):{name:bv.name,value:bw.replace(bs,"\r\n")}}).get()}});b.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(e,bv){b.fn[bv]=function(bw){return this.on(bv,bw)}});b.each(["get","post"],function(e,bv){b[bv]=function(bw,by,bz,bx){if(b.isFunction(by)){bx=bx||bz;bz=by;by=L}return b.ajax({type:bv,url:bw,data:by,success:bz,dataType:bx})}});b.extend({getScript:function(e,bv){return b.get(e,L,bv,"script")},getJSON:function(e,bv,bw){return b.get(e,bv,bw,"json")},ajaxSetup:function(bv,e){if(e){am(bv,b.ajaxSettings)}else{e=bv;bv=b.ajaxSettings}am(bv,e);return bv},ajaxSettings:{url:aE,isLocal:aM.test(s[1]),global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":aV},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":bb.String,"text html":true,"text json":b.parseJSON,"text xml":b.parseXML},flatOptions:{context:true,url:true}},ajaxPrefilter:f(aa),ajaxTransport:f(r),ajax:function(bz,bx){if(typeof bz==="object"){bx=bz;bz=L}bx=bx||{};var bD=b.ajaxSetup({},bx),bS=bD.context||bD,bG=bS!==bD&&(bS.nodeType||bS instanceof b)?b(bS):b.event,bR=b.Deferred(),bN=b.Callbacks("once memory"),bB=bD.statusCode||{},bC,bH={},bO={},bQ,by,bL,bE,bI,bA=0,bw,bK,bJ={readyState:0,setRequestHeader:function(bT,bU){if(!bA){var e=bT.toLowerCase();bT=bO[e]=bO[e]||bT;bH[bT]=bU}return this},getAllResponseHeaders:function(){return bA===2?bQ:null},getResponseHeader:function(bT){var e;if(bA===2){if(!by){by={};while((e=aD.exec(bQ))){by[e[1].toLowerCase()]=e[2]}}e=by[bT.toLowerCase()]}return e===L?null:e},overrideMimeType:function(e){if(!bA){bD.mimeType=e}return this},abort:function(e){e=e||"abort";if(bL){bL.abort(e)}bF(0,e);return this}};function bF(bZ,bU,b0,bW){if(bA===2){return}bA=2;if(bE){clearTimeout(bE)}bL=L;bQ=bW||"";bJ.readyState=bZ>0?4:0;var bT,b4,b3,bX=bU,bY=b0?bj(bD,bJ,b0):L,bV,b2;if(bZ>=200&&bZ<300||bZ===304){if(bD.ifModified){if((bV=bJ.getResponseHeader("Last-Modified"))){b.lastModified[bC]=bV}if((b2=bJ.getResponseHeader("Etag"))){b.etag[bC]=b2}}if(bZ===304){bX="notmodified";bT=true}else{try{b4=G(bD,bY);bX="success";bT=true}catch(b1){bX="parsererror";b3=b1}}}else{b3=bX;if(!bX||bZ){bX="error";if(bZ<0){bZ=0}}}bJ.status=bZ;bJ.statusText=""+(bU||bX);if(bT){bR.resolveWith(bS,[b4,bX,bJ])}else{bR.rejectWith(bS,[bJ,bX,b3])}bJ.statusCode(bB);bB=L;if(bw){bG.trigger("ajax"+(bT?"Success":"Error"),[bJ,bD,bT?b4:b3])}bN.fireWith(bS,[bJ,bX]);if(bw){bG.trigger("ajaxComplete",[bJ,bD]);if(!(--b.active)){b.event.trigger("ajaxStop")}}}bR.promise(bJ);bJ.success=bJ.done;bJ.error=bJ.fail;bJ.complete=bN.add;bJ.statusCode=function(bT){if(bT){var e;if(bA<2){for(e in bT){bB[e]=[bB[e],bT[e]]}}else{e=bT[bJ.status];bJ.then(e,e)}}return this};bD.url=((bz||bD.url)+"").replace(bq,"").replace(c,s[1]+"//");bD.dataTypes=b.trim(bD.dataType||"*").toLowerCase().split(h);if(bD.crossDomain==null){bI=K.exec(bD.url.toLowerCase());bD.crossDomain=!!(bI&&(bI[1]!=s[1]||bI[2]!=s[2]||(bI[3]||(bI[1]==="http:"?80:443))!=(s[3]||(s[1]==="http:"?80:443))))}if(bD.data&&bD.processData&&typeof bD.data!=="string"){bD.data=b.param(bD.data,bD.traditional)}aW(aa,bD,bx,bJ);if(bA===2){return false}bw=bD.global;bD.type=bD.type.toUpperCase();bD.hasContent=!aQ.test(bD.type);if(bw&&b.active++===0){b.event.trigger("ajaxStart")}if(!bD.hasContent){if(bD.data){bD.url+=(M.test(bD.url)?"&":"?")+bD.data;delete bD.data}bC=bD.url;if(bD.cache===false){var bv=b.now(),bP=bD.url.replace(br,"$1_="+bv);bD.url=bP+((bP===bD.url)?(M.test(bD.url)?"&":"?")+"_="+bv:"")}}if(bD.data&&bD.hasContent&&bD.contentType!==false||bx.contentType){bJ.setRequestHeader("Content-Type",bD.contentType)}if(bD.ifModified){bC=bC||bD.url;if(b.lastModified[bC]){bJ.setRequestHeader("If-Modified-Since",b.lastModified[bC])}if(b.etag[bC]){bJ.setRequestHeader("If-None-Match",b.etag[bC])}}bJ.setRequestHeader("Accept",bD.dataTypes[0]&&bD.accepts[bD.dataTypes[0]]?bD.accepts[bD.dataTypes[0]]+(bD.dataTypes[0]!=="*"?", "+aV+"; q=0.01":""):bD.accepts["*"]);for(bK in bD.headers){bJ.setRequestHeader(bK,bD.headers[bK])}if(bD.beforeSend&&(bD.beforeSend.call(bS,bJ,bD)===false||bA===2)){bJ.abort();return false}for(bK in {success:1,error:1,complete:1}){bJ[bK](bD[bK])}bL=aW(r,bD,bx,bJ);if(!bL){bF(-1,"No Transport")}else{bJ.readyState=1;if(bw){bG.trigger("ajaxSend",[bJ,bD])}if(bD.async&&bD.timeout>0){bE=setTimeout(function(){bJ.abort("timeout")},bD.timeout)}try{bA=1;bL.send(bH,bF)}catch(bM){if(bA<2){bF(-1,bM)}else{throw bM}}}return bJ},param:function(e,bw){var bv=[],by=function(bz,bA){bA=b.isFunction(bA)?bA():bA;bv[bv.length]=encodeURIComponent(bz)+"="+encodeURIComponent(bA)};if(bw===L){bw=b.ajaxSettings.traditional}if(b.isArray(e)||(e.jquery&&!b.isPlainObject(e))){b.each(e,function(){by(this.name,this.value)})}else{for(var bx in e){v(bx,e[bx],bw,by)}}return bv.join("&").replace(k,"+")}});function v(bw,by,bv,bx){if(b.isArray(by)){b.each(by,function(bA,bz){if(bv||ap.test(bw)){bx(bw,bz)}else{v(bw+"["+(typeof bz==="object"||b.isArray(bz)?bA:"")+"]",bz,bv,bx)}})}else{if(!bv&&by!=null&&typeof by==="object"){for(var e in by){v(bw+"["+e+"]",by[e],bv,bx)}}else{bx(bw,by)}}}b.extend({active:0,lastModified:{},etag:{}});function bj(bD,bC,bz){var bv=bD.contents,bB=bD.dataTypes,bw=bD.responseFields,by,bA,bx,e;for(bA in bw){if(bA in bz){bC[bw[bA]]=bz[bA]}}while(bB[0]==="*"){bB.shift();if(by===L){by=bD.mimeType||bC.getResponseHeader("content-type")}}if(by){for(bA in bv){if(bv[bA]&&bv[bA].test(by)){bB.unshift(bA);break}}}if(bB[0] in bz){bx=bB[0]}else{for(bA in bz){if(!bB[0]||bD.converters[bA+" "+bB[0]]){bx=bA;break}if(!e){e=bA}}bx=bx||e}if(bx){if(bx!==bB[0]){bB.unshift(bx)}return bz[bx]}}function G(bH,bz){if(bH.dataFilter){bz=bH.dataFilter(bz,bH.dataType)}var bD=bH.dataTypes,bG={},bA,bE,bw=bD.length,bB,bC=bD[0],bx,by,bF,bv,e;for(bA=1;bA=bw.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();bw.animatedProperties[this.prop]=true;for(bA in bw.animatedProperties){if(bw.animatedProperties[bA]!==true){e=false}}if(e){if(bw.overflow!=null&&!b.support.shrinkWrapBlocks){b.each(["","X","Y"],function(bC,bD){bz.style["overflow"+bD]=bw.overflow[bC]})}if(bw.hide){b(bz).hide()}if(bw.hide||bw.show){for(bA in bw.animatedProperties){b.style(bz,bA,bw.orig[bA]);b.removeData(bz,"fxshow"+bA,true);b.removeData(bz,"toggle"+bA,true)}}bv=bw.complete;if(bv){bw.complete=false;bv.call(bz)}}return false}else{if(bw.duration==Infinity){this.now=bx}else{bB=bx-this.startTime;this.state=bB/bw.duration;this.pos=b.easing[bw.animatedProperties[this.prop]](this.state,bB,0,1,bw.duration);this.now=this.start+((this.end-this.start)*this.pos)}this.update()}return true}};b.extend(b.fx,{tick:function(){var bw,bv=b.timers,e=0;for(;e").appendTo(e),bw=bv.css("display");bv.remove();if(bw==="none"||bw===""){if(!a8){a8=av.createElement("iframe");a8.frameBorder=a8.width=a8.height=0}e.appendChild(a8);if(!m||!a8.createElement){m=(a8.contentWindow||a8.contentDocument).document;m.write((av.compatMode==="CSS1Compat"?"":"")+"");m.close()}bv=m.createElement(bx);m.body.appendChild(bv);bw=b.css(bv,"display");e.removeChild(a8)}Q[bx]=bw}return Q[bx]}var V=/^t(?:able|d|h)$/i,ad=/^(?:body|html)$/i;if("getBoundingClientRect" in av.documentElement){b.fn.offset=function(bI){var by=this[0],bB;if(bI){return this.each(function(e){b.offset.setOffset(this,bI,e)})}if(!by||!by.ownerDocument){return null}if(by===by.ownerDocument.body){return b.offset.bodyOffset(by)}try{bB=by.getBoundingClientRect()}catch(bF){}var bH=by.ownerDocument,bw=bH.documentElement;if(!bB||!b.contains(bw,by)){return bB?{top:bB.top,left:bB.left}:{top:0,left:0}}var bC=bH.body,bD=aK(bH),bA=bw.clientTop||bC.clientTop||0,bE=bw.clientLeft||bC.clientLeft||0,bv=bD.pageYOffset||b.support.boxModel&&bw.scrollTop||bC.scrollTop,bz=bD.pageXOffset||b.support.boxModel&&bw.scrollLeft||bC.scrollLeft,bG=bB.top+bv-bA,bx=bB.left+bz-bE;return{top:bG,left:bx}}}else{b.fn.offset=function(bF){var bz=this[0];if(bF){return this.each(function(bG){b.offset.setOffset(this,bF,bG)})}if(!bz||!bz.ownerDocument){return null}if(bz===bz.ownerDocument.body){return b.offset.bodyOffset(bz)}var bC,bw=bz.offsetParent,bv=bz,bE=bz.ownerDocument,bx=bE.documentElement,bA=bE.body,bB=bE.defaultView,e=bB?bB.getComputedStyle(bz,null):bz.currentStyle,bD=bz.offsetTop,by=bz.offsetLeft;while((bz=bz.parentNode)&&bz!==bA&&bz!==bx){if(b.support.fixedPosition&&e.position==="fixed"){break}bC=bB?bB.getComputedStyle(bz,null):bz.currentStyle;bD-=bz.scrollTop;by-=bz.scrollLeft;if(bz===bw){bD+=bz.offsetTop;by+=bz.offsetLeft;if(b.support.doesNotAddBorder&&!(b.support.doesAddBorderForTableAndCells&&V.test(bz.nodeName))){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}bv=bw;bw=bz.offsetParent}if(b.support.subtractsBorderForOverflowNotVisible&&bC.overflow!=="visible"){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}e=bC}if(e.position==="relative"||e.position==="static"){bD+=bA.offsetTop;by+=bA.offsetLeft}if(b.support.fixedPosition&&e.position==="fixed"){bD+=Math.max(bx.scrollTop,bA.scrollTop);by+=Math.max(bx.scrollLeft,bA.scrollLeft)}return{top:bD,left:by}}}b.offset={bodyOffset:function(e){var bw=e.offsetTop,bv=e.offsetLeft;if(b.support.doesNotIncludeMarginInBodyOffset){bw+=parseFloat(b.css(e,"marginTop"))||0;bv+=parseFloat(b.css(e,"marginLeft"))||0}return{top:bw,left:bv}},setOffset:function(bx,bG,bA){var bB=b.css(bx,"position");if(bB==="static"){bx.style.position="relative"}var bz=b(bx),bv=bz.offset(),e=b.css(bx,"top"),bE=b.css(bx,"left"),bF=(bB==="absolute"||bB==="fixed")&&b.inArray("auto",[e,bE])>-1,bD={},bC={},bw,by;if(bF){bC=bz.position();bw=bC.top;by=bC.left}else{bw=parseFloat(e)||0;by=parseFloat(bE)||0}if(b.isFunction(bG)){bG=bG.call(bx,bA,bv)}if(bG.top!=null){bD.top=(bG.top-bv.top)+bw}if(bG.left!=null){bD.left=(bG.left-bv.left)+by}if("using" in bG){bG.using.call(bx,bD)}else{bz.css(bD)}}};b.fn.extend({position:function(){if(!this[0]){return null}var bw=this[0],bv=this.offsetParent(),bx=this.offset(),e=ad.test(bv[0].nodeName)?{top:0,left:0}:bv.offset();bx.top-=parseFloat(b.css(bw,"marginTop"))||0;bx.left-=parseFloat(b.css(bw,"marginLeft"))||0;e.top+=parseFloat(b.css(bv[0],"borderTopWidth"))||0;e.left+=parseFloat(b.css(bv[0],"borderLeftWidth"))||0;return{top:bx.top-e.top,left:bx.left-e.left}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||av.body;while(e&&(!ad.test(e.nodeName)&&b.css(e,"position")==="static")){e=e.offsetParent}return e})}});b.each(["Left","Top"],function(bv,e){var bw="scroll"+e;b.fn[bw]=function(bz){var bx,by;if(bz===L){bx=this[0];if(!bx){return null}by=aK(bx);return by?("pageXOffset" in by)?by[bv?"pageYOffset":"pageXOffset"]:b.support.boxModel&&by.document.documentElement[bw]||by.document.body[bw]:bx[bw]}return this.each(function(){by=aK(this);if(by){by.scrollTo(!bv?bz:b(by).scrollLeft(),bv?bz:b(by).scrollTop())}else{this[bw]=bz}})}});function aK(e){return b.isWindow(e)?e:e.nodeType===9?e.defaultView||e.parentWindow:false}b.each(["Height","Width"],function(bv,e){var bw=e.toLowerCase();b.fn["inner"+e]=function(){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,"padding")):this[bw]():null};b.fn["outer"+e]=function(by){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,by?"margin":"border")):this[bw]():null};b.fn[bw]=function(bz){var bA=this[0];if(!bA){return bz==null?null:this}if(b.isFunction(bz)){return this.each(function(bE){var bD=b(this);bD[bw](bz.call(this,bE,bD[bw]()))})}if(b.isWindow(bA)){var bB=bA.document.documentElement["client"+e],bx=bA.document.body;return bA.document.compatMode==="CSS1Compat"&&bB||bx&&bx["client"+e]||bB}else{if(bA.nodeType===9){return Math.max(bA.documentElement["client"+e],bA.body["scroll"+e],bA.documentElement["scroll"+e],bA.body["offset"+e],bA.documentElement["offset"+e])}else{if(bz===L){var bC=b.css(bA,bw),by=parseFloat(bC);return b.isNumeric(by)?by:bC}else{return this.css(bw,typeof bz==="string"?bz:bz+"px")}}}}});bb.jQuery=bb.$=b;if(typeof define==="function"&&define.amd&&define.amd.jQuery){define("jquery",[],function(){return b -})}})(window); -/*! - PowerTip - v1.2.0 - 2013-04-03 - http://stevenbenner.github.com/jquery-powertip/ - Copyright (c) 2013 Steven Benner (http://stevenbenner.com/). - Released under MIT license. - https://raw.github.com/stevenbenner/jquery-powertip/master/LICENSE.txt -*/ -(function(a){if(typeof define==="function"&&define.amd){define(["jquery"],a)}else{a(jQuery)}}(function(k){var A=k(document),s=k(window),w=k("body");var n="displayController",e="hasActiveHover",d="forcedOpen",u="hasMouseMove",f="mouseOnToPopup",g="originalTitle",y="powertip",o="powertipjq",l="powertiptarget",E=180/Math.PI;var c={isTipOpen:false,isFixedTipOpen:false,isClosing:false,tipOpenImminent:false,activeHover:null,currentX:0,currentY:0,previousX:0,previousY:0,desyncTimeout:null,mouseTrackingActive:false,delayInProgress:false,windowWidth:0,windowHeight:0,scrollTop:0,scrollLeft:0};var p={none:0,top:1,bottom:2,left:4,right:8};k.fn.powerTip=function(F,N){if(!this.length){return this}if(k.type(F)==="string"&&k.powerTip[F]){return k.powerTip[F].call(this,this,N)}var O=k.extend({},k.fn.powerTip.defaults,F),G=new x(O);h();this.each(function M(){var R=k(this),Q=R.data(y),P=R.data(o),T=R.data(l),S;if(R.data(n)){k.powerTip.destroy(R)}S=R.attr("title");if(!Q&&!T&&!P&&S){R.data(y,S);R.data(g,S);R.removeAttr("title")}R.data(n,new t(R,O,G))});if(!O.manual){this.on({"mouseenter.powertip":function J(P){k.powerTip.show(this,P)},"mouseleave.powertip":function L(){k.powerTip.hide(this)},"focus.powertip":function K(){k.powerTip.show(this)},"blur.powertip":function H(){k.powerTip.hide(this,true)},"keydown.powertip":function I(P){if(P.keyCode===27){k.powerTip.hide(this,true)}}})}return this};k.fn.powerTip.defaults={fadeInTime:200,fadeOutTime:100,followMouse:false,popupId:"powerTip",intentSensitivity:7,intentPollInterval:100,closeDelay:100,placement:"n",smartPlacement:false,offset:10,mouseOnToPopup:false,manual:false};k.fn.powerTip.smartPlacementLists={n:["n","ne","nw","s"],e:["e","ne","se","w","nw","sw","n","s","e"],s:["s","se","sw","n"],w:["w","nw","sw","e","ne","se","n","s","w"],nw:["nw","w","sw","n","s","se","nw"],ne:["ne","e","se","n","s","sw","ne"],sw:["sw","w","nw","s","n","ne","sw"],se:["se","e","ne","s","n","nw","se"],"nw-alt":["nw-alt","n","ne-alt","sw-alt","s","se-alt","w","e"],"ne-alt":["ne-alt","n","nw-alt","se-alt","s","sw-alt","e","w"],"sw-alt":["sw-alt","s","se-alt","nw-alt","n","ne-alt","w","e"],"se-alt":["se-alt","s","sw-alt","ne-alt","n","nw-alt","e","w"]};k.powerTip={show:function z(F,G){if(G){i(G);c.previousX=G.pageX;c.previousY=G.pageY;k(F).data(n).show()}else{k(F).first().data(n).show(true,true)}return F},reposition:function r(F){k(F).first().data(n).resetPosition();return F},hide:function D(G,F){if(G){k(G).first().data(n).hide(F)}else{if(c.activeHover){c.activeHover.data(n).hide(true)}}return G},destroy:function C(G){k(G).off(".powertip").each(function F(){var I=k(this),H=[g,n,e,d];if(I.data(g)){I.attr("title",I.data(g));H.push(y)}I.removeData(H)});return G}};k.powerTip.showTip=k.powerTip.show;k.powerTip.closeTip=k.powerTip.hide;function b(){var F=this;F.top="auto";F.left="auto";F.right="auto";F.bottom="auto";F.set=function(H,G){if(k.isNumeric(G)){F[H]=Math.round(G)}}}function t(K,N,F){var J=null;function L(P,Q){M();if(!K.data(e)){if(!P){c.tipOpenImminent=true;J=setTimeout(function O(){J=null;I()},N.intentPollInterval)}else{if(Q){K.data(d,true)}F.showTip(K)}}}function G(P){M();c.tipOpenImminent=false;if(K.data(e)){K.data(d,false);if(!P){c.delayInProgress=true;J=setTimeout(function O(){J=null;F.hideTip(K);c.delayInProgress=false},N.closeDelay)}else{F.hideTip(K)}}}function I(){var Q=Math.abs(c.previousX-c.currentX),O=Math.abs(c.previousY-c.currentY),P=Q+O;if(P",{id:Q.popupId});if(w.length===0){w=k("body")}w.append(O)}if(Q.followMouse){if(!O.data(u)){A.on("mousemove",M);s.on("scroll",M);O.data(u,true)}}if(Q.mouseOnToPopup){O.on({mouseenter:function L(){if(O.data(f)){if(c.activeHover){c.activeHover.data(n).cancel()}}},mouseleave:function N(){if(c.activeHover){c.activeHover.data(n).hide()}}})}function I(S){S.data(e,true);O.queue(function R(T){H(S);T()})}function H(S){var U;if(!S.data(e)){return}if(c.isTipOpen){if(!c.isClosing){K(c.activeHover)}O.delay(100).queue(function R(V){H(S);V()});return}S.trigger("powerTipPreRender");U=B(S);if(U){O.empty().append(U)}else{return}S.trigger("powerTipRender");c.activeHover=S;c.isTipOpen=true;O.data(f,Q.mouseOnToPopup);if(!Q.followMouse){G(S);c.isFixedTipOpen=true}else{M()}O.fadeIn(Q.fadeInTime,function T(){if(!c.desyncTimeout){c.desyncTimeout=setInterval(J,500)}S.trigger("powerTipOpen")})}function K(R){c.isClosing=true;c.activeHover=null;c.isTipOpen=false;c.desyncTimeout=clearInterval(c.desyncTimeout);R.data(e,false);R.data(d,false);O.fadeOut(Q.fadeOutTime,function S(){var T=new b();c.isClosing=false;c.isFixedTipOpen=false;O.removeClass();T.set("top",c.currentY+Q.offset);T.set("left",c.currentX+Q.offset);O.css(T);R.trigger("powerTipClose")})}function M(){if(!c.isFixedTipOpen&&(c.isTipOpen||(c.tipOpenImminent&&O.data(u)))){var R=O.outerWidth(),V=O.outerHeight(),U=new b(),S,T;U.set("top",c.currentY+Q.offset);U.set("left",c.currentX+Q.offset);S=m(U,R,V);if(S!==p.none){T=a(S);if(T===1){if(S===p.right){U.set("left",c.windowWidth-R)}else{if(S===p.bottom){U.set("top",c.scrollTop+c.windowHeight-V)}}}else{U.set("left",c.currentX-R-Q.offset);U.set("top",c.currentY-V-Q.offset)}}O.css(U)}}function G(S){var R,T;if(Q.smartPlacement){R=k.fn.powerTip.smartPlacementLists[Q.placement];k.each(R,function(U,W){var V=m(F(S,W),O.outerWidth(),O.outerHeight());T=W;if(V===p.none){return false}})}else{F(S,Q.placement);T=Q.placement}O.addClass(T)}function F(U,T){var R=0,S,W,V=new b();V.set("top",0);V.set("left",0);O.css(V);do{S=O.outerWidth();W=O.outerHeight();V=P.compute(U,T,S,W,Q.offset);O.css(V)}while(++R<=5&&(S!==O.outerWidth()||W!==O.outerHeight()));return V}function J(){var R=false;if(c.isTipOpen&&!c.isClosing&&!c.delayInProgress){if(c.activeHover.data(e)===false||c.activeHover.is(":disabled")){R=true}else{if(!v(c.activeHover)&&!c.activeHover.is(":focus")&&!c.activeHover.data(d)){if(O.data(f)){if(!v(O)){R=true}}else{R=true}}}if(R){K(c.activeHover)}}}this.showTip=I;this.hideTip=K;this.resetPosition=G}function q(F){return window.SVGElement&&F[0] instanceof SVGElement}function h(){if(!c.mouseTrackingActive){c.mouseTrackingActive=true;k(function H(){c.scrollLeft=s.scrollLeft();c.scrollTop=s.scrollTop();c.windowWidth=s.width();c.windowHeight=s.height()});A.on("mousemove",i);s.on({resize:function G(){c.windowWidth=s.width();c.windowHeight=s.height()},scroll:function F(){var I=s.scrollLeft(),J=s.scrollTop();if(I!==c.scrollLeft){c.currentX+=I-c.scrollLeft;c.scrollLeft=I}if(J!==c.scrollTop){c.currentY+=J-c.scrollTop;c.scrollTop=J}}})}}function i(F){c.currentX=F.pageX;c.currentY=F.pageY}function v(F){var H=F.offset(),J=F[0].getBoundingClientRect(),I=J.right-J.left,G=J.bottom-J.top;return c.currentX>=H.left&&c.currentX<=H.left+I&&c.currentY>=H.top&&c.currentY<=H.top+G}function B(I){var G=I.data(y),F=I.data(o),K=I.data(l),H,J;if(G){if(k.isFunction(G)){G=G.call(I[0])}J=G}else{if(F){if(k.isFunction(F)){F=F.call(I[0])}if(F.length>0){J=F.clone(true,true)}}else{if(K){H=k("#"+K);if(H.length>0){J=H.html()}}}}return J}function m(M,L,K){var G=c.scrollTop,J=c.scrollLeft,I=G+c.windowHeight,F=J+c.windowWidth,H=p.none;if(M.topI||Math.abs(M.bottom-c.windowHeight)>I){H|=p.bottom}if(M.leftF){H|=p.left}if(M.left+L>F||M.right - - - - - -WinPcap: main.txt File Reference - - - - - - -
-
-
- - - - - -
-
WinPcap -  4.1.3 -
-
- - - - - - -
-
-
main.txt File Reference
-
-
-
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/modules.html b/libs/WinPcap-413-173-b4/docs/html/modules.html deleted file mode 100644 index f907b40c..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/modules.html +++ /dev/null @@ -1,88 +0,0 @@ - - - - - - -WinPcap: Modules - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - -
-
-
-
Modules
-
- - -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/nav_f.png b/libs/WinPcap-413-173-b4/docs/html/nav_f.png deleted file mode 100644 index 72a58a529ed3a9ed6aa0c51a79cf207e026deee2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 153 zcmeAS@N?(olHy`uVBq!ia0vp^j6iI`!2~2XGqLUlQVE_ejv*C{Z|{2ZH7M}7UYxc) zn!W8uqtnIQ>_z8U diff --git a/libs/WinPcap-413-173-b4/docs/html/nav_g.png b/libs/WinPcap-413-173-b4/docs/html/nav_g.png deleted file mode 100644 index 2093a237a94f6c83e19ec6e5fd42f7ddabdafa81..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 95 zcmeAS@N?(olHy`uVBq!ia0vp^j6lrB!3HFm1ilyoDK$?Q$B+ufw|5PB85lU25BhtE tr?otc=hd~V+ws&_A@j8Fiv!KF$B+ufw|5=67#uj90@pIL wZ=Q8~_Ju`#59=RjDrmm`tMD@M=!-l18IR?&vFVdQ&MBb@0HFXL1|%O$WD@{VPM$7~Ar*{o?;hlAFyLXmaDC0y znK1_#cQqJWPES%4Uujug^TE?jMft$}Eq^WaR~)%f)vSNs&gek&x%A9X9sM - - - - - -WinPcap: Related Pages - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - -
-
-
-
Related Pages
-
-
-
Here is a list of all related documentation pages:
- - -
 Deprecated List
-
-
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/pcap-remote_8h.html b/libs/WinPcap-413-173-b4/docs/html/pcap-remote_8h.html deleted file mode 100644 index f238dafd..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/pcap-remote_8h.html +++ /dev/null @@ -1,730 +0,0 @@ - - - - - - -WinPcap: pcap-remote.h File Reference - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - - - -
-
- -
-
pcap-remote.h File Reference
-
-
-
#include "pcap.h"
-#include "sockutils.h"
-
-

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Data Structures

struct  activehosts
 Keeps a list of all the opened connections in the active mode. More...
 
struct  rpcap_header
 Common header for all the RPCAP messages. More...
 
struct  rpcap_findalldevs_if
 Format of the message for the interface description (findalldevs command) More...
 
struct  rpcap_findalldevs_ifaddr
 Format of the message for the address listing (findalldevs command) More...
 
struct  rpcap_openreply
 Format of the message of the connection opening reply (open command). More...
 
struct  rpcap_startcapreq
 Format of the message that starts a remote capture (startcap command) More...
 
struct  rpcap_startcapreply
 Format of the reply message that devoted to start a remote capture (startcap reply command) More...
 
struct  rpcap_pkthdr
 Format of the header which encapsulates captured packets when transmitted on the network. More...
 
struct  rpcap_filter
 General header used for the pcap_setfilter() command; keeps just the number of BPF instructions. More...
 
struct  rpcap_filterbpf_insn
 Structure that keeps a single BPF instuction; it is repeated 'ninsn' times according to the 'rpcap_filterbpf' header. More...
 
struct  rpcap_auth
 Structure that keeps the data required for the authentication on the remote host. More...
 
struct  rpcap_stats
 Structure that keeps the statistics about the number of packets captured, dropped, etc. More...
 
struct  rpcap_sampling
 Structure that is needed to set sampling parameters. More...
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Macros

#define RPCAP_DEFAULT_NETPORT   "2002"
 
#define RPCAP_DEFAULT_NETPORT_ACTIVE   "2003"
 
#define RPCAP_DEFAULT_NETADDR   ""
 
#define RPCAP_VERSION   0
 
#define RPCAP_TIMEOUT_INIT   90
 
#define RPCAP_TIMEOUT_RUNTIME   180
 
#define RPCAP_ACTIVE_WAIT   30
 
#define RPCAP_SUSPEND_WRONGAUTH   1
 
#define RPCAP_NETBUF_SIZE   64000
 Buffer used by socket functions to send-receive packets. In case you plan to have messages larger than this value, you have to increase it. More...
 
#define RPCAP_HOSTLIST_SEP   " ,;\n\r"
 Separators used for the host list. More...
 
#define RPCAP_MSG_ERROR   1
 
#define RPCAP_MSG_FINDALLIF_REQ   2
 
#define RPCAP_MSG_OPEN_REQ   3
 
#define RPCAP_MSG_STARTCAP_REQ   4
 
#define RPCAP_MSG_UPDATEFILTER_REQ   5
 
#define RPCAP_MSG_CLOSE   6
 
#define RPCAP_MSG_PACKET   7
 
#define RPCAP_MSG_AUTH_REQ   8
 
#define RPCAP_MSG_STATS_REQ   9
 
#define RPCAP_MSG_ENDCAP_REQ   10
 
#define RPCAP_MSG_SETSAMPLING_REQ   11
 
#define RPCAP_MSG_FINDALLIF_REPLY   (128+RPCAP_MSG_FINDALLIF_REQ)
 
#define RPCAP_MSG_OPEN_REPLY   (128+RPCAP_MSG_OPEN_REQ)
 
#define RPCAP_MSG_STARTCAP_REPLY   (128+RPCAP_MSG_STARTCAP_REQ)
 
#define RPCAP_MSG_UPDATEFILTER_REPLY   (128+RPCAP_MSG_UPDATEFILTER_REQ)
 
#define RPCAP_MSG_AUTH_REPLY   (128+RPCAP_MSG_AUTH_REQ)
 
#define RPCAP_MSG_STATS_REPLY   (128+RPCAP_MSG_STATS_REQ)
 
#define RPCAP_MSG_ENDCAP_REPLY   (128+RPCAP_MSG_ENDCAP_REQ)
 
#define RPCAP_MSG_SETSAMPLING_REPLY   (128+RPCAP_MSG_SETSAMPLING_REQ)
 
#define RPCAP_STARTCAPREQ_FLAG_PROMISC   1
 
#define RPCAP_STARTCAPREQ_FLAG_DGRAM   2
 
#define RPCAP_STARTCAPREQ_FLAG_SERVEROPEN   4
 
#define RPCAP_STARTCAPREQ_FLAG_INBOUND   8
 
#define RPCAP_STARTCAPREQ_FLAG_OUTBOUND   16
 
#define RPCAP_UPDATEFILTER_BPF   1
 
#define PCAP_ERR_NETW   1
 
#define PCAP_ERR_INITTIMEOUT   2
 
#define PCAP_ERR_AUTH   3
 
#define PCAP_ERR_FINDALLIF   4
 
#define PCAP_ERR_NOREMOTEIF   5
 
#define PCAP_ERR_OPEN   6
 
#define PCAP_ERR_UPDATEFILTER   7
 
#define PCAP_ERR_GETSTATS   8
 
#define PCAP_ERR_READEX   9
 
#define PCAP_ERR_HOSTNOAUTH   10
 
#define PCAP_ERR_REMOTEACCEPT   11
 
#define PCAP_ERR_STARTCAPTURE   12
 
#define PCAP_ERR_ENDCAPTURE   13
 
#define PCAP_ERR_RUNTIMETIMEOUT   14
 
#define PCAP_ERR_SETSAMPLING   15
 
#define PCAP_ERR_WRONGMSG   16
 
#define PCAP_ERR_WRONGVER   17
 
- - - - - - - - - - - - - -

-Typedefs

typedef unsigned char uint8
 Provides an 8-bits unsigned integer. More...
 
typedef unsigned short uint16
 Provides a 16-bits unsigned integer. More...
 
typedef unsigned int uint32
 Provides a 32-bits unsigned integer. More...
 
typedef int int32
 Provides a 32-bits integer. More...
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

int pcap_opensource_remote (pcap_t *p, struct pcap_rmtauth *auth)
 
int pcap_startcapture_remote (pcap_t *fp)
 
int pcap_read_nocb_remote (pcap_t *p, struct pcap_pkthdr **pkt_header, u_char **pkt_data)
 
int pcap_read_remote (pcap_t *p, int cnt, pcap_handler callback, u_char *user)
 
int pcap_updatefilter_remote (pcap_t *fp, struct bpf_program *prog)
 
int pcap_setfilter_remote (pcap_t *fp, struct bpf_program *prog)
 
int pcap_stats_remote (pcap_t *p, struct pcap_stat *ps)
 
int pcap_setsampling_remote (pcap_t *p)
 
struct pcap_statpcap_stats_ex_remote (pcap_t *p)
 
void pcap_cleanup_remote (pcap_t *p)
 
void rpcap_createhdr (struct rpcap_header *header, uint8 type, uint16 value, uint32 length)
 
int rpcap_deseraddr (struct sockaddr_storage *sockaddrin, struct sockaddr_storage **sockaddrout, char *errbuf)
 
int rpcap_checkmsg (char *errbuf, SOCKET sock, struct rpcap_header *header, uint8 first,...)
 
int rpcap_senderror (SOCKET sock, char *error, unsigned short errcode, char *errbuf)
 
int rpcap_sendauth (SOCKET sock, struct pcap_rmtauth *auth, char *errbuf)
 
int rpcap_remoteact_getsock (const char *host, char *errbuf)
 
-

Detailed Description

-

This file keeps all the new definitions and typedefs that are exported to the user and that are needed for the RPCAP protocol.

-
Warning
All the RPCAP functions that are allowed to return a buffer containing the error description can return max PCAP_ERRBUF_SIZE characters. However there is no guarantees that the string will be zero-terminated. Best practice is to define the errbuf variable as a char of size 'PCAP_ERRBUF_SIZE+1' and to insert manually the termination char at the end of the buffer. This will guarantee that no buffer overflows occur even if we use the printf() to show the error on the screen.
-
-This file declares some typedefs that MUST be of a specific size. These definitions (i.e. typedefs) could need to be changed on other platforms than Intel IA32.
-
-This file defines some structures that are used to transfer data on the network. Be careful that you compiler MUST not insert padding into these structures for better alignment. These structures have been created in order to be correctly aligned to a 32 bits boundary, but be careful in any case.
- -

Definition in file pcap-remote.h.

-

Function Documentation

- -
-
- - - - - - - - -
void pcap_cleanup_remote (pcap_tp)
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
int pcap_opensource_remote (pcap_tp,
struct pcap_rmtauth * auth 
)
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
int pcap_read_nocb_remote (pcap_tp,
struct pcap_pkthdr ** pkt_header,
u_char ** pkt_data 
)
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
int pcap_read_remote (pcap_tp,
int cnt,
pcap_handler callback,
u_char * user 
)
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
int pcap_setfilter_remote (pcap_tfp,
struct bpf_program * prog 
)
-
- -
-
- -
-
- - - - - - - - -
int pcap_setsampling_remote (pcap_tp)
-
- -
-
- -
-
- - - - - - - - -
int pcap_startcapture_remote (pcap_tfp)
-
- -
-
- -
-
- - - - - - - - -
struct pcap_stat* pcap_stats_ex_remote (pcap_tp)
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
int pcap_stats_remote (pcap_tp,
struct pcap_statps 
)
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
int pcap_updatefilter_remote (pcap_tfp,
struct bpf_program * prog 
)
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
int rpcap_checkmsg (char * errbuf,
SOCKET sock,
struct rpcap_headerheader,
uint8 first,
 ... 
)
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void rpcap_createhdr (struct rpcap_headerheader,
uint8 type,
uint16 value,
uint32 length 
)
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
int rpcap_deseraddr (struct sockaddr_storage * sockaddrin,
struct sockaddr_storage ** sockaddrout,
char * errbuf 
)
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
int rpcap_remoteact_getsock (const char * host,
char * errbuf 
)
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
int rpcap_sendauth (SOCKET sock,
struct pcap_rmtauth * auth,
char * errbuf 
)
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
int rpcap_senderror (SOCKET sock,
char * error,
unsigned short errcode,
char * errbuf 
)
-
- -
-
-
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/pcap-remote_8h_source.html b/libs/WinPcap-413-173-b4/docs/html/pcap-remote_8h_source.html deleted file mode 100644 index b78e36ec..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/pcap-remote_8h_source.html +++ /dev/null @@ -1,422 +0,0 @@ - - - - - - -WinPcap: pcap-remote.h Source File - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - - - -
-
-
-
pcap-remote.h
-
-
-Go to the documentation of this file.
1 /*
-
2  * Copyright (c) 2002 - 2005 NetGroup, Politecnico di Torino (Italy)
-
3  * Copyright (c) 2005 - 2008 CACE Technologies, Davis (California)
-
4  * All rights reserved.
-
5  *
-
6  * Redistribution and use in source and binary forms, with or without
-
7  * modification, are permitted provided that the following conditions
-
8  * are met:
-
9  *
-
10  * 1. Redistributions of source code must retain the above copyright
-
11  * notice, this list of conditions and the following disclaimer.
-
12  * 2. Redistributions in binary form must reproduce the above copyright
-
13  * notice, this list of conditions and the following disclaimer in the
-
14  * documentation and/or other materials provided with the distribution.
-
15  * 3. Neither the name of the Politecnico di Torino, CACE Technologies
-
16  * nor the names of its contributors may be used to endorse or promote
-
17  * products derived from this software without specific prior written
-
18  * permission.
-
19  *
-
20  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-
21  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-
22  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-
23  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-
24  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-
25  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-
26  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-
27  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-
28  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-
29  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-
30  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
31  *
-
32  */
-
33 
-
34 #ifndef __PCAP_REMOTE_H__
-
35 #define __PCAP_REMOTE_H__
-
36 
-
37 
-
38 #include "pcap.h"
-
39 #include "sockutils.h" // Needed for some structures (like SOCKET, sockaddr_in) which are used here
-
40 
-
41 
-
74 /*********************************************************
-
75  * *
-
76  * General definitions / typedefs for the RPCAP protocol *
-
77  * *
-
78  *********************************************************/
-
79 
-
80 // All the following structures and typedef belongs to the Private Documentation
-
85 #define RPCAP_DEFAULT_NETPORT "2002"
-
87 #define RPCAP_DEFAULT_NETPORT_ACTIVE "2003"
-
88 #define RPCAP_DEFAULT_NETADDR ""
-
89 #define RPCAP_VERSION 0
-
90 #define RPCAP_TIMEOUT_INIT 90
-
91 #define RPCAP_TIMEOUT_RUNTIME 180
-
92 #define RPCAP_ACTIVE_WAIT 30
-
93 #define RPCAP_SUSPEND_WRONGAUTH 1
-
99 #define RPCAP_NETBUF_SIZE 64000
-
100 
-
101 
-
109 #define RPCAP_HOSTLIST_SEP " ,;\n\r"
-
110 
-
111 
-
112 
-
113 
-
114 // WARNING: These could need to be changed on other platforms
-
115 typedef unsigned char uint8;
-
116 typedef unsigned short uint16;
-
117 typedef unsigned int uint32;
-
118 typedef int int32;
-
119 
-
120 
-
121 
-
122 
- -
134 {
-
135  struct sockaddr_storage host;
-
136  SOCKET sockctrl;
-
137  struct activehosts *next;
-
138 };
-
139 
-
140 
-
141 /*********************************************************
-
142  * *
-
143  * Protocol messages formats *
-
144  * *
-
145  *********************************************************/
-
146 // WARNING Take care you compiler does not insert padding for better alignments into these structs
-
147 
-
148 
- -
151 {
- - - - -
156 };
-
157 
-
158 
- -
161 {
- - - - - -
167 };
-
168 
-
169 
- -
172 {
-
173  struct sockaddr_storage addr;
-
174  struct sockaddr_storage netmask;
-
175  struct sockaddr_storage broadaddr;
-
176  struct sockaddr_storage dstaddr;
-
177 };
-
178 
-
179 
-
180 
- -
187 {
- - -
190 };
-
191 
-
192 
-
193 
- -
196 {
- - - - -
201 };
-
202 
-
203 
- -
206 {
- - - -
210 };
-
211 
-
212 
- -
220 {
- - - - - -
226 };
-
227 
-
228 
- -
231 {
- - - -
235 };
-
236 
-
237 
- -
240 {
- - - - -
245 };
-
246 
-
247 
- -
250 {
- - - - -
255 };
-
256 
-
257 
- -
260 {
- - - - -
265 };
-
266 
-
267 
- -
270 {
- - - - -
275 };
-
276 
-
277 
-
278 
-
279 // Messages field coding
-
280 #define RPCAP_MSG_ERROR 1
-
281 #define RPCAP_MSG_FINDALLIF_REQ 2
-
282 #define RPCAP_MSG_OPEN_REQ 3
-
283 #define RPCAP_MSG_STARTCAP_REQ 4
-
284 #define RPCAP_MSG_UPDATEFILTER_REQ 5
-
285 #define RPCAP_MSG_CLOSE 6
-
286 #define RPCAP_MSG_PACKET 7
-
287 #define RPCAP_MSG_AUTH_REQ 8
-
288 #define RPCAP_MSG_STATS_REQ 9
-
289 #define RPCAP_MSG_ENDCAP_REQ 10
-
290 #define RPCAP_MSG_SETSAMPLING_REQ 11
-
292 #define RPCAP_MSG_FINDALLIF_REPLY (128+RPCAP_MSG_FINDALLIF_REQ)
-
293 #define RPCAP_MSG_OPEN_REPLY (128+RPCAP_MSG_OPEN_REQ)
-
294 #define RPCAP_MSG_STARTCAP_REPLY (128+RPCAP_MSG_STARTCAP_REQ)
-
295 #define RPCAP_MSG_UPDATEFILTER_REPLY (128+RPCAP_MSG_UPDATEFILTER_REQ)
-
296 #define RPCAP_MSG_AUTH_REPLY (128+RPCAP_MSG_AUTH_REQ)
-
297 #define RPCAP_MSG_STATS_REPLY (128+RPCAP_MSG_STATS_REQ)
-
298 #define RPCAP_MSG_ENDCAP_REPLY (128+RPCAP_MSG_ENDCAP_REQ)
-
299 #define RPCAP_MSG_SETSAMPLING_REPLY (128+RPCAP_MSG_SETSAMPLING_REQ)
-
301 #define RPCAP_STARTCAPREQ_FLAG_PROMISC 1
-
302 #define RPCAP_STARTCAPREQ_FLAG_DGRAM 2
-
303 #define RPCAP_STARTCAPREQ_FLAG_SERVEROPEN 4
-
304 #define RPCAP_STARTCAPREQ_FLAG_INBOUND 8
-
305 #define RPCAP_STARTCAPREQ_FLAG_OUTBOUND 16
-
307 #define RPCAP_UPDATEFILTER_BPF 1
-
310 // Network error codes
-
311 #define PCAP_ERR_NETW 1
-
312 #define PCAP_ERR_INITTIMEOUT 2
-
313 #define PCAP_ERR_AUTH 3
-
314 #define PCAP_ERR_FINDALLIF 4
-
315 #define PCAP_ERR_NOREMOTEIF 5
-
316 #define PCAP_ERR_OPEN 6
-
317 #define PCAP_ERR_UPDATEFILTER 7
-
318 #define PCAP_ERR_GETSTATS 8
-
319 #define PCAP_ERR_READEX 9
-
320 #define PCAP_ERR_HOSTNOAUTH 10
-
321 #define PCAP_ERR_REMOTEACCEPT 11
-
322 #define PCAP_ERR_STARTCAPTURE 12
-
323 #define PCAP_ERR_ENDCAPTURE 13
-
324 #define PCAP_ERR_RUNTIMETIMEOUT 14
-
325 #define PCAP_ERR_SETSAMPLING 15
-
326 #define PCAP_ERR_WRONGMSG 16
-
327 #define PCAP_ERR_WRONGVER 17 // end of private documentation
-
331 
-
332 
-
333 
-
334 
-
335 
-
336 
-
337 /*********************************************************
-
338  * *
-
339  * Exported funtion prototypes *
-
340  * *
-
341  *********************************************************/
-
342 int pcap_opensource_remote(pcap_t *p, struct pcap_rmtauth *auth);
- -
344 
-
345 int pcap_read_nocb_remote(pcap_t *p, struct pcap_pkthdr **pkt_header, u_char **pkt_data);
-
346 int pcap_read_remote(pcap_t *p, int cnt, pcap_handler callback, u_char *user);
-
347 int pcap_updatefilter_remote(pcap_t *fp, struct bpf_program *prog);
-
348 int pcap_setfilter_remote(pcap_t *fp, struct bpf_program *prog);
-
349 int pcap_stats_remote(pcap_t *p, struct pcap_stat *ps);
- - -
352 void pcap_cleanup_remote(pcap_t *p);
-
353 
-
354 void rpcap_createhdr(struct rpcap_header *header, uint8 type, uint16 value, uint32 length);
-
355 int rpcap_deseraddr(struct sockaddr_storage *sockaddrin, struct sockaddr_storage **sockaddrout, char *errbuf);
-
356 int rpcap_checkmsg(char *errbuf, SOCKET sock, struct rpcap_header *header, uint8 first, ...);
-
357 int rpcap_senderror(SOCKET sock, char *error, unsigned short errcode, char *errbuf);
-
358 int rpcap_sendauth(SOCKET sock, struct pcap_rmtauth *auth, char *errbuf);
-
359 
-
360 int rpcap_remoteact_getsock(const char *host, char *errbuf);
-
361 
-
362 #endif
-
363 
-
Structure that is needed to set sampling parameters.
Definition: pcap-remote.h:269
-
uint32 ifrecv
Packets received by the kernel filter (i.e. pcap_stats.ps_recv)
Definition: pcap-remote.h:261
-
uint32 plen
Length of the payload of this RPCAP message.
Definition: pcap-remote.h:155
-
int pcap_setsampling_remote(pcap_t *p)
-
struct sockaddr_storage broadaddr
Broadcast address for that address.
Definition: pcap-remote.h:175
-
Header of a packet in the dump file.
Definition: incs/pcap.h:126
-
uint16 value
Message-dependent value (not always used)
Definition: pcap-remote.h:154
-
Format of the reply message that devoted to start a remote capture (startcap reply command) ...
Definition: pcap-remote.h:205
-
struct sockaddr_storage netmask
Netmask for that address.
Definition: pcap-remote.h:174
-
int pcap_read_remote(pcap_t *p, int cnt, pcap_handler callback, u_char *user)
-
int pcap_updatefilter_remote(pcap_t *fp, struct bpf_program *prog)
-
uint16 dummy
Must be zero.
Definition: pcap-remote.h:209
-
uint16 slen1
Length of the first authentication item (e.g. username)
Definition: pcap-remote.h:253
-
uint32 krnldrop
Packets dropped by the kernel filter (i.e. pcap_stats.ps_drop)
Definition: pcap-remote.h:263
-
uint16 dummy
Must be zero.
Definition: pcap-remote.h:252
-
struct pcap pcap_t
Descriptor of an open capture instance. This structure is opaque to the user, that handles its conten...
Definition: incs/pcap.h:70
-
uint8 ver
RPCAP version number.
Definition: pcap-remote.h:152
-
uint16 filtertype
type of the filter transferred (BPF instructions, ...)
Definition: pcap-remote.h:232
-
Format of the message for the interface description (findalldevs command)
Definition: pcap-remote.h:160
-
void(* pcap_handler)(u_char *user, const struct pcap_pkthdr *pkt_header, const u_char *pkt_data)
Prototype of the callback function that receives the packets.
Definition: funcs/pcap.h:27
-
uint8 method
Sampling method.
Definition: pcap-remote.h:271
-
uint32 svrcapt
Packets captured by the RPCAP daemon and sent on the network.
Definition: pcap-remote.h:264
-
Keeps a list of all the opened connections in the active mode.
Definition: pcap-remote.h:133
-
Structure that keeps statistical values on an interface.
Definition: incs/pcap.h:136
-
uint16 dummy
Must be zero.
Definition: pcap-remote.h:166
-
SOCKET sockctrl
Definition: pcap-remote.h:136
-
Structure that keeps the data required for the authentication on the remote host. ...
Definition: pcap-remote.h:249
-
uint32 read_timeout
Read timeout in milliseconds.
Definition: pcap-remote.h:198
-
unsigned short uint16
Provides a 16-bits unsigned integer.
Definition: pcap-remote.h:116
-
int pcap_stats_remote(pcap_t *p, struct pcap_stat *ps)
-
uint16 slen2
Length of the second authentication item (e.g. password)
Definition: pcap-remote.h:254
-
uint32 nitems
Number of items contained into the filter (e.g. BPF instructions for BPF filters) ...
Definition: pcap-remote.h:234
-
uint32 value
Parameter related to the sampling method.
Definition: pcap-remote.h:274
-
int32 k
instruction-dependent value
Definition: pcap-remote.h:244
-
int32 linktype
Link type.
Definition: pcap-remote.h:188
-
uint16 dummy2
Must be zero.
Definition: pcap-remote.h:273
-
uint32 flags
Interface flags.
Definition: pcap-remote.h:164
-
int rpcap_sendauth(SOCKET sock, struct pcap_rmtauth *auth, char *errbuf)
-
Common header for all the RPCAP messages.
Definition: pcap-remote.h:150
-
int int32
Provides a 32-bits integer.
Definition: pcap-remote.h:118
-
struct activehosts * next
Definition: pcap-remote.h:137
-
uint16 dummy
Must be zero.
Definition: pcap-remote.h:233
-
unsigned char uint8
Provides an 8-bits unsigned integer.
Definition: pcap-remote.h:115
-
uint32 timestamp_usec
'struct timeval' compatible, it represents the 'tv_usec' field
Definition: pcap-remote.h:222
-
int pcap_startcapture_remote(pcap_t *fp)
-
Format of the message that starts a remote capture (startcap command)
Definition: pcap-remote.h:195
-
int rpcap_senderror(SOCKET sock, char *error, unsigned short errcode, char *errbuf)
-
uint32 npkt
Ordinal number of the packet (i.e. the first one captured has '1', the second one '2'...
Definition: pcap-remote.h:225
-
uint16 code
opcode of the instuction
Definition: pcap-remote.h:241
-
Structure that keeps a single BPF instuction; it is repeated 'ninsn' times according to the 'rpcap_fi...
Definition: pcap-remote.h:239
-
uint16 type
Authentication type.
Definition: pcap-remote.h:251
-
uint32 len
Real length this packet (off wire)
Definition: pcap-remote.h:224
-
General header used for the pcap_setfilter() command; keeps just the number of BPF instructions...
Definition: pcap-remote.h:230
-
uint16 portdata
Network port on which the server is waiting at (passive mode only)
Definition: pcap-remote.h:208
-
struct sockaddr_storage addr
Network address.
Definition: pcap-remote.h:173
-
uint8 type
RPCAP message type (error, findalldevs, ...)
Definition: pcap-remote.h:153
-
uint16 namelen
Length of the interface name.
Definition: pcap-remote.h:162
-
Format of the message for the address listing (findalldevs command)
Definition: pcap-remote.h:171
-
uint16 flags
Flags (see RPCAP_STARTCAPREQ_FLAG_xxx)
Definition: pcap-remote.h:199
-
int rpcap_checkmsg(char *errbuf, SOCKET sock, struct rpcap_header *header, uint8 first,...)
-
uint32 caplen
Length of portion present in the capture.
Definition: pcap-remote.h:223
-
int pcap_setfilter_remote(pcap_t *fp, struct bpf_program *prog)
-
void rpcap_createhdr(struct rpcap_header *header, uint8 type, uint16 value, uint32 length)
-
int rpcap_deseraddr(struct sockaddr_storage *sockaddrin, struct sockaddr_storage **sockaddrout, char *errbuf)
-
Format of the message of the connection opening reply (open command).
Definition: pcap-remote.h:186
-
void pcap_cleanup_remote(pcap_t *p)
-
struct sockaddr_storage dstaddr
P2P destination address for that address.
Definition: pcap-remote.h:176
-
uint32 timestamp_sec
'struct timeval' compatible, it represents the 'tv_sec' field
Definition: pcap-remote.h:221
-
int pcap_read_nocb_remote(pcap_t *p, struct pcap_pkthdr **pkt_header, u_char **pkt_data)
-
struct sockaddr_storage host
Definition: pcap-remote.h:135
-
struct pcap_stat * pcap_stats_ex_remote(pcap_t *p)
-
Format of the header which encapsulates captured packets when transmitted on the network.
Definition: pcap-remote.h:219
-
unsigned int uint32
Provides a 32-bits unsigned integer.
Definition: pcap-remote.h:117
-
int pcap_opensource_remote(pcap_t *p, struct pcap_rmtauth *auth)
-
uint8 jf
relative offset to jump to in case of 'false'
Definition: pcap-remote.h:243
-
uint16 portdata
Network port on which the client is waiting at (if 'serveropen')
Definition: pcap-remote.h:200
-
int rpcap_remoteact_getsock(const char *host, char *errbuf)
-
uint32 snaplen
Length of the snapshot (number of bytes to capture for each packet)
Definition: pcap-remote.h:197
-
Structure that keeps the statistics about the number of packets captured, dropped, etc.
Definition: pcap-remote.h:259
-
int32 tzoff
Timezone offset.
Definition: pcap-remote.h:189
-
int32 bufsize
Size of the user buffer allocated by WinPcap; it can be different from the one we chose...
Definition: pcap-remote.h:207
-
uint16 naddr
Number of addresses.
Definition: pcap-remote.h:165
-
uint8 dummy1
Must be zero.
Definition: pcap-remote.h:272
-
uint16 desclen
Length of the interface description.
Definition: pcap-remote.h:163
-
uint8 jt
relative offset to jump to in case of 'true'
Definition: pcap-remote.h:242
-
uint32 ifdrop
Packets dropped by the network interface (e.g. not enough buffers) (i.e. pcap_stats.ps_ifdrop)
Definition: pcap-remote.h:262
-
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/structJIT__BPF__Filter.html b/libs/WinPcap-413-173-b4/docs/html/structJIT__BPF__Filter.html deleted file mode 100644 index 60e35656..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/structJIT__BPF__Filter.html +++ /dev/null @@ -1,111 +0,0 @@ - - - - - - -WinPcap: JIT_BPF_Filter Struct Reference - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - - -
- -
- -

Structure describing a x86 filtering program created by the jitter. - More...

- -

#include <jitter.h>

- - - - - - - -

-Data Fields

BPF_filter_function Function
 The x86 filtering binary, in the form of a BPF_filter_function. More...
 
PINT mem
 
-

Detailed Description

-

Structure describing a x86 filtering program created by the jitter.

- -

Definition at line 95 of file jitter.h.

-

Field Documentation

- -
-
- - - - -
BPF_filter_function Function
-
- -

The x86 filtering binary, in the form of a BPF_filter_function.

- -

Definition at line 96 of file jitter.h.

- -
-
- -
-
- - - - -
PINT mem
-
- -

Definition at line 97 of file jitter.h.

- -
-
-
The documentation for this struct was generated from the following file: -
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/structPacketHeader.html b/libs/WinPcap-413-173-b4/docs/html/structPacketHeader.html deleted file mode 100644 index e95f0691..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/structPacketHeader.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - - -WinPcap: PacketHeader Struct Reference - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - - -
- -
- -

Structure prepended to each packet in the kernel buffer pool. - More...

- -

#include <Packet.h>

- - - - - - - - -

-Data Fields

ULONG SN
 Sequence number of the packet. More...
 
struct bpf_hdr header
 bpf header, created by the tap, and copied unmodified to user level programs. More...
 
-

Detailed Description

-

Structure prepended to each packet in the kernel buffer pool.

-

Each packet in one of the kernel buffers is prepended by this header. It encapsulates the bpf_header, which will be passed to user level programs, as well as the sequence number of the packet, set by the producer (the tap function), and used by the consumer (the read function) to "reorder" the packets contained in the various kernel buffers.

- -

Definition at line 341 of file Packet.h.

-

Field Documentation

- -
-
- - - - -
struct bpf_hdr header
-
- -

bpf header, created by the tap, and copied unmodified to user level programs.

- -

Definition at line 344 of file Packet.h.

- -
-
- -
-
- - - - -
ULONG SN
-
- -

Sequence number of the packet.

- -

Definition at line 343 of file Packet.h.

- -
-
-
The documentation for this struct was generated from the following file: -
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/struct__DEVICE__EXTENSION.html b/libs/WinPcap-413-173-b4/docs/html/struct__DEVICE__EXTENSION.html deleted file mode 100644 index 0e42f635..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/struct__DEVICE__EXTENSION.html +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - -WinPcap: _DEVICE_EXTENSION Struct Reference - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - - -
- -
- -

Port device extension. - More...

- -

#include <Packet.h>

- - - - - - - -

-Data Fields

NDIS_STRING AdapterName
 Name of the adapter. More...
 
PWSTR ExportString
 
-

Detailed Description

-

Port device extension.

-

Structure containing some data relative to every adapter on which NPF is bound.

- -

Definition at line 196 of file Packet.h.

-

Field Documentation

- -
-
- - - - -
NDIS_STRING AdapterName
-
- -

Name of the adapter.

- -

Definition at line 197 of file Packet.h.

- -
-
- -
-
- - - - -
PWSTR ExportString
-
-

Name of the exported device, i.e. name that the applications will use to open this adapter through WinPcap.

- -

Definition at line 198 of file Packet.h.

- -
-
-
The documentation for this struct was generated from the following file: -
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/struct__INTERNAL__REQUEST.html b/libs/WinPcap-413-173-b4/docs/html/struct__INTERNAL__REQUEST.html deleted file mode 100644 index 78372a1d..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/struct__INTERNAL__REQUEST.html +++ /dev/null @@ -1,147 +0,0 @@ - - - - - - -WinPcap: _INTERNAL_REQUEST Struct Reference - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - - -
- -
- -

Stores an OID request. - More...

- -

#include <Packet.h>

- - - - - - - - - - - - -

-Data Fields

LIST_ENTRY ListElement
 Used to handle lists of requests. More...
 
NDIS_EVENT InternalRequestCompletedEvent
 
NDIS_REQUEST Request
 The structure with the actual request, that will be passed to NdisRequest(). More...
 
NDIS_STATUS RequestStatus
 
-

Detailed Description

-

Stores an OID request.

-

This structure is used by the driver to perform OID query or set operations on the underlying NIC driver. The OID operations be performed usually only by network drivers, but NPF exports this mechanism to user-level applications through an IOCTL interface. The driver uses this structure to wrap a NDIS_REQUEST structure. This allows to handle correctly the callback structure of NdisRequest(), handling multiple requests and maintaining information about the IRPs to complete.

- -

Definition at line 163 of file Packet.h.

-

Field Documentation

- -
-
- - - - -
NDIS_EVENT InternalRequestCompletedEvent
-
- -

Definition at line 167 of file Packet.h.

- -
-
- -
-
- - - - -
LIST_ENTRY ListElement
-
- -

Used to handle lists of requests.

- -

Definition at line 164 of file Packet.h.

- -
-
- -
-
- - - - -
NDIS_REQUEST Request
-
- -

The structure with the actual request, that will be passed to NdisRequest().

- -

Definition at line 168 of file Packet.h.

- -
-
- -
-
- - - - -
NDIS_STATUS RequestStatus
-
- -

Definition at line 169 of file Packet.h.

- -
-
-
The documentation for this struct was generated from the following file: -
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/struct__OPEN__INSTANCE.html b/libs/WinPcap-413-173-b4/docs/html/struct__OPEN__INSTANCE.html deleted file mode 100644 index 11514d35..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/struct__OPEN__INSTANCE.html +++ /dev/null @@ -1,1001 +0,0 @@ - - - - - - -WinPcap: _OPEN_INSTANCE Struct Reference - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - - -
- -
- -

Contains the state of a running instance of the NPF driver. - More...

- -

#include <Packet.h>

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Data Fields

PDEVICE_EXTENSION DeviceExtension
 
NDIS_HANDLE AdapterHandle
 NDIS idetifier of the adapter used by this instance. More...
 
UINT Medium
 
NDIS_HANDLE PacketPool
 Pool of NDIS_PACKET structures used to transfer the packets from and to the NIC driver. More...
 
KSPIN_LOCK RequestSpinLock
 SpinLock used to synchronize the OID requests. More...
 
LIST_ENTRY RequestList
 List of pending OID requests. More...
 
LIST_ENTRY ResetIrpList
 List of pending adapter reset requests. More...
 
INTERNAL_REQUEST Requests [MAX_REQUESTS]
 Array of structures that wrap every single OID request. More...
 
PMDL BufferMdl
 Pointer to a Memory descriptor list (MDL) that maps the circular buffer's memory. More...
 
PKEVENT ReadEvent
 Pointer to the event on which the read calls on this instance must wait. More...
 
PUCHAR bpfprogram
 
UINT MinToCopy
 
LARGE_INTEGER TimeOut
 
int mode
 Working mode of the driver. See PacketSetMode() for details. More...
 
LARGE_INTEGER Nbytes
 Amount of bytes accepted by the filter when this instance is in statistical mode. More...
 
LARGE_INTEGER Npackets
 Number of packets accepted by the filter when this instance is in statistical mode. More...
 
NDIS_SPIN_LOCK CountersLock
 SpinLock that protects the statistical mode counters. More...
 
UINT Nwrites
 
ULONG Multiple_Write_Counter
 Counts the number of times a single write has already physically repeated. More...
 
NDIS_EVENT WriteEvent
 Event used to synchronize the multiple write process. More...
 
BOOLEAN WriteInProgress
 
NDIS_SPIN_LOCK WriteLock
 SpinLock that protects the WriteInProgress variable. More...
 
NDIS_EVENT NdisRequestEvent
 Event used to synchronize I/O requests with the callback structure of NDIS. More...
 
BOOLEAN SkipSentPackets
 True if this instance should not capture back the packets that it transmits. More...
 
NDIS_STATUS IOStatus
 Maintains the status of and OID request call, that will be passed to the application. More...
 
HANDLE DumpFileHandle
 Handle of the file used in dump mode. More...
 
PFILE_OBJECT DumpFileObject
 Pointer to the object of the file used in dump mode. More...
 
PKTHREAD DumpThreadObject
 Pointer to the object of the thread used in dump mode. More...
 
HANDLE DumpThreadHandle
 Handle of the thread created by dump mode to asynchronously move the buffer to disk. More...
 
NDIS_EVENT DumpEvent
 Event used to synchronize the dump thread with the tap when the instance is in dump mode. More...
 
LARGE_INTEGER DumpOffset
 Current offset in the dump file. More...
 
UNICODE_STRING DumpFileName
 String containing the name of the dump file. More...
 
UINT MaxDumpBytes
 
UINT MaxDumpPacks
 
BOOLEAN DumpLimitReached
 
NDIS_SPIN_LOCK MachineLock
 SpinLock that protects the BPF filter and the TME engine, if in use. More...
 
UINT MaxFrameSize
 
CpuPrivateData CpuData [sizeof(KAFFINITY)*8]
 Pool of kernel buffer structures, one for each CPU. More...
 
ULONG ReaderSN
 Sequence number of the next packet to be read from the pool of kernel buffers. More...
 
ULONG WriterSN
 
ULONG Size
 Size of each kernel buffer contained in the CpuData field. More...
 
ULONG AdapterHandleUsageCounter
 
NDIS_SPIN_LOCK AdapterHandleLock
 
ULONG AdapterBindingStatus
 Specifies if NPF is still bound to the adapter used by this instance, it's unbinding or it's not bound. More...
 
NDIS_EVENT NdisOpenCloseCompleteEvent
 
NDIS_EVENT NdisWriteCompleteEvent
 Event that is signalled when all the packets have been successfully sent by NdisSend (and corresponfing sendComplete has been called) More...
 
NTSTATUS OpenCloseStatus
 
ULONG TransmitPendingPackets
 Specifies the number of packets that are pending to be transmitted, i.e. have been submitted to NdisSendXXX but the SendComplete has not been called yet. More...
 
ULONG NumPendingIrps
 
BOOLEAN ClosePending
 
NDIS_SPIN_LOCK OpenInUseLock
 
-

Detailed Description

-

Contains the state of a running instance of the NPF driver.

-

This is the most important structure of NPF: it is used by almost all the functions of the driver. An _OPEN_INSTANCE structure is associated with every user-level session, allowing concurrent access to the driver.

- -

Definition at line 240 of file Packet.h.

-

Field Documentation

- -
-
- - - - -
ULONG AdapterBindingStatus
-
- -

Specifies if NPF is still bound to the adapter used by this instance, it's unbinding or it's not bound.

- -

Definition at line 315 of file Packet.h.

- -
-
- -
-
- - - - -
NDIS_HANDLE AdapterHandle
-
- -

NDIS idetifier of the adapter used by this instance.

- -

Definition at line 244 of file Packet.h.

- -
-
- -
-
- - - - -
NDIS_SPIN_LOCK AdapterHandleLock
-
- -

Definition at line 314 of file Packet.h.

- -
-
- -
-
- - - - -
ULONG AdapterHandleUsageCounter
-
- -

Definition at line 313 of file Packet.h.

- -
-
- -
-
- - - - -
PUCHAR bpfprogram
-
-

Pointer to the filtering pseudo-code associated with current instance of the driver. This code is used only in particular situations (for example when the packet received from the NIC driver is stored in two non-consecutive buffers. In normal situations the filtering routine created by the JIT compiler and pointed by the next field is used. See NPF driver internals manual for details on the filtering process.

- -

Definition at line 254 of file Packet.h.

- -
-
- -
-
- - - - -
PMDL BufferMdl
-
- -

Pointer to a Memory descriptor list (MDL) that maps the circular buffer's memory.

- -

Definition at line 252 of file Packet.h.

- -
-
- -
-
- - - - -
BOOLEAN ClosePending
-
- -

Definition at line 322 of file Packet.h.

- -
-
- -
-
- - - - -
NDIS_SPIN_LOCK CountersLock
-
- -

SpinLock that protects the statistical mode counters.

- -

Definition at line 271 of file Packet.h.

- -
-
- -
-
- - - - -
CpuPrivateData CpuData[sizeof(KAFFINITY)*8]
-
- -

Pool of kernel buffer structures, one for each CPU.

- -

Definition at line 308 of file Packet.h.

- -
-
- -
-
- - - - -
PDEVICE_EXTENSION DeviceExtension
-
-

Pointer to the _DEVICE_EXTENSION structure of the device on which the instance is bound.

- -

Definition at line 242 of file Packet.h.

- -
-
- -
-
- - - - -
NDIS_EVENT DumpEvent
-
- -

Event used to synchronize the dump thread with the tap when the instance is in dump mode.

- -

Definition at line 286 of file Packet.h.

- -
-
- -
-
- - - - -
HANDLE DumpFileHandle
-
- -

Handle of the file used in dump mode.

- -

Definition at line 282 of file Packet.h.

- -
-
- -
-
- - - - -
UNICODE_STRING DumpFileName
-
- -

String containing the name of the dump file.

- -

Definition at line 288 of file Packet.h.

- -
-
- -
-
- - - - -
PFILE_OBJECT DumpFileObject
-
- -

Pointer to the object of the file used in dump mode.

- -

Definition at line 283 of file Packet.h.

- -
-
- -
-
- - - - -
BOOLEAN DumpLimitReached
-
-

TRUE if the maximum dimension of the dump file (MaxDumpBytes or MaxDumpPacks) is reached.

- -

Definition at line 294 of file Packet.h.

- -
-
- -
-
- - - - -
LARGE_INTEGER DumpOffset
-
- -

Current offset in the dump file.

- -

Definition at line 287 of file Packet.h.

- -
-
- -
-
- - - - -
HANDLE DumpThreadHandle
-
- -

Handle of the thread created by dump mode to asynchronously move the buffer to disk.

- -

Definition at line 285 of file Packet.h.

- -
-
- -
-
- - - - -
PKTHREAD DumpThreadObject
-
- -

Pointer to the object of the thread used in dump mode.

- -

Definition at line 284 of file Packet.h.

- -
-
- -
-
- - - - -
NDIS_STATUS IOStatus
-
- -

Maintains the status of and OID request call, that will be passed to the application.

- -

Definition at line 281 of file Packet.h.

- -
-
- -
-
- - - - -
NDIS_SPIN_LOCK MachineLock
-
- -

SpinLock that protects the BPF filter and the TME engine, if in use.

- -

Definition at line 301 of file Packet.h.

- -
-
- -
-
- - - - -
UINT MaxDumpBytes
-
-

Maximum dimension in bytes of the dump file. If the dump file reaches this size it will be closed. A value of 0 means unlimited size.

- -

Definition at line 289 of file Packet.h.

- -
-
- -
-
- - - - -
UINT MaxDumpPacks
-
-

Maximum number of packets that will be saved in the dump file. If this number of packets is reached the dump will be closed. A value of 0 means unlimited number of packets.

- -

Definition at line 291 of file Packet.h.

- -
-
- -
-
- - - - -
UINT MaxFrameSize
-
-

Maximum frame size that the underlying MAC acceptes. Used to perform a check on the size of the frames sent with NPF_Write() or NPF_BufferedWrite().

- -

Definition at line 302 of file Packet.h.

- -
-
- -
-
- - - - -
UINT Medium
-
-

Type of physical medium the underlying NDIS driver uses. See the documentation of NdisOpenAdapter in the MS DDK for details.

- -

Definition at line 245 of file Packet.h.

- -
-
- -
-
- - - - -
UINT MinToCopy
-
-

Minimum amount of data in the circular buffer that unlocks a read. Set with the BIOCSMINTOCOPY IOCTL.

- -

Definition at line 263 of file Packet.h.

- -
-
- -
-
- - - - -
int mode
-
- -

Working mode of the driver. See PacketSetMode() for details.

- -

Definition at line 268 of file Packet.h.

- -
-
- -
-
- - - - -
ULONG Multiple_Write_Counter
-
- -

Counts the number of times a single write has already physically repeated.

- -

Definition at line 274 of file Packet.h.

- -
-
- -
-
- - - - -
LARGE_INTEGER Nbytes
-
- -

Amount of bytes accepted by the filter when this instance is in statistical mode.

- -

Definition at line 269 of file Packet.h.

- -
-
- -
-
- - - - -
NDIS_EVENT NdisOpenCloseCompleteEvent
-
- -

Definition at line 317 of file Packet.h.

- -
-
- -
-
- - - - -
NDIS_EVENT NdisRequestEvent
-
- -

Event used to synchronize I/O requests with the callback structure of NDIS.

- -

Definition at line 279 of file Packet.h.

- -
-
- -
-
- - - - -
NDIS_EVENT NdisWriteCompleteEvent
-
- -

Event that is signalled when all the packets have been successfully sent by NdisSend (and corresponfing sendComplete has been called)

- -

Definition at line 318 of file Packet.h.

- -
-
- -
-
- - - - -
LARGE_INTEGER Npackets
-
- -

Number of packets accepted by the filter when this instance is in statistical mode.

- -

Definition at line 270 of file Packet.h.

- -
-
- -
-
- - - - -
ULONG NumPendingIrps
-
- -

Definition at line 321 of file Packet.h.

- -
-
- -
-
- - - - -
UINT Nwrites
-
-

Number of times a single write must be physically repeated. See NPF driver internals manual for an explanation

- -

Definition at line 272 of file Packet.h.

- -
-
- -
-
- - - - -
NTSTATUS OpenCloseStatus
-
- -

Definition at line 319 of file Packet.h.

- -
-
- -
-
- - - - -
NDIS_SPIN_LOCK OpenInUseLock
-
- -

Definition at line 323 of file Packet.h.

- -
-
- -
-
- - - - -
NDIS_HANDLE PacketPool
-
- -

Pool of NDIS_PACKET structures used to transfer the packets from and to the NIC driver.

- -

Definition at line 247 of file Packet.h.

- -
-
- -
-
- - - - -
ULONG ReaderSN
-
- -

Sequence number of the next packet to be read from the pool of kernel buffers.

- -

Definition at line 309 of file Packet.h.

- -
-
- -
-
- - - - -
PKEVENT ReadEvent
-
- -

Pointer to the event on which the read calls on this instance must wait.

- -

Definition at line 253 of file Packet.h.

- -
-
- -
-
- - - - -
LIST_ENTRY RequestList
-
- -

List of pending OID requests.

- -

Definition at line 249 of file Packet.h.

- -
-
- -
-
- - - - -
INTERNAL_REQUEST Requests[MAX_REQUESTS]
-
- -

Array of structures that wrap every single OID request.

- -

Definition at line 251 of file Packet.h.

- -
-
- -
-
- - - - -
KSPIN_LOCK RequestSpinLock
-
- -

SpinLock used to synchronize the OID requests.

- -

Definition at line 248 of file Packet.h.

- -
-
- -
-
- - - - -
LIST_ENTRY ResetIrpList
-
- -

List of pending adapter reset requests.

- -

Definition at line 250 of file Packet.h.

- -
-
- -
-
- - - - -
ULONG Size
-
- -

Size of each kernel buffer contained in the CpuData field.

- -

Definition at line 312 of file Packet.h.

- -
-
- -
-
- - - - -
BOOLEAN SkipSentPackets
-
- -

True if this instance should not capture back the packets that it transmits.

- -

Definition at line 280 of file Packet.h.

- -
-
- -
-
- - - - -
LARGE_INTEGER TimeOut
-
-

Timeout after which a read is released, also if the amount of data in the buffer is less than MinToCopy. Set with the BIOCSRTIMEOUT IOCTL.

- -

Definition at line 265 of file Packet.h.

- -
-
- -
-
- - - - -
ULONG TransmitPendingPackets
-
- -

Specifies the number of packets that are pending to be transmitted, i.e. have been submitted to NdisSendXXX but the SendComplete has not been called yet.

- -

Definition at line 320 of file Packet.h.

- -
-
- -
-
- - - - -
NDIS_EVENT WriteEvent
-
- -

Event used to synchronize the multiple write process.

- -

Definition at line 275 of file Packet.h.

- -
-
- -
-
- - - - -
BOOLEAN WriteInProgress
-
-

True if a write is currently in progress. NPF currently allows a single wite on the same open instance.

- -

Definition at line 276 of file Packet.h.

- -
-
- -
-
- - - - -
NDIS_SPIN_LOCK WriteLock
-
- -

SpinLock that protects the WriteInProgress variable.

- -

Definition at line 278 of file Packet.h.

- -
-
- -
-
- - - - -
ULONG WriterSN
-
-

Sequence number of the next packet to be written in the pool of kernel buffers. These two sequence numbers are unique for each capture instance.

- -

Definition at line 310 of file Packet.h.

- -
-
-
The documentation for this struct was generated from the following file: -
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/struct__PACKET__OID__DATA.html b/libs/WinPcap-413-173-b4/docs/html/struct__PACKET__OID__DATA.html deleted file mode 100644 index 3e4cdf92..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/struct__PACKET__OID__DATA.html +++ /dev/null @@ -1,130 +0,0 @@ - - - - - - -WinPcap: _PACKET_OID_DATA Struct Reference - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - - -
- -
- -

Structure containing an OID request. - More...

- -

#include <Packet.h>

- - - - - - - - - -

-Data Fields

ULONG Oid
 
ULONG Length
 Length of the data field. More...
 
UCHAR Data [1]
 
-

Detailed Description

-

Structure containing an OID request.

-

It is used by the PacketRequest() function to send an OID to the interface card driver. It can be used, for example, to retrieve the status of the error counters on the adapter, its MAC address, the list of the multicast groups defined on it, and so on.

- -

Definition at line 143 of file Packet.h.

-

Field Documentation

- -
-
- - - - -
UCHAR Data[1]
-
-

variable-lenght field that contains the information passed to or received from the adapter.

- -

Definition at line 147 of file Packet.h.

- -
-
- -
-
- - - - -
ULONG Length
-
- -

Length of the data field.

- -

Definition at line 146 of file Packet.h.

- -
-
- -
-
- - - - -
ULONG Oid
-
-

OID code. See the Microsoft DDK documentation or the file ntddndis.h for a complete list of valid codes.

- -

Definition at line 144 of file Packet.h.

- -
-
-
The documentation for this struct was generated from the following file: -
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/struct__PACKET__RESERVED.html b/libs/WinPcap-413-173-b4/docs/html/struct__PACKET__RESERVED.html deleted file mode 100644 index 6d2e25c2..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/struct__PACKET__RESERVED.html +++ /dev/null @@ -1,170 +0,0 @@ - - - - - - -WinPcap: _PACKET_RESERVED Struct Reference - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - - -
- -
- -

Contains a NDIS packet. - More...

- -

#include <Packet.h>

- - - - - - - - - - - - - - - - -

-Data Fields

LIST_ENTRY ListElement
 Used to handle lists of packets. More...
 
PIRP Irp
 Irp that performed the request. More...
 
PMDL pMdl
 MDL mapping the buffer of the packet. More...
 
BOOLEAN FreeBufAfterWrite
 
ULONG Cpu
 The CPU on which the packet was pulled out of the linked list of free packets. More...
 
-

Detailed Description

-

Contains a NDIS packet.

-

The driver uses this structure to wrap a NDIS_PACKET structure. This allows to handle correctly the callback structure of NdisTransferData(), handling multiple requests and maintaining information about the IRPs to complete.

- -

Definition at line 180 of file Packet.h.

-

Field Documentation

- -
-
- - - - -
ULONG Cpu
-
- -

The CPU on which the packet was pulled out of the linked list of free packets.

- -

Definition at line 186 of file Packet.h.

- -
-
- -
-
- - - - -
BOOLEAN FreeBufAfterWrite
-
-

True if the memory buffer associated with the packet must be freed after a call to NdisSend().

- -

Definition at line 184 of file Packet.h.

- -
-
- -
-
- - - - -
PIRP Irp
-
- -

Irp that performed the request.

- -

Definition at line 182 of file Packet.h.

- -
-
- -
-
- - - - -
LIST_ENTRY ListElement
-
- -

Used to handle lists of packets.

- -

Definition at line 181 of file Packet.h.

- -
-
- -
-
- - - - -
PMDL pMdl
-
- -

MDL mapping the buffer of the packet.

- -

Definition at line 183 of file Packet.h.

- -
-
-
The documentation for this struct was generated from the following file: -
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/struct____CPU__Private__Data.html b/libs/WinPcap-413-173-b4/docs/html/struct____CPU__Private__Data.html deleted file mode 100644 index 5372df41..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/struct____CPU__Private__Data.html +++ /dev/null @@ -1,280 +0,0 @@ - - - - - - -WinPcap: __CPU_Private_Data Struct Reference - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - - -
- -
- -

Kernel buffer of each CPU. - More...

- -

#include <Packet.h>

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Data Fields

ULONG P
 Zero-based index of the producer in the buffer. It indicates the first free byte to be written. More...
 
ULONG C
 Zero-based index of the consumer in the buffer. It indicates the first free byte to be read. More...
 
ULONG Free
 Number of the free bytes in the buffer. More...
 
PUCHAR Buffer
 Pointer to the kernel buffer used to capture packets. More...
 
ULONG Accepted
 
ULONG Received
 
ULONG Dropped
 
NDIS_SPIN_LOCK BufferLock
 It protects the buffer associated with this CPU. More...
 
PMDL TransferMdl1
 MDL used to map the portion of the buffer that will contain an incoming packet. More...
 
PMDL TransferMdl2
 Second MDL used to map the portion of the buffer that will contain an incoming packet. More...
 
ULONG NewP
 Used by NdisTransferData() (when we call NdisTransferData, p index must be updated only in the TransferDataComplete. More...
 
-

Detailed Description

-

Kernel buffer of each CPU.

-

Structure containing the kernel buffer (and other CPU related fields) used to capture packets.

- -

Definition at line 207 of file Packet.h.

-

Field Documentation

- -
-
- - - - -
ULONG Accepted
-
-

Number of packet that current capture instance acepted, from its opening. A packet is accepted if it passes the filter and fits in the buffer. Accepted packets are the ones that reach the application. This number is related to the particular CPU this structure is referring to.

- -

Definition at line 213 of file Packet.h.

- -
-
- -
-
- - - - -
PUCHAR Buffer
-
- -

Pointer to the kernel buffer used to capture packets.

- -

Definition at line 212 of file Packet.h.

- -
-
- -
-
- - - - -
NDIS_SPIN_LOCK BufferLock
-
- -

It protects the buffer associated with this CPU.

- -

Definition at line 225 of file Packet.h.

- -
-
- -
-
- - - - -
ULONG C
-
- -

Zero-based index of the consumer in the buffer. It indicates the first free byte to be read.

- -

Definition at line 210 of file Packet.h.

- -
-
- -
-
- - - - -
ULONG Dropped
-
-

Number of packet that current instance had to drop, from its opening. A packet is dropped if there is no more space to store it in the circular buffer that the driver associates to current instance. This number is related to the particular CPU this structure is referring to.

- -

Definition at line 221 of file Packet.h.

- -
-
- -
-
- - - - -
ULONG Free
-
- -

Number of the free bytes in the buffer.

- -

Definition at line 211 of file Packet.h.

- -
-
- -
-
- - - - -
ULONG NewP
-
- -

Used by NdisTransferData() (when we call NdisTransferData, p index must be updated only in the TransferDataComplete.

- -

Definition at line 228 of file Packet.h.

- -
-
- -
-
- - - - -
ULONG P
-
- -

Zero-based index of the producer in the buffer. It indicates the first free byte to be written.

- -

Definition at line 209 of file Packet.h.

- -
-
- -
-
- - - - -
ULONG Received
-
-

Number of packets received by current instance from its opening, i.e. number of packet received by the network adapter since the beginning of the capture/monitoring/dump session. This number is related to the particular CPU this structure is referring to.

- -

Definition at line 217 of file Packet.h.

- -
-
- -
-
- - - - -
PMDL TransferMdl1
-
- -

MDL used to map the portion of the buffer that will contain an incoming packet.

- -

Definition at line 226 of file Packet.h.

- -
-
- -
-
- - - - -
PMDL TransferMdl2
-
- -

Second MDL used to map the portion of the buffer that will contain an incoming packet.

- -

Definition at line 227 of file Packet.h.

- -
-
-
The documentation for this struct was generated from the following file: -
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/structactivehosts.html b/libs/WinPcap-413-173-b4/docs/html/structactivehosts.html deleted file mode 100644 index 73a42b85..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/structactivehosts.html +++ /dev/null @@ -1,125 +0,0 @@ - - - - - - -WinPcap: activehosts Struct Reference - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - - -
-
- -
-
-
-
- -

Keeps a list of all the opened connections in the active mode. - More...

- -

#include <pcap-remote.h>

- - - - - - - - -

-Data Fields

struct sockaddr_storage host
 
SOCKET sockctrl
 
struct activehostsnext
 
-

Detailed Description

-

Keeps a list of all the opened connections in the active mode.

-

This structure defines a linked list of items that are needed to keep the info required to manage the active mode. In other words, when a new connection in active mode starts, this structure is updated so that it reflects the list of active mode connections currently opened. This structure is required by findalldevs() and open_remote() to see if they have to open a new control connection toward the host, or they already have a control connection in place.

- -

Definition at line 133 of file pcap-remote.h.

-

Field Documentation

- -
-
- - - - -
struct sockaddr_storage host
-
- -

Definition at line 135 of file pcap-remote.h.

- -
-
- -
-
- - - - -
struct activehosts* next
-
- -

Definition at line 137 of file pcap-remote.h.

- -
-
- -
-
- - - - -
SOCKET sockctrl
-
- -

Definition at line 136 of file pcap-remote.h.

- -
-
-
The documentation for this struct was generated from the following file: -
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/structbinary__stream.html b/libs/WinPcap-413-173-b4/docs/html/structbinary__stream.html deleted file mode 100644 index fa20f087..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/structbinary__stream.html +++ /dev/null @@ -1,152 +0,0 @@ - - - - - - -WinPcap: binary_stream Struct Reference - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - - -
- -
- -

A stream of X86 binary code. - More...

- -

#include <jitter.h>

- - - - - - - - - - - - - - -

-Data Fields

INT cur_ip
 Current X86 instruction pointer. More...
 
INT bpf_pc
 Current BPF instruction pointer, i.e. position in the BPF program reached by the jitter. More...
 
PCHAR ibuf
 Instruction buffer, contains the X86 generated code. More...
 
PUINT refs
 Jumps reference table. More...
 
-

Detailed Description

-

A stream of X86 binary code.

- -

Definition at line 69 of file jitter.h.

-

Field Documentation

- -
-
- - - - -
INT bpf_pc
-
- -

Current BPF instruction pointer, i.e. position in the BPF program reached by the jitter.

- -

Definition at line 71 of file jitter.h.

- -
-
- -
-
- - - - -
INT cur_ip
-
- -

Current X86 instruction pointer.

- -

Definition at line 70 of file jitter.h.

- -
-
- -
-
- - - - -
PCHAR ibuf
-
- -

Instruction buffer, contains the X86 generated code.

- -

Definition at line 72 of file jitter.h.

- -
-
- -
-
- - - - -
PUINT refs
-
- -

Jumps reference table.

- -

Definition at line 73 of file jitter.h.

- -
-
-
The documentation for this struct was generated from the following file: -
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/structpacket__file__header.html b/libs/WinPcap-413-173-b4/docs/html/structpacket__file__header.html deleted file mode 100644 index 77a81345..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/structpacket__file__header.html +++ /dev/null @@ -1,210 +0,0 @@ - - - - - - -WinPcap: packet_file_header Struct Reference - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - - -
- -
- -

Header of a libpcap dump file. - More...

- -

#include <Packet.h>

- - - - - - - - - - - - - - - - - - - - - - - -

-Data Fields

UINT magic
 Libpcap magic number. More...
 
USHORT version_major
 Libpcap major version. More...
 
USHORT version_minor
 Libpcap minor version. More...
 
UINT thiszone
 Gmt to local correction. More...
 
UINT sigfigs
 Accuracy of timestamps. More...
 
UINT snaplen
 Length of the max saved portion of each packet. More...
 
UINT linktype
 Data link type (DLT_*). See win_bpf.h for details. More...
 
-

Detailed Description

-

Header of a libpcap dump file.

-

Used when a driver instance is set in dump mode to create a libpcap-compatible file.

- -

Definition at line 106 of file Packet.h.

-

Field Documentation

- -
-
- - - - -
UINT linktype
-
- -

Data link type (DLT_*). See win_bpf.h for details.

- -

Definition at line 114 of file Packet.h.

- -
-
- -
-
- - - - -
UINT magic
-
- -

Libpcap magic number.

- -

Definition at line 108 of file Packet.h.

- -
-
- -
-
- - - - -
UINT sigfigs
-
- -

Accuracy of timestamps.

- -

Definition at line 112 of file Packet.h.

- -
-
- -
-
- - - - -
UINT snaplen
-
- -

Length of the max saved portion of each packet.

- -

Definition at line 113 of file Packet.h.

- -
-
- -
-
- - - - -
UINT thiszone
-
- -

Gmt to local correction.

- -

Definition at line 111 of file Packet.h.

- -
-
- -
-
- - - - -
USHORT version_major
-
- -

Libpcap major version.

- -

Definition at line 109 of file Packet.h.

- -
-
- -
-
- - - - -
USHORT version_minor
-
- -

Libpcap minor version.

- -

Definition at line 110 of file Packet.h.

- -
-
-
The documentation for this struct was generated from the following file: -
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/structpcap__addr.html b/libs/WinPcap-413-173-b4/docs/html/structpcap__addr.html deleted file mode 100644 index d94101cd..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/structpcap__addr.html +++ /dev/null @@ -1,171 +0,0 @@ - - - - - - -WinPcap: pcap_addr Struct Reference - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - - -
-
- -
-
pcap_addr Struct Reference
-
-
- -

Representation of an interface address, used by pcap_findalldevs(). - More...

- -

#include <pcap.h>

- - - - - - - - - - - - - - - - - -

-Data Fields

struct pcap_addrnext
 if not NULL, a pointer to the next element in the list; NULL for the last element of the list More...
 
struct sockaddr * addr
 a pointer to a struct sockaddr containing an address More...
 
struct sockaddr * netmask
 if not NULL, a pointer to a struct sockaddr that contains the netmask corresponding to the address pointed to by addr. More...
 
struct sockaddr * broadaddr
 if not NULL, a pointer to a struct sockaddr that contains the broadcast address corre� sponding to the address pointed to by addr; may be null if the interface doesn't support broadcasts More...
 
struct sockaddr * dstaddr
 if not NULL, a pointer to a struct sockaddr that contains the destination address corre� sponding to the address pointed to by addr; may be null if the interface isn't a point- to-point interface More...
 
-

Detailed Description

-

Representation of an interface address, used by pcap_findalldevs().

- -

Definition at line 161 of file incs/pcap.h.

-

Field Documentation

- -
-
- - - - -
struct sockaddr* addr
-
- -

a pointer to a struct sockaddr containing an address

- -

Definition at line 163 of file incs/pcap.h.

- -
-
- -
-
- - - - -
struct sockaddr* broadaddr
-
- -

if not NULL, a pointer to a struct sockaddr that contains the broadcast address corre� sponding to the address pointed to by addr; may be null if the interface doesn't support broadcasts

- -

Definition at line 165 of file incs/pcap.h.

- -
-
- -
-
- - - - -
struct sockaddr* dstaddr
-
- -

if not NULL, a pointer to a struct sockaddr that contains the destination address corre� sponding to the address pointed to by addr; may be null if the interface isn't a point- to-point interface

- -

Definition at line 166 of file incs/pcap.h.

- -
-
- -
-
- - - - -
struct sockaddr* netmask
-
- -

if not NULL, a pointer to a struct sockaddr that contains the netmask corresponding to the address pointed to by addr.

- -

Definition at line 164 of file incs/pcap.h.

- -
-
- -
-
- - - - -
struct pcap_addr* next
-
- -

if not NULL, a pointer to the next element in the list; NULL for the last element of the list

- -

Definition at line 162 of file incs/pcap.h.

- -
-
-
The documentation for this struct was generated from the following file: -
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/structpcap__file__header.html b/libs/WinPcap-413-173-b4/docs/html/structpcap__file__header.html deleted file mode 100644 index 5254e683..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/structpcap__file__header.html +++ /dev/null @@ -1,215 +0,0 @@ - - - - - - -WinPcap: pcap_file_header Struct Reference - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - - -
-
- -
-
pcap_file_header Struct Reference
-
-
- -

Header of a libpcap dump file. - More...

- -

#include <pcap.h>

- - - - - - - - - - - - - - - - - - - - - - -

-Data Fields

bpf_u_int32 magic
 
u_short version_major
 Libpcap major version. More...
 
u_short version_minor
 Libpcap minor version. More...
 
bpf_int32 thiszone
 gmt to local correction More...
 
bpf_u_int32 sigfigs
 accuracy of timestamps More...
 
bpf_u_int32 snaplen
 max length saved portion of each pkt More...
 
bpf_u_int32 linktype
 data link type (LINKTYPE_*) More...
 
-

Detailed Description

-

Header of a libpcap dump file.

-

The first record in the file contains saved values for some of the flags used in the printout phases of tcpdump. Many fields here are 32 bit ints so compilers won't insert unwanted padding; these files need to be interchangeable across architectures.

-

Do not change the layout of this structure, in any way (this includes changes that only affect the length of fields in this structure).

-

Also, do not change the interpretation of any of the members of this structure, in any way (this includes using values other than LINKTYPE_ values, as defined in "savefile.c", in the "linktype" field).

-

Instead:

-

introduce a new structure for the new format, if the layout of the structure changed;

-

send mail to "tcpdump-workers@tcpdump.org", requesting a new magic number for your new capture file format, and, when you get the new magic number, put it in "savefile.c";

-

use that magic number for save files with the changed file header;

-

make the code in "savefile.c" capable of reading files with the old file header as well as files with the new file header (using the magic number to determine the header format).

-

Then supply the changes to "patches@tcpdump.org", so that future versions of libpcap and programs that use it (such as tcpdump) will be able to read your new capture file format.

- -

Definition at line 110 of file incs/pcap.h.

-

Field Documentation

- -
-
- - - - -
bpf_u_int32 linktype
-
- -

data link type (LINKTYPE_*)

- -

Definition at line 117 of file incs/pcap.h.

- -
-
- -
-
- - - - -
bpf_u_int32 magic
-
- -

Definition at line 111 of file incs/pcap.h.

- -
-
- -
-
- - - - -
bpf_u_int32 sigfigs
-
- -

accuracy of timestamps

- -

Definition at line 115 of file incs/pcap.h.

- -
-
- -
-
- - - - -
bpf_u_int32 snaplen
-
- -

max length saved portion of each pkt

- -

Definition at line 116 of file incs/pcap.h.

- -
-
- -
-
- - - - -
bpf_int32 thiszone
-
- -

gmt to local correction

- -

Definition at line 114 of file incs/pcap.h.

- -
-
- -
-
- - - - -
u_short version_major
-
- -

Libpcap major version.

- -

Definition at line 112 of file incs/pcap.h.

- -
-
- -
-
- - - - -
u_short version_minor
-
- -

Libpcap minor version.

- -

Definition at line 113 of file incs/pcap.h.

- -
-
-
The documentation for this struct was generated from the following file: -
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/structpcap__if.html b/libs/WinPcap-413-173-b4/docs/html/structpcap__if.html deleted file mode 100644 index 77c03f19..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/structpcap__if.html +++ /dev/null @@ -1,171 +0,0 @@ - - - - - - -WinPcap: pcap_if Struct Reference - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - - -
-
- -
-
pcap_if Struct Reference
-
-
- -

Item in a list of interfaces, used by pcap_findalldevs(). - More...

- -

#include <pcap.h>

- - - - - - - - - - - - - - - - - -

-Data Fields

struct pcap_ifnext
 if not NULL, a pointer to the next element in the list; NULL for the last element of the list More...
 
char * name
 a pointer to a string giving a name for the device to pass to pcap_open_live() More...
 
char * description
 if not NULL, a pointer to a string giving a human-readable description of the device More...
 
struct pcap_addraddresses
 a pointer to the first element of a list of addresses for the interface More...
 
u_int flags
 PCAP_IF_ interface flags. Currently the only possible flag is PCAP_IF_LOOPBACK, that is set if the interface is a loopback interface. More...
 
-

Detailed Description

-

Item in a list of interfaces, used by pcap_findalldevs().

- -

Definition at line 148 of file incs/pcap.h.

-

Field Documentation

- -
-
- - - - -
struct pcap_addr* addresses
-
- -

a pointer to the first element of a list of addresses for the interface

- -

Definition at line 152 of file incs/pcap.h.

- -
-
- -
-
- - - - -
char* description
-
- -

if not NULL, a pointer to a string giving a human-readable description of the device

- -

Definition at line 151 of file incs/pcap.h.

- -
-
- -
-
- - - - -
u_int flags
-
- -

PCAP_IF_ interface flags. Currently the only possible flag is PCAP_IF_LOOPBACK, that is set if the interface is a loopback interface.

- -

Definition at line 153 of file incs/pcap.h.

- -
-
- -
-
- - - - -
char* name
-
- -

a pointer to a string giving a name for the device to pass to pcap_open_live()

- -

Definition at line 150 of file incs/pcap.h.

- -
-
- -
-
- - - - -
struct pcap_if* next
-
- -

if not NULL, a pointer to the next element in the list; NULL for the last element of the list

- -

Definition at line 149 of file incs/pcap.h.

- -
-
-
The documentation for this struct was generated from the following file: -
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/structpcap__pkthdr.html b/libs/WinPcap-413-173-b4/docs/html/structpcap__pkthdr.html deleted file mode 100644 index 17aa65b9..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/structpcap__pkthdr.html +++ /dev/null @@ -1,134 +0,0 @@ - - - - - - -WinPcap: pcap_pkthdr Struct Reference - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - - -
-
- -
-
pcap_pkthdr Struct Reference
-
-
- -

Header of a packet in the dump file. - More...

- -

#include <pcap.h>

- - - - - - - - - - - -

-Data Fields

struct timeval ts
 time stamp More...
 
bpf_u_int32 caplen
 length of portion present More...
 
bpf_u_int32 len
 length this packet (off wire) More...
 
-

Detailed Description

-

Header of a packet in the dump file.

-

Each packet in the dump file is prepended with this generic header. This gets around the problem of different headers for different packet interfaces.

- -

Definition at line 126 of file incs/pcap.h.

-

Field Documentation

- -
-
- - - - -
bpf_u_int32 caplen
-
- -

length of portion present

- -

Definition at line 128 of file incs/pcap.h.

- -
-
- -
-
- - - - -
bpf_u_int32 len
-
- -

length this packet (off wire)

- -

Definition at line 129 of file incs/pcap.h.

- -
-
- -
-
- - - - -
struct timeval ts
-
- -

time stamp

- -

Definition at line 127 of file incs/pcap.h.

- -
-
-
The documentation for this struct was generated from the following file: -
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/structpcap__send__queue.html b/libs/WinPcap-413-173-b4/docs/html/structpcap__send__queue.html deleted file mode 100644 index fecb0bec..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/structpcap__send__queue.html +++ /dev/null @@ -1,133 +0,0 @@ - - - - - - -WinPcap: pcap_send_queue Struct Reference - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - - -
-
- -
-
pcap_send_queue Struct Reference
-
-
- -

A queue of raw packets that will be sent to the network with pcap_sendqueue_transmit(). - More...

- -

#include <Win32-Extensions.h>

- - - - - - - - - - - -

-Data Fields

u_int maxlen
 Maximum size of the the queue, in bytes. This variable contains the size of the buffer field. More...
 
u_int len
 Current size of the queue, in bytes. More...
 
char * buffer
 Buffer containing the packets to be sent. More...
 
-

Detailed Description

-

A queue of raw packets that will be sent to the network with pcap_sendqueue_transmit().

- -

Definition at line 46 of file Win32-Extensions.h.

-

Field Documentation

- -
-
- - - - -
char* buffer
-
- -

Buffer containing the packets to be sent.

- -

Definition at line 50 of file Win32-Extensions.h.

- -
-
- -
-
- - - - -
u_int len
-
- -

Current size of the queue, in bytes.

- -

Definition at line 49 of file Win32-Extensions.h.

- -
-
- -
-
- - - - -
u_int maxlen
-
- -

Maximum size of the the queue, in bytes. This variable contains the size of the buffer field.

- -

Definition at line 48 of file Win32-Extensions.h.

- -
-
-
The documentation for this struct was generated from the following file: -
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/structpcap__stat.html b/libs/WinPcap-413-173-b4/docs/html/structpcap__stat.html deleted file mode 100644 index 871587e6..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/structpcap__stat.html +++ /dev/null @@ -1,134 +0,0 @@ - - - - - - -WinPcap: pcap_stat Struct Reference - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - - -
-
- -
-
pcap_stat Struct Reference
-
-
- -

Structure that keeps statistical values on an interface. - More...

- -

#include <pcap.h>

- - - - - - - - - - - -

-Data Fields

u_int ps_recv
 number of packets transited on the network More...
 
u_int ps_drop
 number of packets dropped by the driver More...
 
u_int ps_ifdrop
 drops by interface, not yet supported More...
 
-

Detailed Description

-

Structure that keeps statistical values on an interface.

-

As returned by the pcap_stats()

- -

Definition at line 136 of file incs/pcap.h.

-

Field Documentation

- -
-
- - - - -
u_int ps_drop
-
- -

number of packets dropped by the driver

- -

Definition at line 138 of file incs/pcap.h.

- -
-
- -
-
- - - - -
u_int ps_ifdrop
-
- -

drops by interface, not yet supported

- -

Definition at line 139 of file incs/pcap.h.

- -
-
- -
-
- - - - -
u_int ps_recv
-
- -

number of packets transited on the network

- -

Definition at line 137 of file incs/pcap.h.

- -
-
-
The documentation for this struct was generated from the following file: -
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/structrpcap__auth.html b/libs/WinPcap-413-173-b4/docs/html/structrpcap__auth.html deleted file mode 100644 index 85c4509d..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/structrpcap__auth.html +++ /dev/null @@ -1,152 +0,0 @@ - - - - - - -WinPcap: rpcap_auth Struct Reference - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - - -
-
- -
-
-
-
- -

Structure that keeps the data required for the authentication on the remote host. - More...

- -

#include <pcap-remote.h>

- - - - - - - - - - - - - - -

-Data Fields

uint16 type
 Authentication type. More...
 
uint16 dummy
 Must be zero. More...
 
uint16 slen1
 Length of the first authentication item (e.g. username) More...
 
uint16 slen2
 Length of the second authentication item (e.g. password) More...
 
-

Detailed Description

-

Structure that keeps the data required for the authentication on the remote host.

- -

Definition at line 249 of file pcap-remote.h.

-

Field Documentation

- -
-
- - - - -
uint16 dummy
-
- -

Must be zero.

- -

Definition at line 252 of file pcap-remote.h.

- -
-
- -
-
- - - - -
uint16 slen1
-
- -

Length of the first authentication item (e.g. username)

- -

Definition at line 253 of file pcap-remote.h.

- -
-
- -
-
- - - - -
uint16 slen2
-
- -

Length of the second authentication item (e.g. password)

- -

Definition at line 254 of file pcap-remote.h.

- -
-
- -
-
- - - - -
uint16 type
-
- -

Authentication type.

- -

Definition at line 251 of file pcap-remote.h.

- -
-
-
The documentation for this struct was generated from the following file: -
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/structrpcap__filter.html b/libs/WinPcap-413-173-b4/docs/html/structrpcap__filter.html deleted file mode 100644 index 6d6df6e9..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/structrpcap__filter.html +++ /dev/null @@ -1,133 +0,0 @@ - - - - - - -WinPcap: rpcap_filter Struct Reference - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - - -
-
- -
-
rpcap_filter Struct Reference
-
-
- -

General header used for the pcap_setfilter() command; keeps just the number of BPF instructions. - More...

- -

#include <pcap-remote.h>

- - - - - - - - - - - -

-Data Fields

uint16 filtertype
 type of the filter transferred (BPF instructions, ...) More...
 
uint16 dummy
 Must be zero. More...
 
uint32 nitems
 Number of items contained into the filter (e.g. BPF instructions for BPF filters) More...
 
-

Detailed Description

-

General header used for the pcap_setfilter() command; keeps just the number of BPF instructions.

- -

Definition at line 230 of file pcap-remote.h.

-

Field Documentation

- -
-
- - - - -
uint16 dummy
-
- -

Must be zero.

- -

Definition at line 233 of file pcap-remote.h.

- -
-
- -
-
- - - - -
uint16 filtertype
-
- -

type of the filter transferred (BPF instructions, ...)

- -

Definition at line 232 of file pcap-remote.h.

- -
-
- -
-
- - - - -
uint32 nitems
-
- -

Number of items contained into the filter (e.g. BPF instructions for BPF filters)

- -

Definition at line 234 of file pcap-remote.h.

- -
-
-
The documentation for this struct was generated from the following file: -
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/structrpcap__filterbpf__insn.html b/libs/WinPcap-413-173-b4/docs/html/structrpcap__filterbpf__insn.html deleted file mode 100644 index 33eedfa3..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/structrpcap__filterbpf__insn.html +++ /dev/null @@ -1,152 +0,0 @@ - - - - - - -WinPcap: rpcap_filterbpf_insn Struct Reference - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - - -
-
- -
-
rpcap_filterbpf_insn Struct Reference
-
-
- -

Structure that keeps a single BPF instuction; it is repeated 'ninsn' times according to the 'rpcap_filterbpf' header. - More...

- -

#include <pcap-remote.h>

- - - - - - - - - - - - - - -

-Data Fields

uint16 code
 opcode of the instuction More...
 
uint8 jt
 relative offset to jump to in case of 'true' More...
 
uint8 jf
 relative offset to jump to in case of 'false' More...
 
int32 k
 instruction-dependent value More...
 
-

Detailed Description

-

Structure that keeps a single BPF instuction; it is repeated 'ninsn' times according to the 'rpcap_filterbpf' header.

- -

Definition at line 239 of file pcap-remote.h.

-

Field Documentation

- -
-
- - - - -
uint16 code
-
- -

opcode of the instuction

- -

Definition at line 241 of file pcap-remote.h.

- -
-
- -
-
- - - - -
uint8 jf
-
- -

relative offset to jump to in case of 'false'

- -

Definition at line 243 of file pcap-remote.h.

- -
-
- -
-
- - - - -
uint8 jt
-
- -

relative offset to jump to in case of 'true'

- -

Definition at line 242 of file pcap-remote.h.

- -
-
- -
-
- - - - -
int32 k
-
- -

instruction-dependent value

- -

Definition at line 244 of file pcap-remote.h.

- -
-
-
The documentation for this struct was generated from the following file: -
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/structrpcap__findalldevs__if.html b/libs/WinPcap-413-173-b4/docs/html/structrpcap__findalldevs__if.html deleted file mode 100644 index b03917bb..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/structrpcap__findalldevs__if.html +++ /dev/null @@ -1,171 +0,0 @@ - - - - - - -WinPcap: rpcap_findalldevs_if Struct Reference - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - - -
-
- -
-
rpcap_findalldevs_if Struct Reference
-
-
- -

Format of the message for the interface description (findalldevs command) - More...

- -

#include <pcap-remote.h>

- - - - - - - - - - - - - - - - - -

-Data Fields

uint16 namelen
 Length of the interface name. More...
 
uint16 desclen
 Length of the interface description. More...
 
uint32 flags
 Interface flags. More...
 
uint16 naddr
 Number of addresses. More...
 
uint16 dummy
 Must be zero. More...
 
-

Detailed Description

-

Format of the message for the interface description (findalldevs command)

- -

Definition at line 160 of file pcap-remote.h.

-

Field Documentation

- -
-
- - - - -
uint16 desclen
-
- -

Length of the interface description.

- -

Definition at line 163 of file pcap-remote.h.

- -
-
- -
-
- - - - -
uint16 dummy
-
- -

Must be zero.

- -

Definition at line 166 of file pcap-remote.h.

- -
-
- -
-
- - - - -
uint32 flags
-
- -

Interface flags.

- -

Definition at line 164 of file pcap-remote.h.

- -
-
- -
-
- - - - -
uint16 naddr
-
- -

Number of addresses.

- -

Definition at line 165 of file pcap-remote.h.

- -
-
- -
-
- - - - -
uint16 namelen
-
- -

Length of the interface name.

- -

Definition at line 162 of file pcap-remote.h.

- -
-
-
The documentation for this struct was generated from the following file: -
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/structrpcap__findalldevs__ifaddr.html b/libs/WinPcap-413-173-b4/docs/html/structrpcap__findalldevs__ifaddr.html deleted file mode 100644 index 6d733b0a..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/structrpcap__findalldevs__ifaddr.html +++ /dev/null @@ -1,152 +0,0 @@ - - - - - - -WinPcap: rpcap_findalldevs_ifaddr Struct Reference - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - - -
-
- -
-
rpcap_findalldevs_ifaddr Struct Reference
-
-
- -

Format of the message for the address listing (findalldevs command) - More...

- -

#include <pcap-remote.h>

- - - - - - - - - - - - - - -

-Data Fields

struct sockaddr_storage addr
 Network address. More...
 
struct sockaddr_storage netmask
 Netmask for that address. More...
 
struct sockaddr_storage broadaddr
 Broadcast address for that address. More...
 
struct sockaddr_storage dstaddr
 P2P destination address for that address. More...
 
-

Detailed Description

-

Format of the message for the address listing (findalldevs command)

- -

Definition at line 171 of file pcap-remote.h.

-

Field Documentation

- -
-
- - - - -
struct sockaddr_storage addr
-
- -

Network address.

- -

Definition at line 173 of file pcap-remote.h.

- -
-
- -
-
- - - - -
struct sockaddr_storage broadaddr
-
- -

Broadcast address for that address.

- -

Definition at line 175 of file pcap-remote.h.

- -
-
- -
-
- - - - -
struct sockaddr_storage dstaddr
-
- -

P2P destination address for that address.

- -

Definition at line 176 of file pcap-remote.h.

- -
-
- -
-
- - - - -
struct sockaddr_storage netmask
-
- -

Netmask for that address.

- -

Definition at line 174 of file pcap-remote.h.

- -
-
-
The documentation for this struct was generated from the following file: -
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/structrpcap__header.html b/libs/WinPcap-413-173-b4/docs/html/structrpcap__header.html deleted file mode 100644 index 5f193263..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/structrpcap__header.html +++ /dev/null @@ -1,152 +0,0 @@ - - - - - - -WinPcap: rpcap_header Struct Reference - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - - -
-
- -
-
rpcap_header Struct Reference
-
-
- -

Common header for all the RPCAP messages. - More...

- -

#include <pcap-remote.h>

- - - - - - - - - - - - - - -

-Data Fields

uint8 ver
 RPCAP version number. More...
 
uint8 type
 RPCAP message type (error, findalldevs, ...) More...
 
uint16 value
 Message-dependent value (not always used) More...
 
uint32 plen
 Length of the payload of this RPCAP message. More...
 
-

Detailed Description

-

Common header for all the RPCAP messages.

- -

Definition at line 150 of file pcap-remote.h.

-

Field Documentation

- -
-
- - - - -
uint32 plen
-
- -

Length of the payload of this RPCAP message.

- -

Definition at line 155 of file pcap-remote.h.

- -
-
- -
-
- - - - -
uint8 type
-
- -

RPCAP message type (error, findalldevs, ...)

- -

Definition at line 153 of file pcap-remote.h.

- -
-
- -
-
- - - - -
uint16 value
-
- -

Message-dependent value (not always used)

- -

Definition at line 154 of file pcap-remote.h.

- -
-
- -
-
- - - - -
uint8 ver
-
- -

RPCAP version number.

- -

Definition at line 152 of file pcap-remote.h.

- -
-
-
The documentation for this struct was generated from the following file: -
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/structrpcap__openreply.html b/libs/WinPcap-413-173-b4/docs/html/structrpcap__openreply.html deleted file mode 100644 index 8c534997..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/structrpcap__openreply.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - - -WinPcap: rpcap_openreply Struct Reference - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - - -
-
- -
-
rpcap_openreply Struct Reference
-
-
- -

Format of the message of the connection opening reply (open command). - More...

- -

#include <pcap-remote.h>

- - - - - - - - -

-Data Fields

int32 linktype
 Link type. More...
 
int32 tzoff
 Timezone offset. More...
 
-

Detailed Description

-

Format of the message of the connection opening reply (open command).

-

This structure transfers over the network some of the values useful on the client side.

- -

Definition at line 186 of file pcap-remote.h.

-

Field Documentation

- -
-
- - - - -
int32 linktype
-
- -

Link type.

- -

Definition at line 188 of file pcap-remote.h.

- -
-
- -
-
- - - - -
int32 tzoff
-
- -

Timezone offset.

- -

Definition at line 189 of file pcap-remote.h.

- -
-
-
The documentation for this struct was generated from the following file: -
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/structrpcap__pkthdr.html b/libs/WinPcap-413-173-b4/docs/html/structrpcap__pkthdr.html deleted file mode 100644 index 6f519ba5..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/structrpcap__pkthdr.html +++ /dev/null @@ -1,172 +0,0 @@ - - - - - - -WinPcap: rpcap_pkthdr Struct Reference - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - - -
-
- -
-
rpcap_pkthdr Struct Reference
-
-
- -

Format of the header which encapsulates captured packets when transmitted on the network. - More...

- -

#include <pcap-remote.h>

- - - - - - - - - - - - - - - - - -

-Data Fields

uint32 timestamp_sec
 'struct timeval' compatible, it represents the 'tv_sec' field More...
 
uint32 timestamp_usec
 'struct timeval' compatible, it represents the 'tv_usec' field More...
 
uint32 caplen
 Length of portion present in the capture. More...
 
uint32 len
 Real length this packet (off wire) More...
 
uint32 npkt
 Ordinal number of the packet (i.e. the first one captured has '1', the second one '2', etc) More...
 
-

Detailed Description

-

Format of the header which encapsulates captured packets when transmitted on the network.

-

This message requries the general header as well, since we want to be albe to exchange more information across the network in the future (for example statistics, and kind like that).

- -

Definition at line 219 of file pcap-remote.h.

-

Field Documentation

- -
-
- - - - -
uint32 caplen
-
- -

Length of portion present in the capture.

- -

Definition at line 223 of file pcap-remote.h.

- -
-
- -
-
- - - - -
uint32 len
-
- -

Real length this packet (off wire)

- -

Definition at line 224 of file pcap-remote.h.

- -
-
- -
-
- - - - -
uint32 npkt
-
- -

Ordinal number of the packet (i.e. the first one captured has '1', the second one '2', etc)

- -

Definition at line 225 of file pcap-remote.h.

- -
-
- -
-
- - - - -
uint32 timestamp_sec
-
- -

'struct timeval' compatible, it represents the 'tv_sec' field

- -

Definition at line 221 of file pcap-remote.h.

- -
-
- -
-
- - - - -
uint32 timestamp_usec
-
- -

'struct timeval' compatible, it represents the 'tv_usec' field

- -

Definition at line 222 of file pcap-remote.h.

- -
-
-
The documentation for this struct was generated from the following file: -
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/structrpcap__sampling.html b/libs/WinPcap-413-173-b4/docs/html/structrpcap__sampling.html deleted file mode 100644 index da537140..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/structrpcap__sampling.html +++ /dev/null @@ -1,152 +0,0 @@ - - - - - - -WinPcap: rpcap_sampling Struct Reference - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - - -
-
- -
-
rpcap_sampling Struct Reference
-
-
- -

Structure that is needed to set sampling parameters. - More...

- -

#include <pcap-remote.h>

- - - - - - - - - - - - - - -

-Data Fields

uint8 method
 Sampling method. More...
 
uint8 dummy1
 Must be zero. More...
 
uint16 dummy2
 Must be zero. More...
 
uint32 value
 Parameter related to the sampling method. More...
 
-

Detailed Description

-

Structure that is needed to set sampling parameters.

- -

Definition at line 269 of file pcap-remote.h.

-

Field Documentation

- -
-
- - - - -
uint8 dummy1
-
- -

Must be zero.

- -

Definition at line 272 of file pcap-remote.h.

- -
-
- -
-
- - - - -
uint16 dummy2
-
- -

Must be zero.

- -

Definition at line 273 of file pcap-remote.h.

- -
-
- -
-
- - - - -
uint8 method
-
- -

Sampling method.

- -

Definition at line 271 of file pcap-remote.h.

- -
-
- -
-
- - - - -
uint32 value
-
- -

Parameter related to the sampling method.

- -

Definition at line 274 of file pcap-remote.h.

- -
-
-
The documentation for this struct was generated from the following file: -
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/structrpcap__startcapreply.html b/libs/WinPcap-413-173-b4/docs/html/structrpcap__startcapreply.html deleted file mode 100644 index 02d5a27c..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/structrpcap__startcapreply.html +++ /dev/null @@ -1,133 +0,0 @@ - - - - - - -WinPcap: rpcap_startcapreply Struct Reference - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - - -
-
- -
-
rpcap_startcapreply Struct Reference
-
-
- -

Format of the reply message that devoted to start a remote capture (startcap reply command) - More...

- -

#include <pcap-remote.h>

- - - - - - - - - - - -

-Data Fields

int32 bufsize
 Size of the user buffer allocated by WinPcap; it can be different from the one we chose. More...
 
uint16 portdata
 Network port on which the server is waiting at (passive mode only) More...
 
uint16 dummy
 Must be zero. More...
 
-

Detailed Description

-

Format of the reply message that devoted to start a remote capture (startcap reply command)

- -

Definition at line 205 of file pcap-remote.h.

-

Field Documentation

- -
-
- - - - -
int32 bufsize
-
- -

Size of the user buffer allocated by WinPcap; it can be different from the one we chose.

- -

Definition at line 207 of file pcap-remote.h.

- -
-
- -
-
- - - - -
uint16 dummy
-
- -

Must be zero.

- -

Definition at line 209 of file pcap-remote.h.

- -
-
- -
-
- - - - -
uint16 portdata
-
- -

Network port on which the server is waiting at (passive mode only)

- -

Definition at line 208 of file pcap-remote.h.

- -
-
-
The documentation for this struct was generated from the following file: -
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/structrpcap__startcapreq.html b/libs/WinPcap-413-173-b4/docs/html/structrpcap__startcapreq.html deleted file mode 100644 index 26ec9f94..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/structrpcap__startcapreq.html +++ /dev/null @@ -1,152 +0,0 @@ - - - - - - -WinPcap: rpcap_startcapreq Struct Reference - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - - -
-
- -
-
rpcap_startcapreq Struct Reference
-
-
- -

Format of the message that starts a remote capture (startcap command) - More...

- -

#include <pcap-remote.h>

- - - - - - - - - - - - - - -

-Data Fields

uint32 snaplen
 Length of the snapshot (number of bytes to capture for each packet) More...
 
uint32 read_timeout
 Read timeout in milliseconds. More...
 
uint16 flags
 Flags (see RPCAP_STARTCAPREQ_FLAG_xxx) More...
 
uint16 portdata
 Network port on which the client is waiting at (if 'serveropen') More...
 
-

Detailed Description

-

Format of the message that starts a remote capture (startcap command)

- -

Definition at line 195 of file pcap-remote.h.

-

Field Documentation

- -
-
- - - - -
uint16 flags
-
- -

Flags (see RPCAP_STARTCAPREQ_FLAG_xxx)

- -

Definition at line 199 of file pcap-remote.h.

- -
-
- -
-
- - - - -
uint16 portdata
-
- -

Network port on which the client is waiting at (if 'serveropen')

- -

Definition at line 200 of file pcap-remote.h.

- -
-
- -
-
- - - - -
uint32 read_timeout
-
- -

Read timeout in milliseconds.

- -

Definition at line 198 of file pcap-remote.h.

- -
-
- -
-
- - - - -
uint32 snaplen
-
- -

Length of the snapshot (number of bytes to capture for each packet)

- -

Definition at line 197 of file pcap-remote.h.

- -
-
-
The documentation for this struct was generated from the following file: -
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/structrpcap__stats.html b/libs/WinPcap-413-173-b4/docs/html/structrpcap__stats.html deleted file mode 100644 index dd953ed9..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/structrpcap__stats.html +++ /dev/null @@ -1,152 +0,0 @@ - - - - - - -WinPcap: rpcap_stats Struct Reference - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - - -
-
- -
-
-
-
- -

Structure that keeps the statistics about the number of packets captured, dropped, etc. - More...

- -

#include <pcap-remote.h>

- - - - - - - - - - - - - - -

-Data Fields

uint32 ifrecv
 Packets received by the kernel filter (i.e. pcap_stats.ps_recv) More...
 
uint32 ifdrop
 Packets dropped by the network interface (e.g. not enough buffers) (i.e. pcap_stats.ps_ifdrop) More...
 
uint32 krnldrop
 Packets dropped by the kernel filter (i.e. pcap_stats.ps_drop) More...
 
uint32 svrcapt
 Packets captured by the RPCAP daemon and sent on the network. More...
 
-

Detailed Description

-

Structure that keeps the statistics about the number of packets captured, dropped, etc.

- -

Definition at line 259 of file pcap-remote.h.

-

Field Documentation

- -
-
- - - - -
uint32 ifdrop
-
- -

Packets dropped by the network interface (e.g. not enough buffers) (i.e. pcap_stats.ps_ifdrop)

- -

Definition at line 262 of file pcap-remote.h.

- -
-
- -
-
- - - - -
uint32 ifrecv
-
- -

Packets received by the kernel filter (i.e. pcap_stats.ps_recv)

- -

Definition at line 261 of file pcap-remote.h.

- -
-
- -
-
- - - - -
uint32 krnldrop
-
- -

Packets dropped by the kernel filter (i.e. pcap_stats.ps_drop)

- -

Definition at line 263 of file pcap-remote.h.

- -
-
- -
-
- - - - -
uint32 svrcapt
-
- -

Packets captured by the RPCAP daemon and sent on the network.

- -

Definition at line 264 of file pcap-remote.h.

- -
-
-
The documentation for this struct was generated from the following file: -
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/structsf__pkthdr.html b/libs/WinPcap-413-173-b4/docs/html/structsf__pkthdr.html deleted file mode 100644 index 7473d0ec..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/structsf__pkthdr.html +++ /dev/null @@ -1,131 +0,0 @@ - - - - - - -WinPcap: sf_pkthdr Struct Reference - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - - -
- -
- -

Header associated to a packet in the driver's buffer when the driver is in dump mode. Similar to the bpf_hdr structure, but simpler. - More...

- -

#include <Packet.h>

- - - - - - - - - - -

-Data Fields

struct timeval ts
 time stamp More...
 
UINT caplen
 
UINT len
 Length of the original packet (off wire). More...
 
-

Detailed Description

-

Header associated to a packet in the driver's buffer when the driver is in dump mode. Similar to the bpf_hdr structure, but simpler.

- -

Definition at line 121 of file Packet.h.

-

Field Documentation

- -
-
- - - - -
UINT caplen
-
-

Length of captured portion. The captured portion can be different from the original packet, because it is possible (with a proper filter) to instruct the driver to capture only a portion of the packets.

- -

Definition at line 123 of file Packet.h.

- -
-
- -
-
- - - - -
UINT len
-
- -

Length of the original packet (off wire).

- -

Definition at line 126 of file Packet.h.

- -
-
- -
-
- - - - -
struct timeval ts
-
- -

time stamp

- -

Definition at line 122 of file Packet.h.

- -
-
-
The documentation for this struct was generated from the following file: -
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/sync_off.png b/libs/WinPcap-413-173-b4/docs/html/sync_off.png deleted file mode 100644 index 3b443fc62892114406e3d399421b2a881b897acc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 853 zcmV-b1FHOqP)oT|#XixUYy%lpuf3i8{fX!o zUyDD0jOrAiT^tq>fLSOOABs-#u{dV^F$b{L9&!2=9&RmV;;8s^x&UqB$PCj4FdKbh zoB1WTskPUPu05XzFbA}=KZ-GP1fPpAfSs>6AHb12UlR%-i&uOlTpFNS7{jm@mkU1V zh`nrXr~+^lsV-s1dkZOaI|kYyVj3WBpPCY{n~yd%u%e+d=f%`N0FItMPtdgBb@py; zq@v6NVArhyTC7)ULw-Jy8y42S1~4n(3LkrW8mW(F-4oXUP3E`e#g**YyqI7h-J2zK zK{m9##m4ri!7N>CqQqCcnI3hqo1I;Yh&QLNY4T`*ptiQGozK>FF$!$+84Z`xwmeMh zJ0WT+OH$WYFALEaGj2_l+#DC3t7_S`vHpSivNeFbP6+r50cO8iu)`7i%Z4BTPh@_m3Tk!nAm^)5Bqnr%Ov|Baunj#&RPtRuK& z4RGz|D5HNrW83-#ydk}tVKJrNmyYt-sTxLGlJY5nc&Re zU4SgHNPx8~Yxwr$bsju?4q&%T1874xxzq+_%?h8_ofw~(bld=o3iC)LUNR*BY%c0y zWd_jX{Y8`l%z+ol1$@Qa?Cy!(0CVIEeYpKZ`(9{z>3$CIe;pJDQk$m3p}$>xBm4lb zKo{4S)`wdU9Ba9jJbVJ0C=SOefZe%d$8=2r={nu<_^a3~>c#t_U6dye5)JrR(_a^E f@}b6j1K9lwFJq@>o)+Ry00000NkvXXu0mjfWa5j* diff --git a/libs/WinPcap-413-173-b4/docs/html/sync_on.png b/libs/WinPcap-413-173-b4/docs/html/sync_on.png deleted file mode 100644 index e08320fb64e6fa33b573005ed6d8fe294e19db76..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 845 zcmV-T1G4;yP)Y;xxyHF2B5Wzm| zOOGupOTn@c(JmBOl)e;XMNnZuiTJP>rM8<|Q`7I_))aP?*T)ow&n59{}X4$3Goat zgjs?*aasfbrokzG5cT4K=uG`E14xZl@z)F={P0Y^?$4t z>v!teRnNZym<6h{7sLyF1V0HsfEl+l6TrZpsfr1}luH~F7L}ktXu|*uVX^RG$L0`K zWs3j|0tIvVe(N%_?2{(iCPFGf#B6Hjy6o&}D$A%W%jfO8_W%ZO#-mh}EM$LMn7joJ z05dHr!5Y92g+31l<%i1(=L1a1pXX+OYnalY>31V4K}BjyRe3)9n#;-cCVRD_IG1fT zOKGeNY8q;TL@K{dj@D^scf&VCs*-Jb>8b>|`b*osv52-!A?BpbYtTQBns5EAU**$m zSnVSm(teh>tQi*S*A>#ySc=n;`BHz`DuG4&g4Kf8lLhca+zvZ7t7RflD6-i-mcK=M z!=^P$*u2)bkY5asG4gsss!Hn%u~>}kIW`vMs%lJLH+u*9<4PaV_c6U`KqWXQH%+Nu zTv41O(^ZVi@qhjQdG!fbZw&y+2o!iYymO^?ud3{P*HdoX83YV*Uu_HB=?U&W9%AU# z80}k1SS-CXTU7dcQlsm<^oYLxVSseqY6NO}dc`Nj?8vrhNuCdm@^{a3AQ_>6myOj+ z`1RsLUXF|dm|3k7s2jD(B{rzE>WI2scH8i1;=O5Cc9xB3^aJk%fQjqsu+kH#0=_5a z0nCE8@dbQa-|YIuUVvG0L_IwHMEhOj$Mj4Uq05 X8=0q~qBNan00000NkvXXu0mjfptF>5 diff --git a/libs/WinPcap-413-173-b4/docs/html/tab_a.png b/libs/WinPcap-413-173-b4/docs/html/tab_a.png deleted file mode 100644 index 3b725c41c5a527a3a3e40097077d0e206a681247..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 142 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QlXwMjv*C{Z|8b*H5dputLHD# z=<0|*y7z(Vor?d;H&?EG&cXR}?!j-Lm&u1OOI7AIF5&c)RFE;&p0MYK>*Kl@eiymD r@|NpwKX@^z+;{u_Z~trSBfrMKa%3`zocFjEXaR$#tDnm{r-UW|TZ1%4 diff --git a/libs/WinPcap-413-173-b4/docs/html/tab_b.png b/libs/WinPcap-413-173-b4/docs/html/tab_b.png deleted file mode 100644 index e2b4a8638cb3496a016eaed9e16ffc12846dea18..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 169 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QU#tajv*C{Z}0l@H7kg?K0Lnr z!j&C6_(~HV9oQ0Pa6x{-v0AGV_E?vLn=ZI-;YrdjIl`U`uzuDWSP?o#Dmo{%SgM#oan kX~E1%D-|#H#QbHoIja2U-MgvsK&LQxy85}Sb4q9e0Efg%P5=M^ diff --git a/libs/WinPcap-413-173-b4/docs/html/tabs.css b/libs/WinPcap-413-173-b4/docs/html/tabs.css deleted file mode 100644 index 9cf578f2..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/tabs.css +++ /dev/null @@ -1,60 +0,0 @@ -.tabs, .tabs2, .tabs3 { - background-image: url('tab_b.png'); - width: 100%; - z-index: 101; - font-size: 13px; - font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; -} - -.tabs2 { - font-size: 10px; -} -.tabs3 { - font-size: 9px; -} - -.tablist { - margin: 0; - padding: 0; - display: table; -} - -.tablist li { - float: left; - display: table-cell; - background-image: url('tab_b.png'); - line-height: 36px; - list-style: none; -} - -.tablist a { - display: block; - padding: 0 20px; - font-weight: bold; - background-image:url('tab_s.png'); - background-repeat:no-repeat; - background-position:right; - color: #283A5D; - text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); - text-decoration: none; - outline: none; -} - -.tabs3 .tablist a { - padding: 0 10px; -} - -.tablist a:hover { - background-image: url('tab_h.png'); - background-repeat:repeat-x; - color: #fff; - text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); - text-decoration: none; -} - -.tablist li.current a { - background-image: url('tab_a.png'); - background-repeat:repeat-x; - color: #fff; - text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); -} diff --git a/libs/WinPcap-413-173-b4/docs/html/wpcap__remote_8htm.html b/libs/WinPcap-413-173-b4/docs/html/wpcap__remote_8htm.html deleted file mode 100644 index 236f6c15..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/wpcap__remote_8htm.html +++ /dev/null @@ -1,59 +0,0 @@ - - - - - - -WinPcap: wpcap_remote.htm File Reference - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - - -
-
-
-
wpcap_remote.htm File Reference
-
- - -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/wpcap__remote_8htm_source.html b/libs/WinPcap-413-173-b4/docs/html/wpcap__remote_8htm_source.html deleted file mode 100644 index 26c6a73e..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/wpcap__remote_8htm_source.html +++ /dev/null @@ -1,407 +0,0 @@ - - - - - - -WinPcap: wpcap_remote.htm Source File - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - - -
-
-
-
wpcap_remote.htm
-
-
-Go to the documentation of this file.
1 <html>
-
2 
-
3 <head>
-
4 <meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
-
5 <meta name="GENERATOR" content="Microsoft FrontPage 4.0">
-
6 <meta name="ProgId" content="FrontPage.Editor.Document">
-
7 <title>Using WinPcap Remote Capture</title>
-
8 </head>
-
9 
-
10 <body>
-
11 
-
12 <hr>
-
13 <ul>
-
14  <li><a href="#RunningModes">Remote Capture Running Modes</a></li>
-
15  <li><a href="#Config">Configuring the Remote Daemon (rpcapd)</a></li>
-
16  <li><a href="#StartCap">Starting a capture on a remote machine</a></li>
-
17  <li><a href="#UNIX">Installing the Remote Capture Daemon in UNIX</a></li>
-
18 </ul>
-
19 <hr>
-
20 <p>WinPcap comes with Remote Capture capabilities. This is an highly
-
21 experimental feature that allows to interact to a remote machine and capture
-
22 packets that are being transmitted on the remote network.</p>
-
23 <p>This requires a <b>remote daemon </b>(called <code>rpcapd</code>) which
-
24 performs the capture and sends data back and a <b>local client </b>that sends
-
25 the appropriate commands and receives the captured data.</p>
-
26 <p>WinPcap extends the standard WinPcap code in such a way that all
-
27 WinPcap-based tools can expoit remote capture capabilities. For instance, the
-
28 capabillity to interact with a remote daemon are added to the client software
-
29 without any explicit modification to it. Vice versa, the remote daemon must be
-
30 explicitely installed (and configured) on the remote machine.</p>
-
31 <h2><a name="RunningModes"></a>Remote Capture Running Modes</h2>
-
32 <p>The Remote Capture Protocol (RPCAP) can work in two modes:</p>
-
33 <ul>
-
34  <li><b>Passive Mode</b> (default): the client (e.g. a network sniffer)
-
35  connects to the remote daemon, it sends them the appropriate commands, and
-
36  it starts the capture.</li>
-
37  <li><b>Active Mode</b>: the remote daemon try to establish a connection toward
-
38  the client (e.g. the network sniffer); then, the client sends the
-
39  appropriate commands to the daemon and it starts the capture. This name is
-
40  due to the fact thet the daemon becomes <i>active</i> instead of <i>waiting</i>
-
41  for new connections.</li>
-
42 </ul>
-
43 <p>The Active Mode is useful in case the remote daemon is behind a firewall and
-
44 it cannot receive connections from the external world. In this case, the daemon
-
45 can be configured to establish the connection to a given host, which will have
-
46 been configured in order to <i>wait</i> for that connection. After establishing
-
47 the connection, the protocol continues its job in almost the same way in both
-
48 Active and Passive Mode.</p>
-
49 <p>Analyzer (<a href="http://analyzer.polito.it/30alpha/">http://analyzer.polito.it/30alpha/</a>)
-
50 has a set of commands (in the <b>Capture</b> menu) that allows you to accept a
-
51 remote connection and then start the capture on the remote device. Currently,
-
52 Analyzer is the only tool that is able to work in active mode, since it requires
-
53 some modifications to the application code.</p>
-
54 <h2><a name="Config"></a>Configuring the Remote Daemon (rpcapd)</h2>
-
55 <p>The Remote Daemon is a standard Win32 executable running either in console
-
56 mode or as a service. The executable can be found in the <code>WinPcap</code>
-
57 folder and it has the following syntax:</p>
-
58 <pre> rpcapd [-b &lt;address&gt;] [-p &lt;port&gt;] [-6] [-l &lt;host_list&gt;] [-a &lt;host,port&gt;]
-
59  [-n] [-v] [-d] [-s &lt;file&gt;] [-f &lt;file&gt;]</pre>
-
60 <p>The daemon can be compiled and it is actually working on Linux as well.</p>
-
61 <p>Here there is a brief description of the allowed commands:</p>
-
62 <div align="left">
-
63  <table border="1">
-
64  <tr>
-
65  <th>Switch</th>
-
66  <th>Description</th>
-
67  </tr>
-
68  <tr>
-
69  <td>
-
70  <pre>-b &lt;address&gt;</pre>
-
71  </td>
-
72  <td>It sets the address the daemon has to bind to (either numeric or
-
73  literal). Default: it binds to all local IPv4 and IPv6 addresses.</td>
-
74  </tr>
-
75  <tr>
-
76  <td>
-
77  <pre>-p &lt;port&gt;</pre>
-
78  </td>
-
79  <td>It sets the port the daemon has to bind to. Default: it binds to port
-
80  2002.</td>
-
81  </tr>
-
82  <tr>
-
83  <td>
-
84  <pre>-4</pre>
-
85  </td>
-
86  <td>It binds only to IPv4 addresses. Default: both IPv4 and IPv6 waiting
-
87  sockets are used.</td>
-
88  </tr>
-
89  <tr>
-
90  <td>
-
91  <pre>-l &lt;host_list_file&gt;</pre>
-
92  </td>
-
93  <td>It specifies a file that keeps the list of the hosts which are allowed
-
94  to connect to this daemon (if more than one, the file keeps them one per
-
95  line). We suggest to use literal names (instead of numeric ones) in
-
96  order to avoid problems with different address families (IPv4 and IPv6).</td>
-
97  </tr>
-
98  <tr>
-
99  <td>
-
100  <pre>-n</pre>
-
101  </td>
-
102  <td>It permits NULL authentication (usually used with '-l', that
-
103  guarantees that only the allowed hosts can connect to the daemon).
-
104  Default: the username/password authentication mechanism is required.</td>
-
105  </tr>
-
106  <tr>
-
107  <td>
-
108  <pre>-a &lt;host, port&gt;</pre>
-
109  </td>
-
110  <td>It forces the daemon to run in active mode and to connect to 'host' on
-
111  port 'port'. This does not exclude that the daemon is still able to
-
112  accept passive connections.</td>
-
113  </tr>
-
114  <tr>
-
115  <td>
-
116  <pre>-v</pre>
-
117  </td>
-
118  <td>It forces the daemon to run in active mode only (default: the daemon
-
119  always accepts active connections, even if the '-a' switch is
-
120  specified).</td>
-
121  </tr>
-
122  <tr>
-
123  <td>
-
124  <pre>-d</pre>
-
125  </td>
-
126  <td>Forces the daemon to run in background, i.e. as a daemon (UNIX only)
-
127  or as a service (Win32 only). <b>Warning</b> (Win32): this switch is
-
128  provided automatically when WinPcap installs this daemon into the Win32
-
129  services (control panel - administrative tools - services).</td>
-
130  </tr>
-
131  <tr>
-
132  <td>
-
133  <pre>-s &lt;file&gt;</pre>
-
134  </td>
-
135  <td>It saves the current configuration to file.</td>
-
136  </tr>
-
137  <tr>
-
138  <td>
-
139  <pre>-f &lt;file&gt;</pre>
-
140  </td>
-
141  <td>It loads the current configuration from file; all the switches
-
142  specified from the command line are ignored and the file settings are
-
143  used instead.</td>
-
144  </tr>
-
145  <tr>
-
146  <td>
-
147  <pre>-h</pre>
-
148  </td>
-
149  <td>It prints an help screen.</td>
-
150  </tr>
-
151  </table>
-
152 </div>
-
153 <h3>Installing the remote daemon</h3>
-
154 <p>The remote daemon is installed automatically when installing WinPcap. The
-
155 installation process places the <code>rpcapd</code> file into the <code>WinPcap</code>
-
156 folder. This file can be executed either from the command line, or as a service.
-
157 For instance, the installation process updates the list of available services
-
158 list and it creates a new item (<b>Remote Packet Capture Protocol v.0
-
159 (experimental)</b> ). To avoid security problems, the service is inactive and it
-
160 has to be started manually (control panel - administrative tools - services -
-
161 start).</p>
-
162 <p>The service has a set of &quot;standard&quot; parameters, i.e. it it launched
-
163 with the &quot;<code>-d</code>&quot; flag (in orde to make it running as a
-
164 service) and the &quot;<code>-f rpcapd.ini</code>&quot; flag. The user can
-
165 create a file called <code>rpcapd.ini</code> in the same folder of the
-
166 executable, and put the configuration commands in there. In order for the
-
167 service to execute the commands, you have to stop and restart it again (i.e. the
-
168 initialization file is parsed only at the beginning). Viceversa, the UNIX
-
169 version of <code>rpcapd</code> is able to read the configuration file when
-
170 sending a kill -HUP signal to it. In that case, all the existing connections
-
171 remain in place, while the new connections will be created according to the new
-
172 parameters.</p>
-
173 <p>In case the user does not want to create the configuration file manually, it
-
174 can launch <code>rpcapd</code> with the requested parameters plus the &quot;<code>-s
-
175 filename</code>&quot; one. The daemon will parse all the parameters and save
-
176 them into the specified configuration file.</p>
-
177 <h3>Starting the remote daemon as a standard executable</h3>
-
178 <p>The <code>rpcapd</code> executable can be launched directly, i.e. it can run
-
179 in the foreground as well (not as a daemon/service). The procedure is quite
-
180 simple: you have to invoke the executable from the command line with all the
-
181 requested parameters but the &quot;<code>-d</code>&quot; flag. The capture
-
182 server will start in the foreground.</p>
-
183 <h2><a name="StartCap"></a>Starting a capture on a remote machine</h2>
-
184 <p>If you are using a tool that is already aware of the remote capture (like
-
185 Analyzer), everything is simple. The capture wizard will help you to locate the
-
186 appropriate interface on the remote machine.</p>
-
187 <p>If your preferred tool is not aware of the remote capture, you can still use
-
188 the remote capture. In this case you have to read the next Section.</p>
-
189 <p><b>Be carefully</b>: the capture server (<code>rpcapd</code>) must be up and
-
190 running on the remote machine.</p>
-
191 <h3>New string specifiers for interface selection</h3>
-
192 <p>If your preferred tool is not aware of the remote capture, the only thing you
-
193 must do is to insert, as interface specifier, the indication of the remote
-
194 machine you want to contact. The following forms are allowed:</p>
-
195 <div align="left">
-
196  <table border="1">
-
197  <tr>
-
198  <th>Adapter String</th>
-
199  <th>Description</th>
-
200  </tr>
-
201  <tr>
-
202  <td>
-
203  <pre>file://filename</pre>
-
204  </td>
-
205  <td>It opens a local file.</td>
-
206  </tr>
-
207  <tr>
-
208  <td>
-
209  <pre>rpcap://host.foo.bar/adaptername</pre>
-
210  </td>
-
211  <td>It opens a remote adapter; the host is specified by means of the
-
212  literal name, without port number (i.e. it uses the RPCAP default port).</td>
-
213  </tr>
-
214  <tr>
-
215  <td>
-
216  <pre>rpcap://host.foo.bar:1234/adaptername</pre>
-
217  </td>
-
218  <td>It is the same as before, but it uses a different port number.</td>
-
219  </tr>
-
220  <tr>
-
221  <td>
-
222  <pre>rpcap://10.11.12.13/adaptername</pre>
-
223  </td>
-
224  <td>It opens a remote adapter, but the host is specified by means of an
-
225  IPv4 numeric address, without port number (i.e. it uses the RPCAP
-
226  default port).</td>
-
227  </tr>
-
228  <tr>
-
229  <td>
-
230  <pre>rpcap://10.11.12.13:1234/adaptername</pre>
-
231  </td>
-
232  <td>It is the same as before, but it uses a different port number.</td>
-
233  </tr>
-
234  <tr>
-
235  <td>
-
236  <pre>rpcap://[10.11.12.13]:1234/adaptername</pre>
-
237  </td>
-
238  <td>It is the same as before, but the numeric address is specified within
-
239  square brackets (like IPv6 addresses).</td>
-
240  </tr>
-
241  <tr>
-
242  <td>
-
243  <pre>rpcap://[1:2:3::4]/adaptername</pre>
-
244  </td>
-
245  <td>It opens a remote adapter, but the host is specified by means of an
-
246  IPv6 numeric address, without port number (i.e. it uses the RPCAP
-
247  default port). In case of IPv6 addresses you MUST use the square
-
248  brackets.</td>
-
249  </tr>
-
250  <tr>
-
251  <td>
-
252  <pre>rpcap://[1:2:3::4]:1234/adaptername</pre>
-
253  </td>
-
254  <td>It is the same as before, but it uses a different port number.</td>
-
255  </tr>
-
256  <tr>
-
257  <td>
-
258  <pre>rpcap://adaptername</pre>
-
259  </td>
-
260  <td>It opens a local adapter, without using the RPCAP protocol.</td>
-
261  </tr>
-
262  <tr>
-
263  <td>
-
264  <pre>adaptername</pre>
-
265  </td>
-
266  <td>It opens a local adapter; it is kept for compability, but it is
-
267  strongly discouraged.</td>
-
268  </tr>
-
269  <tr>
-
270  <td>
-
271  <pre>(NULL)</pre>
-
272  </td>
-
273  <td>It opens the first local adapter; it is kept for compability, but it
-
274  is strongly discouraged.</td>
-
275  </tr>
-
276  </table>
-
277 </div>
-
278 <p>The following formats are not allowed:</p>
-
279 <table border="1">
-
280  <tr>
-
281  <th>Adapter String</th>
-
282  <th>Description</th>
-
283  </tr>
-
284  <tr>
-
285  <td>
-
286  <pre>rpcap://</pre>
-
287  </td>
-
288  <td>It cannot be used to open the first local adapter.</td>
-
289  </tr>
-
290  <tr>
-
291  <td>
-
292  <pre>rpcap://hostname/</pre>
-
293  </td>
-
294  <td>It cannot be used to open the first remote adapter.</td>
-
295  </tr>
-
296 </table>
-
297 <h2><a name="UNIX"></a>Installing the Remote Capture Daemon in UNIX</h2>
-
298 <p>The WinPcap source archive can be compiled in UNIX as well. Currently, remote
-
299 capture has been tested on Linux and BSD. What you have to do is:</p>
-
300 <ul>
-
301  <li>download the WinPcap sources</li>
-
302  <li>unpack the sources
-
303  <ul>
-
304  <li>we suggest to use the <code>unzip -a</code> command in order to
-
305  convert DOS files to UNIX ones</li>
-
306  </ul>
-
307  </li>
-
308  <li>move to the <code>libpcap</code> folder</li>
-
309  <li>type:
-
310  <ul>
-
311  <li><code>./configure</code></li>
-
312  <li><b>Warning</b>: in case the previous step reports an error, please
-
313  regenerate the <code>configure</code> file using <code>automake</code>
-
314  (version 2.50 or higher required)</li>
-
315  <li><code>make</code></li>
-
316  </ul>
-
317  </li>
-
318  <li>move to the <code>rpcapd</code> folder</li>
-
319  <li>type <code>make</code></li>
-
320 </ul>
-
321 <p>The remote capture capabilities are turned on by default on Linux and
-
322 FreeBSD. In case you do not want remote capture capabilities in libpcap, you can
-
323 type</p>
-
324 <pre> ./configure --disable-remote</pre>
-
325 <p>at the &quot;<code>configure</code>&quot; step. All the possible flags are
-
326 listed when typing <code>./configure --help</code>.</p>
-
327 <p>What you obtained right now, is:</p>
-
328 <ul>
-
329  <li>a library file (<code>libpcap.a</code>), which can be linked to other
-
330  applications (like <code>tcpdump</code>) in order to enable the remote
-
331  capture for them.</li>
-
332  <li>an executable (<code>rpcapd</code>) that is the remote daemon</li>
-
333 </ul>
-
334 <p><b>Warning</b>: in order to run the <code>rpcapd</code> daemon, the program
-
335 must either</p>
-
336 <ul>
-
337  <li>run as root (or)</li>
-
338  <li>run as user, but it must be owned by root and must be SUID root (<code>chmod
-
339  u+s rpcapd</code>)</li>
-
340 </ul>
-
341 <h3>Known bugs</h3>
-
342 <p><b>FreeBSD</b>: the first time you call the <code>pcap_stat()</code>, the
-
343 function takes several seconds to return. Therefore, programs like Analyzer seem
-
344 to hang up for 20-30 seconds at the beginning of the capture (if this is done
-
345 with BSD as a remote probe). We're investigating to solve this issue.</p>
-
346 <p><i>For any question, please refer to the WinPcap help page.</i></p>
-
347 
-
348 </body>
-
349 
-
350 </html>
-
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/wpcap__tut1_8txt.html b/libs/WinPcap-413-173-b4/docs/html/wpcap__tut1_8txt.html deleted file mode 100644 index a6986bc0..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/wpcap__tut1_8txt.html +++ /dev/null @@ -1,57 +0,0 @@ - - - - - - -WinPcap: wpcap_tut1.txt File Reference - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - - -
-
-
-
wpcap_tut1.txt File Reference
-
-
-
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/wpcap__tut2_8txt.html b/libs/WinPcap-413-173-b4/docs/html/wpcap__tut2_8txt.html deleted file mode 100644 index 63141314..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/wpcap__tut2_8txt.html +++ /dev/null @@ -1,57 +0,0 @@ - - - - - - -WinPcap: wpcap_tut2.txt File Reference - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - - -
-
-
-
wpcap_tut2.txt File Reference
-
-
-
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/wpcap__tut3_8txt.html b/libs/WinPcap-413-173-b4/docs/html/wpcap__tut3_8txt.html deleted file mode 100644 index f4016fbf..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/wpcap__tut3_8txt.html +++ /dev/null @@ -1,57 +0,0 @@ - - - - - - -WinPcap: wpcap_tut3.txt File Reference - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - - -
-
-
-
wpcap_tut3.txt File Reference
-
-
-
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/wpcap__tut4_8txt.html b/libs/WinPcap-413-173-b4/docs/html/wpcap__tut4_8txt.html deleted file mode 100644 index 98f5c247..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/wpcap__tut4_8txt.html +++ /dev/null @@ -1,57 +0,0 @@ - - - - - - -WinPcap: wpcap_tut4.txt File Reference - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - - -
-
-
-
wpcap_tut4.txt File Reference
-
-
-
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/wpcap__tut5_8txt.html b/libs/WinPcap-413-173-b4/docs/html/wpcap__tut5_8txt.html deleted file mode 100644 index 4e3cc210..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/wpcap__tut5_8txt.html +++ /dev/null @@ -1,57 +0,0 @@ - - - - - - -WinPcap: wpcap_tut5.txt File Reference - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - - -
-
-
-
wpcap_tut5.txt File Reference
-
-
-
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/wpcap__tut6_8txt.html b/libs/WinPcap-413-173-b4/docs/html/wpcap__tut6_8txt.html deleted file mode 100644 index 3515d42f..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/wpcap__tut6_8txt.html +++ /dev/null @@ -1,57 +0,0 @@ - - - - - - -WinPcap: wpcap_tut6.txt File Reference - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - - -
-
-
-
wpcap_tut6.txt File Reference
-
-
-
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/wpcap__tut7_8txt.html b/libs/WinPcap-413-173-b4/docs/html/wpcap__tut7_8txt.html deleted file mode 100644 index eededbeb..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/wpcap__tut7_8txt.html +++ /dev/null @@ -1,57 +0,0 @@ - - - - - - -WinPcap: wpcap_tut7.txt File Reference - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - - -
-
-
-
wpcap_tut7.txt File Reference
-
-
-
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/wpcap__tut8_8txt.html b/libs/WinPcap-413-173-b4/docs/html/wpcap__tut8_8txt.html deleted file mode 100644 index 7e84e7d5..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/wpcap__tut8_8txt.html +++ /dev/null @@ -1,57 +0,0 @@ - - - - - - -WinPcap: wpcap_tut8.txt File Reference - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - - -
-
-
-
wpcap_tut8.txt File Reference
-
-
-
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/wpcap__tut9_8txt.html b/libs/WinPcap-413-173-b4/docs/html/wpcap__tut9_8txt.html deleted file mode 100644 index 5d8dce48..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/wpcap__tut9_8txt.html +++ /dev/null @@ -1,57 +0,0 @@ - - - - - - -WinPcap: wpcap_tut9.txt File Reference - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - - -
-
-
-
wpcap_tut9.txt File Reference
-
-
-
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/wpcap__tut_8txt.html b/libs/WinPcap-413-173-b4/docs/html/wpcap__tut_8txt.html deleted file mode 100644 index 8a1caead..00000000 --- a/libs/WinPcap-413-173-b4/docs/html/wpcap__tut_8txt.html +++ /dev/null @@ -1,57 +0,0 @@ - - - - - - -WinPcap: wpcap_tut.txt File Reference - - - - - - -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - - - -
-
-
-
wpcap_tut.txt File Reference
-
-
-
- -
-

-documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 -CACE Technologies. Copyright (c) 2010-2013 -Riverbed Technology. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/Examples-pcap/GNUmakefile b/libs/WpdPack_4_1_2/Examples-pcap/GNUmakefile similarity index 96% rename from libs/WinPcap-413-173-b4/Examples-pcap/GNUmakefile rename to libs/WpdPack_4_1_2/Examples-pcap/GNUmakefile index a62b3fb9..9bf82520 100644 --- a/libs/WinPcap-413-173-b4/Examples-pcap/GNUmakefile +++ b/libs/WpdPack_4_1_2/Examples-pcap/GNUmakefile @@ -1,10 +1,10 @@ -# Makefile for cygwin gcc -# Nate Lawson - -SUBDIRS = basic_dump basic_dump_ex iflist pcap_filter pktdump_ex readfile readfile_ex savedump sendpack UDPdump - -all clean install uninstall: ${SUBDIRS} - for subdir in ${SUBDIRS}; do \ - echo "Entering $$subdir"; \ - (cd $$subdir && ${MAKE} $@) \ - done; +# Makefile for cygwin gcc +# Nate Lawson + +SUBDIRS = basic_dump basic_dump_ex iflist pcap_filter pktdump_ex readfile readfile_ex savedump sendpack UDPdump + +all clean install uninstall: ${SUBDIRS} + for subdir in ${SUBDIRS}; do \ + echo "Entering $$subdir"; \ + (cd $$subdir && ${MAKE} $@) \ + done; diff --git a/libs/WinPcap-413-173-b4/Examples-pcap/MakeaAll.dsw b/libs/WpdPack_4_1_2/Examples-pcap/MakeaAll.dsw similarity index 94% rename from libs/WinPcap-413-173-b4/Examples-pcap/MakeaAll.dsw rename to libs/WpdPack_4_1_2/Examples-pcap/MakeaAll.dsw index 68075d3e..3a595ac9 100644 --- a/libs/WinPcap-413-173-b4/Examples-pcap/MakeaAll.dsw +++ b/libs/WpdPack_4_1_2/Examples-pcap/MakeaAll.dsw @@ -1,137 +1,137 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "UDPdump"=.\UDPdump\UDPdump.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "basic_dump"=.\basic_dump\basic_dump.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "basic_dump_ex"=.\basic_dump_ex\basic_dump_ex.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "iflist"=.\iflist\iflist.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "pcap_filter"=.\pcap_filter\pcap_filter.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "pktdump_ex"=.\pktdump_ex\pktdump_ex.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "readfile"=.\readfile\readfile.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "readfile_ex"=.\readfile_ex\readfile_ex.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "savedump"=.\savedump\savedump.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "sendpack"=.\sendpack\sendpack.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "UDPdump"=.\UDPdump\UDPdump.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "basic_dump"=.\basic_dump\basic_dump.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "basic_dump_ex"=.\basic_dump_ex\basic_dump_ex.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "iflist"=.\iflist\iflist.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "pcap_filter"=.\pcap_filter\pcap_filter.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "pktdump_ex"=.\pktdump_ex\pktdump_ex.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "readfile"=.\readfile\readfile.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "readfile_ex"=.\readfile_ex\readfile_ex.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "savedump"=.\savedump\savedump.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "sendpack"=.\sendpack\sendpack.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/libs/WinPcap-413-173-b4/Examples-pcap/MakeaAll.sln b/libs/WpdPack_4_1_2/Examples-pcap/MakeaAll.sln similarity index 98% rename from libs/WinPcap-413-173-b4/Examples-pcap/MakeaAll.sln rename to libs/WpdPack_4_1_2/Examples-pcap/MakeaAll.sln index b0d9f29d..9bef01eb 100644 --- a/libs/WinPcap-413-173-b4/Examples-pcap/MakeaAll.sln +++ b/libs/WpdPack_4_1_2/Examples-pcap/MakeaAll.sln @@ -1,116 +1,116 @@ - -Microsoft Visual Studio Solution File, Format Version 9.00 -# Visual Studio 2005 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "UDPdump", "UDPdump\UDPdump.vcproj", "{B484FA1C-6508-4DDA-8DA7-EA14DB6585AE}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "basic_dump", "basic_dump\basic_dump.vcproj", "{80E57A40-2069-4261-8470-A56A94EA4D48}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "basic_dump_ex", "basic_dump_ex\basic_dump_ex.vcproj", "{6C124B8E-5310-4294-9148-0D62AF96A649}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "iflist", "iflist\iflist.vcproj", "{AD22E53E-6B36-4514-8F90-A92D2CFAAEBF}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pcap_filter", "pcap_filter\pcap_filter.vcproj", "{1F9B464B-56FE-4649-BE0E-E0B9B3DDEB00}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pktdump_ex", "pktdump_ex\pktdump_ex.vcproj", "{E501F12B-2CAD-4B65-BFB9-E012553BE0A2}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "readfile", "readfile\readfile.vcproj", "{D47AE2DA-FDC6-430E-AA6A-15290E3AA5B5}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "readfile_ex", "readfile_ex\readfile_ex.vcproj", "{C34F10C8-A733-4D64-B1AF-2AAA53FA6506}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "savedump", "savedump\savedump.vcproj", "{FC4AF1CF-72A5-4862-9F38-5063A588B2A6}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sendpack", "sendpack\sendpack.vcproj", "{58E5469B-4C43-43C5-9E63-86D92D870D19}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {B484FA1C-6508-4DDA-8DA7-EA14DB6585AE}.Debug|Win32.ActiveCfg = Debug|Win32 - {B484FA1C-6508-4DDA-8DA7-EA14DB6585AE}.Debug|Win32.Build.0 = Debug|Win32 - {B484FA1C-6508-4DDA-8DA7-EA14DB6585AE}.Debug|x64.ActiveCfg = Debug|x64 - {B484FA1C-6508-4DDA-8DA7-EA14DB6585AE}.Debug|x64.Build.0 = Debug|x64 - {B484FA1C-6508-4DDA-8DA7-EA14DB6585AE}.Release|Win32.ActiveCfg = Release|Win32 - {B484FA1C-6508-4DDA-8DA7-EA14DB6585AE}.Release|Win32.Build.0 = Release|Win32 - {B484FA1C-6508-4DDA-8DA7-EA14DB6585AE}.Release|x64.ActiveCfg = Release|x64 - {B484FA1C-6508-4DDA-8DA7-EA14DB6585AE}.Release|x64.Build.0 = Release|x64 - {80E57A40-2069-4261-8470-A56A94EA4D48}.Debug|Win32.ActiveCfg = Debug|Win32 - {80E57A40-2069-4261-8470-A56A94EA4D48}.Debug|Win32.Build.0 = Debug|Win32 - {80E57A40-2069-4261-8470-A56A94EA4D48}.Debug|x64.ActiveCfg = Debug|x64 - {80E57A40-2069-4261-8470-A56A94EA4D48}.Debug|x64.Build.0 = Debug|x64 - {80E57A40-2069-4261-8470-A56A94EA4D48}.Release|Win32.ActiveCfg = Release|Win32 - {80E57A40-2069-4261-8470-A56A94EA4D48}.Release|Win32.Build.0 = Release|Win32 - {80E57A40-2069-4261-8470-A56A94EA4D48}.Release|x64.ActiveCfg = Release|x64 - {80E57A40-2069-4261-8470-A56A94EA4D48}.Release|x64.Build.0 = Release|x64 - {6C124B8E-5310-4294-9148-0D62AF96A649}.Debug|Win32.ActiveCfg = Debug|Win32 - {6C124B8E-5310-4294-9148-0D62AF96A649}.Debug|Win32.Build.0 = Debug|Win32 - {6C124B8E-5310-4294-9148-0D62AF96A649}.Debug|x64.ActiveCfg = Debug|x64 - {6C124B8E-5310-4294-9148-0D62AF96A649}.Debug|x64.Build.0 = Debug|x64 - {6C124B8E-5310-4294-9148-0D62AF96A649}.Release|Win32.ActiveCfg = Release|Win32 - {6C124B8E-5310-4294-9148-0D62AF96A649}.Release|Win32.Build.0 = Release|Win32 - {6C124B8E-5310-4294-9148-0D62AF96A649}.Release|x64.ActiveCfg = Release|x64 - {6C124B8E-5310-4294-9148-0D62AF96A649}.Release|x64.Build.0 = Release|x64 - {AD22E53E-6B36-4514-8F90-A92D2CFAAEBF}.Debug|Win32.ActiveCfg = Debug|Win32 - {AD22E53E-6B36-4514-8F90-A92D2CFAAEBF}.Debug|Win32.Build.0 = Debug|Win32 - {AD22E53E-6B36-4514-8F90-A92D2CFAAEBF}.Debug|x64.ActiveCfg = Debug|x64 - {AD22E53E-6B36-4514-8F90-A92D2CFAAEBF}.Debug|x64.Build.0 = Debug|x64 - {AD22E53E-6B36-4514-8F90-A92D2CFAAEBF}.Release|Win32.ActiveCfg = Release|Win32 - {AD22E53E-6B36-4514-8F90-A92D2CFAAEBF}.Release|Win32.Build.0 = Release|Win32 - {AD22E53E-6B36-4514-8F90-A92D2CFAAEBF}.Release|x64.ActiveCfg = Release|x64 - {AD22E53E-6B36-4514-8F90-A92D2CFAAEBF}.Release|x64.Build.0 = Release|x64 - {1F9B464B-56FE-4649-BE0E-E0B9B3DDEB00}.Debug|Win32.ActiveCfg = Debug|Win32 - {1F9B464B-56FE-4649-BE0E-E0B9B3DDEB00}.Debug|Win32.Build.0 = Debug|Win32 - {1F9B464B-56FE-4649-BE0E-E0B9B3DDEB00}.Debug|x64.ActiveCfg = Debug|x64 - {1F9B464B-56FE-4649-BE0E-E0B9B3DDEB00}.Debug|x64.Build.0 = Debug|x64 - {1F9B464B-56FE-4649-BE0E-E0B9B3DDEB00}.Release|Win32.ActiveCfg = Release|Win32 - {1F9B464B-56FE-4649-BE0E-E0B9B3DDEB00}.Release|Win32.Build.0 = Release|Win32 - {1F9B464B-56FE-4649-BE0E-E0B9B3DDEB00}.Release|x64.ActiveCfg = Release|x64 - {1F9B464B-56FE-4649-BE0E-E0B9B3DDEB00}.Release|x64.Build.0 = Release|x64 - {E501F12B-2CAD-4B65-BFB9-E012553BE0A2}.Debug|Win32.ActiveCfg = Debug|Win32 - {E501F12B-2CAD-4B65-BFB9-E012553BE0A2}.Debug|Win32.Build.0 = Debug|Win32 - {E501F12B-2CAD-4B65-BFB9-E012553BE0A2}.Debug|x64.ActiveCfg = Debug|x64 - {E501F12B-2CAD-4B65-BFB9-E012553BE0A2}.Debug|x64.Build.0 = Debug|x64 - {E501F12B-2CAD-4B65-BFB9-E012553BE0A2}.Release|Win32.ActiveCfg = Release|Win32 - {E501F12B-2CAD-4B65-BFB9-E012553BE0A2}.Release|Win32.Build.0 = Release|Win32 - {E501F12B-2CAD-4B65-BFB9-E012553BE0A2}.Release|x64.ActiveCfg = Release|x64 - {E501F12B-2CAD-4B65-BFB9-E012553BE0A2}.Release|x64.Build.0 = Release|x64 - {D47AE2DA-FDC6-430E-AA6A-15290E3AA5B5}.Debug|Win32.ActiveCfg = Debug|Win32 - {D47AE2DA-FDC6-430E-AA6A-15290E3AA5B5}.Debug|Win32.Build.0 = Debug|Win32 - {D47AE2DA-FDC6-430E-AA6A-15290E3AA5B5}.Debug|x64.ActiveCfg = Debug|x64 - {D47AE2DA-FDC6-430E-AA6A-15290E3AA5B5}.Debug|x64.Build.0 = Debug|x64 - {D47AE2DA-FDC6-430E-AA6A-15290E3AA5B5}.Release|Win32.ActiveCfg = Release|Win32 - {D47AE2DA-FDC6-430E-AA6A-15290E3AA5B5}.Release|Win32.Build.0 = Release|Win32 - {D47AE2DA-FDC6-430E-AA6A-15290E3AA5B5}.Release|x64.ActiveCfg = Release|x64 - {D47AE2DA-FDC6-430E-AA6A-15290E3AA5B5}.Release|x64.Build.0 = Release|x64 - {C34F10C8-A733-4D64-B1AF-2AAA53FA6506}.Debug|Win32.ActiveCfg = Debug|Win32 - {C34F10C8-A733-4D64-B1AF-2AAA53FA6506}.Debug|Win32.Build.0 = Debug|Win32 - {C34F10C8-A733-4D64-B1AF-2AAA53FA6506}.Debug|x64.ActiveCfg = Debug|x64 - {C34F10C8-A733-4D64-B1AF-2AAA53FA6506}.Debug|x64.Build.0 = Debug|x64 - {C34F10C8-A733-4D64-B1AF-2AAA53FA6506}.Release|Win32.ActiveCfg = Release|Win32 - {C34F10C8-A733-4D64-B1AF-2AAA53FA6506}.Release|Win32.Build.0 = Release|Win32 - {C34F10C8-A733-4D64-B1AF-2AAA53FA6506}.Release|x64.ActiveCfg = Release|x64 - {C34F10C8-A733-4D64-B1AF-2AAA53FA6506}.Release|x64.Build.0 = Release|x64 - {FC4AF1CF-72A5-4862-9F38-5063A588B2A6}.Debug|Win32.ActiveCfg = Debug|Win32 - {FC4AF1CF-72A5-4862-9F38-5063A588B2A6}.Debug|Win32.Build.0 = Debug|Win32 - {FC4AF1CF-72A5-4862-9F38-5063A588B2A6}.Debug|x64.ActiveCfg = Debug|x64 - {FC4AF1CF-72A5-4862-9F38-5063A588B2A6}.Debug|x64.Build.0 = Debug|x64 - {FC4AF1CF-72A5-4862-9F38-5063A588B2A6}.Release|Win32.ActiveCfg = Release|Win32 - {FC4AF1CF-72A5-4862-9F38-5063A588B2A6}.Release|Win32.Build.0 = Release|Win32 - {FC4AF1CF-72A5-4862-9F38-5063A588B2A6}.Release|x64.ActiveCfg = Release|x64 - {FC4AF1CF-72A5-4862-9F38-5063A588B2A6}.Release|x64.Build.0 = Release|x64 - {58E5469B-4C43-43C5-9E63-86D92D870D19}.Debug|Win32.ActiveCfg = Debug|Win32 - {58E5469B-4C43-43C5-9E63-86D92D870D19}.Debug|Win32.Build.0 = Debug|Win32 - {58E5469B-4C43-43C5-9E63-86D92D870D19}.Debug|x64.ActiveCfg = Debug|x64 - {58E5469B-4C43-43C5-9E63-86D92D870D19}.Debug|x64.Build.0 = Debug|x64 - {58E5469B-4C43-43C5-9E63-86D92D870D19}.Release|Win32.ActiveCfg = Release|Win32 - {58E5469B-4C43-43C5-9E63-86D92D870D19}.Release|Win32.Build.0 = Release|Win32 - {58E5469B-4C43-43C5-9E63-86D92D870D19}.Release|x64.ActiveCfg = Release|x64 - {58E5469B-4C43-43C5-9E63-86D92D870D19}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "UDPdump", "UDPdump\UDPdump.vcproj", "{B484FA1C-6508-4DDA-8DA7-EA14DB6585AE}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "basic_dump", "basic_dump\basic_dump.vcproj", "{80E57A40-2069-4261-8470-A56A94EA4D48}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "basic_dump_ex", "basic_dump_ex\basic_dump_ex.vcproj", "{6C124B8E-5310-4294-9148-0D62AF96A649}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "iflist", "iflist\iflist.vcproj", "{AD22E53E-6B36-4514-8F90-A92D2CFAAEBF}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pcap_filter", "pcap_filter\pcap_filter.vcproj", "{1F9B464B-56FE-4649-BE0E-E0B9B3DDEB00}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pktdump_ex", "pktdump_ex\pktdump_ex.vcproj", "{E501F12B-2CAD-4B65-BFB9-E012553BE0A2}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "readfile", "readfile\readfile.vcproj", "{D47AE2DA-FDC6-430E-AA6A-15290E3AA5B5}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "readfile_ex", "readfile_ex\readfile_ex.vcproj", "{C34F10C8-A733-4D64-B1AF-2AAA53FA6506}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "savedump", "savedump\savedump.vcproj", "{FC4AF1CF-72A5-4862-9F38-5063A588B2A6}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sendpack", "sendpack\sendpack.vcproj", "{58E5469B-4C43-43C5-9E63-86D92D870D19}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {B484FA1C-6508-4DDA-8DA7-EA14DB6585AE}.Debug|Win32.ActiveCfg = Debug|Win32 + {B484FA1C-6508-4DDA-8DA7-EA14DB6585AE}.Debug|Win32.Build.0 = Debug|Win32 + {B484FA1C-6508-4DDA-8DA7-EA14DB6585AE}.Debug|x64.ActiveCfg = Debug|x64 + {B484FA1C-6508-4DDA-8DA7-EA14DB6585AE}.Debug|x64.Build.0 = Debug|x64 + {B484FA1C-6508-4DDA-8DA7-EA14DB6585AE}.Release|Win32.ActiveCfg = Release|Win32 + {B484FA1C-6508-4DDA-8DA7-EA14DB6585AE}.Release|Win32.Build.0 = Release|Win32 + {B484FA1C-6508-4DDA-8DA7-EA14DB6585AE}.Release|x64.ActiveCfg = Release|x64 + {B484FA1C-6508-4DDA-8DA7-EA14DB6585AE}.Release|x64.Build.0 = Release|x64 + {80E57A40-2069-4261-8470-A56A94EA4D48}.Debug|Win32.ActiveCfg = Debug|Win32 + {80E57A40-2069-4261-8470-A56A94EA4D48}.Debug|Win32.Build.0 = Debug|Win32 + {80E57A40-2069-4261-8470-A56A94EA4D48}.Debug|x64.ActiveCfg = Debug|x64 + {80E57A40-2069-4261-8470-A56A94EA4D48}.Debug|x64.Build.0 = Debug|x64 + {80E57A40-2069-4261-8470-A56A94EA4D48}.Release|Win32.ActiveCfg = Release|Win32 + {80E57A40-2069-4261-8470-A56A94EA4D48}.Release|Win32.Build.0 = Release|Win32 + {80E57A40-2069-4261-8470-A56A94EA4D48}.Release|x64.ActiveCfg = Release|x64 + {80E57A40-2069-4261-8470-A56A94EA4D48}.Release|x64.Build.0 = Release|x64 + {6C124B8E-5310-4294-9148-0D62AF96A649}.Debug|Win32.ActiveCfg = Debug|Win32 + {6C124B8E-5310-4294-9148-0D62AF96A649}.Debug|Win32.Build.0 = Debug|Win32 + {6C124B8E-5310-4294-9148-0D62AF96A649}.Debug|x64.ActiveCfg = Debug|x64 + {6C124B8E-5310-4294-9148-0D62AF96A649}.Debug|x64.Build.0 = Debug|x64 + {6C124B8E-5310-4294-9148-0D62AF96A649}.Release|Win32.ActiveCfg = Release|Win32 + {6C124B8E-5310-4294-9148-0D62AF96A649}.Release|Win32.Build.0 = Release|Win32 + {6C124B8E-5310-4294-9148-0D62AF96A649}.Release|x64.ActiveCfg = Release|x64 + {6C124B8E-5310-4294-9148-0D62AF96A649}.Release|x64.Build.0 = Release|x64 + {AD22E53E-6B36-4514-8F90-A92D2CFAAEBF}.Debug|Win32.ActiveCfg = Debug|Win32 + {AD22E53E-6B36-4514-8F90-A92D2CFAAEBF}.Debug|Win32.Build.0 = Debug|Win32 + {AD22E53E-6B36-4514-8F90-A92D2CFAAEBF}.Debug|x64.ActiveCfg = Debug|x64 + {AD22E53E-6B36-4514-8F90-A92D2CFAAEBF}.Debug|x64.Build.0 = Debug|x64 + {AD22E53E-6B36-4514-8F90-A92D2CFAAEBF}.Release|Win32.ActiveCfg = Release|Win32 + {AD22E53E-6B36-4514-8F90-A92D2CFAAEBF}.Release|Win32.Build.0 = Release|Win32 + {AD22E53E-6B36-4514-8F90-A92D2CFAAEBF}.Release|x64.ActiveCfg = Release|x64 + {AD22E53E-6B36-4514-8F90-A92D2CFAAEBF}.Release|x64.Build.0 = Release|x64 + {1F9B464B-56FE-4649-BE0E-E0B9B3DDEB00}.Debug|Win32.ActiveCfg = Debug|Win32 + {1F9B464B-56FE-4649-BE0E-E0B9B3DDEB00}.Debug|Win32.Build.0 = Debug|Win32 + {1F9B464B-56FE-4649-BE0E-E0B9B3DDEB00}.Debug|x64.ActiveCfg = Debug|x64 + {1F9B464B-56FE-4649-BE0E-E0B9B3DDEB00}.Debug|x64.Build.0 = Debug|x64 + {1F9B464B-56FE-4649-BE0E-E0B9B3DDEB00}.Release|Win32.ActiveCfg = Release|Win32 + {1F9B464B-56FE-4649-BE0E-E0B9B3DDEB00}.Release|Win32.Build.0 = Release|Win32 + {1F9B464B-56FE-4649-BE0E-E0B9B3DDEB00}.Release|x64.ActiveCfg = Release|x64 + {1F9B464B-56FE-4649-BE0E-E0B9B3DDEB00}.Release|x64.Build.0 = Release|x64 + {E501F12B-2CAD-4B65-BFB9-E012553BE0A2}.Debug|Win32.ActiveCfg = Debug|Win32 + {E501F12B-2CAD-4B65-BFB9-E012553BE0A2}.Debug|Win32.Build.0 = Debug|Win32 + {E501F12B-2CAD-4B65-BFB9-E012553BE0A2}.Debug|x64.ActiveCfg = Debug|x64 + {E501F12B-2CAD-4B65-BFB9-E012553BE0A2}.Debug|x64.Build.0 = Debug|x64 + {E501F12B-2CAD-4B65-BFB9-E012553BE0A2}.Release|Win32.ActiveCfg = Release|Win32 + {E501F12B-2CAD-4B65-BFB9-E012553BE0A2}.Release|Win32.Build.0 = Release|Win32 + {E501F12B-2CAD-4B65-BFB9-E012553BE0A2}.Release|x64.ActiveCfg = Release|x64 + {E501F12B-2CAD-4B65-BFB9-E012553BE0A2}.Release|x64.Build.0 = Release|x64 + {D47AE2DA-FDC6-430E-AA6A-15290E3AA5B5}.Debug|Win32.ActiveCfg = Debug|Win32 + {D47AE2DA-FDC6-430E-AA6A-15290E3AA5B5}.Debug|Win32.Build.0 = Debug|Win32 + {D47AE2DA-FDC6-430E-AA6A-15290E3AA5B5}.Debug|x64.ActiveCfg = Debug|x64 + {D47AE2DA-FDC6-430E-AA6A-15290E3AA5B5}.Debug|x64.Build.0 = Debug|x64 + {D47AE2DA-FDC6-430E-AA6A-15290E3AA5B5}.Release|Win32.ActiveCfg = Release|Win32 + {D47AE2DA-FDC6-430E-AA6A-15290E3AA5B5}.Release|Win32.Build.0 = Release|Win32 + {D47AE2DA-FDC6-430E-AA6A-15290E3AA5B5}.Release|x64.ActiveCfg = Release|x64 + {D47AE2DA-FDC6-430E-AA6A-15290E3AA5B5}.Release|x64.Build.0 = Release|x64 + {C34F10C8-A733-4D64-B1AF-2AAA53FA6506}.Debug|Win32.ActiveCfg = Debug|Win32 + {C34F10C8-A733-4D64-B1AF-2AAA53FA6506}.Debug|Win32.Build.0 = Debug|Win32 + {C34F10C8-A733-4D64-B1AF-2AAA53FA6506}.Debug|x64.ActiveCfg = Debug|x64 + {C34F10C8-A733-4D64-B1AF-2AAA53FA6506}.Debug|x64.Build.0 = Debug|x64 + {C34F10C8-A733-4D64-B1AF-2AAA53FA6506}.Release|Win32.ActiveCfg = Release|Win32 + {C34F10C8-A733-4D64-B1AF-2AAA53FA6506}.Release|Win32.Build.0 = Release|Win32 + {C34F10C8-A733-4D64-B1AF-2AAA53FA6506}.Release|x64.ActiveCfg = Release|x64 + {C34F10C8-A733-4D64-B1AF-2AAA53FA6506}.Release|x64.Build.0 = Release|x64 + {FC4AF1CF-72A5-4862-9F38-5063A588B2A6}.Debug|Win32.ActiveCfg = Debug|Win32 + {FC4AF1CF-72A5-4862-9F38-5063A588B2A6}.Debug|Win32.Build.0 = Debug|Win32 + {FC4AF1CF-72A5-4862-9F38-5063A588B2A6}.Debug|x64.ActiveCfg = Debug|x64 + {FC4AF1CF-72A5-4862-9F38-5063A588B2A6}.Debug|x64.Build.0 = Debug|x64 + {FC4AF1CF-72A5-4862-9F38-5063A588B2A6}.Release|Win32.ActiveCfg = Release|Win32 + {FC4AF1CF-72A5-4862-9F38-5063A588B2A6}.Release|Win32.Build.0 = Release|Win32 + {FC4AF1CF-72A5-4862-9F38-5063A588B2A6}.Release|x64.ActiveCfg = Release|x64 + {FC4AF1CF-72A5-4862-9F38-5063A588B2A6}.Release|x64.Build.0 = Release|x64 + {58E5469B-4C43-43C5-9E63-86D92D870D19}.Debug|Win32.ActiveCfg = Debug|Win32 + {58E5469B-4C43-43C5-9E63-86D92D870D19}.Debug|Win32.Build.0 = Debug|Win32 + {58E5469B-4C43-43C5-9E63-86D92D870D19}.Debug|x64.ActiveCfg = Debug|x64 + {58E5469B-4C43-43C5-9E63-86D92D870D19}.Debug|x64.Build.0 = Debug|x64 + {58E5469B-4C43-43C5-9E63-86D92D870D19}.Release|Win32.ActiveCfg = Release|Win32 + {58E5469B-4C43-43C5-9E63-86D92D870D19}.Release|Win32.Build.0 = Release|Win32 + {58E5469B-4C43-43C5-9E63-86D92D870D19}.Release|x64.ActiveCfg = Release|x64 + {58E5469B-4C43-43C5-9E63-86D92D870D19}.Release|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/libs/WinPcap-413-173-b4/Examples-pcap/UDPdump/GNUmakefile b/libs/WpdPack_4_1_2/Examples-pcap/UDPdump/GNUmakefile similarity index 94% rename from libs/WinPcap-413-173-b4/Examples-pcap/UDPdump/GNUmakefile rename to libs/WpdPack_4_1_2/Examples-pcap/UDPdump/GNUmakefile index 21f42ad9..d9e75f07 100644 --- a/libs/WinPcap-413-173-b4/Examples-pcap/UDPdump/GNUmakefile +++ b/libs/WpdPack_4_1_2/Examples-pcap/UDPdump/GNUmakefile @@ -1,17 +1,17 @@ -# Makefile for cygwin gcc -# Loris Degioanni - -PCAP_PATH = ../../lib -CFLAGS = -g -O -mno-cygwin -I ../../include - -OBJS = udpdump.o -LIBS = -L ${PCAP_PATH} -lwpcap -lwsock32 - -all: ${OBJS} - ${CC} ${CFLAGS} -o udpdump.exe ${OBJS} ${LIBS} - -clean: - rm -f ${OBJS} udpdump.exe - -.c.o: - ${CC} ${CFLAGS} -c -o $*.o $< +# Makefile for cygwin gcc +# Loris Degioanni + +PCAP_PATH = ../../lib +CFLAGS = -g -O -mno-cygwin -I ../../include + +OBJS = udpdump.o +LIBS = -L ${PCAP_PATH} -lwpcap -lwsock32 + +all: ${OBJS} + ${CC} ${CFLAGS} -o udpdump.exe ${OBJS} ${LIBS} + +clean: + rm -f ${OBJS} udpdump.exe + +.c.o: + ${CC} ${CFLAGS} -c -o $*.o $< diff --git a/libs/WinPcap-413-173-b4/Examples-pcap/UDPdump/UDPdump.dsp b/libs/WpdPack_4_1_2/Examples-pcap/UDPdump/UDPdump.dsp similarity index 97% rename from libs/WinPcap-413-173-b4/Examples-pcap/UDPdump/UDPdump.dsp rename to libs/WpdPack_4_1_2/Examples-pcap/UDPdump/UDPdump.dsp index 40e38063..b9553123 100644 --- a/libs/WinPcap-413-173-b4/Examples-pcap/UDPdump/UDPdump.dsp +++ b/libs/WpdPack_4_1_2/Examples-pcap/UDPdump/UDPdump.dsp @@ -1,110 +1,110 @@ -# Microsoft Developer Studio Project File - Name="UDPdump" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=UDPdump - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "UDPdump.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "UDPdump.mak" CFG="UDPdump - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "UDPdump - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "UDPdump - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "UDPdump - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "../" /I "../bpf/" /I "../lbl/" /I "../../Include/" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_UNICODE" /D "WPCAP" /D "HAVE_REMOTE" /YX /FD /c -# ADD BASE RSC /l 0x410 /d "NDEBUG" -# ADD RSC /l 0x410 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib ws2_32.lib Iphlpapi.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "UDPdump - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../" /I "../bpf/" /I "../lbl/" /I "../../Include/" /I "D:/Program Files/Microsoft Platform SDK/include" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_UNICODE" /D "WPCAP" /D "HAVE_REMOTE" /YX /FD /GZ /c -# ADD BASE RSC /l 0x410 /d "_DEBUG" -# ADD RSC /l 0x410 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib ws2_32.lib Iphlpapi.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "UDPdump - Win32 Release" -# Name "UDPdump - Win32 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\udpdump.c -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# Begin Source File - -SOURCE=..\..\include\pcap.h -# End Source File -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# Begin Source File - -SOURCE=..\..\lib\Wpcap.lib -# End Source File -# End Target -# End Project +# Microsoft Developer Studio Project File - Name="UDPdump" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Console Application" 0x0103 + +CFG=UDPdump - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "UDPdump.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "UDPdump.mak" CFG="UDPdump - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "UDPdump - Win32 Release" (based on "Win32 (x86) Console Application") +!MESSAGE "UDPdump - Win32 Debug" (based on "Win32 (x86) Console Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "UDPdump - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /I "../" /I "../bpf/" /I "../lbl/" /I "../../Include/" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_UNICODE" /D "WPCAP" /D "HAVE_REMOTE" /YX /FD /c +# ADD BASE RSC /l 0x410 /d "NDEBUG" +# ADD RSC /l 0x410 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib ws2_32.lib Iphlpapi.lib /nologo /subsystem:console /machine:I386 + +!ELSEIF "$(CFG)" == "UDPdump - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c +# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../" /I "../bpf/" /I "../lbl/" /I "../../Include/" /I "D:/Program Files/Microsoft Platform SDK/include" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_UNICODE" /D "WPCAP" /D "HAVE_REMOTE" /YX /FD /GZ /c +# ADD BASE RSC /l 0x410 /d "_DEBUG" +# ADD RSC /l 0x410 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib ws2_32.lib Iphlpapi.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept + +!ENDIF + +# Begin Target + +# Name "UDPdump - Win32 Release" +# Name "UDPdump - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\udpdump.c +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# Begin Source File + +SOURCE=..\..\include\pcap.h +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# End Group +# Begin Source File + +SOURCE=..\..\lib\Wpcap.lib +# End Source File +# End Target +# End Project diff --git a/libs/WinPcap-413-173-b4/Examples-remote/UDPdump/UDPdump.dsw b/libs/WpdPack_4_1_2/Examples-pcap/UDPdump/UDPdump.dsw similarity index 94% rename from libs/WinPcap-413-173-b4/Examples-remote/UDPdump/UDPdump.dsw rename to libs/WpdPack_4_1_2/Examples-pcap/UDPdump/UDPdump.dsw index 0def7090..8981cf43 100644 --- a/libs/WinPcap-413-173-b4/Examples-remote/UDPdump/UDPdump.dsw +++ b/libs/WpdPack_4_1_2/Examples-pcap/UDPdump/UDPdump.dsw @@ -1,29 +1,29 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "UDPdump"=.\UDPdump.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "UDPdump"=.\UDPdump.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/libs/WinPcap-413-173-b4/Examples-pcap/UDPdump/UDPdump.vcproj b/libs/WpdPack_4_1_2/Examples-pcap/UDPdump/UDPdump.vcproj similarity index 95% rename from libs/WinPcap-413-173-b4/Examples-pcap/UDPdump/UDPdump.vcproj rename to libs/WpdPack_4_1_2/Examples-pcap/UDPdump/UDPdump.vcproj index 40d42c0b..ae73936b 100644 --- a/libs/WinPcap-413-173-b4/Examples-pcap/UDPdump/UDPdump.vcproj +++ b/libs/WpdPack_4_1_2/Examples-pcap/UDPdump/UDPdump.vcproj @@ -1,364 +1,364 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/libs/WinPcap-413-173-b4/Examples-pcap/UDPdump/udpdump.c b/libs/WpdPack_4_1_2/Examples-pcap/UDPdump/udpdump.c similarity index 96% rename from libs/WinPcap-413-173-b4/Examples-pcap/UDPdump/udpdump.c rename to libs/WpdPack_4_1_2/Examples-pcap/UDPdump/udpdump.c index 3bfcde15..e627addd 100644 --- a/libs/WinPcap-413-173-b4/Examples-pcap/UDPdump/udpdump.c +++ b/libs/WpdPack_4_1_2/Examples-pcap/UDPdump/udpdump.c @@ -1,242 +1,242 @@ -/* - * Copyright (c) 1999 - 2005 NetGroup, Politecnico di Torino (Italy) - * Copyright (c) 2005 - 2006 CACE Technologies, Davis (California) - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the Politecnico di Torino, CACE Technologies - * nor the names of its contributors may be used to endorse or promote - * products derived from this software without specific prior written - * permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ - -#ifdef _MSC_VER -/* - * we do not want the warnings about the old deprecated and unsecure CRT functions - * since these examples can be compiled under *nix as well - */ -#define _CRT_SECURE_NO_WARNINGS -#endif - -#include "pcap.h" - -/* 4 bytes IP address */ -typedef struct ip_address -{ - u_char byte1; - u_char byte2; - u_char byte3; - u_char byte4; -}ip_address; - -/* IPv4 header */ -typedef struct ip_header -{ - u_char ver_ihl; // Version (4 bits) + Internet header length (4 bits) - u_char tos; // Type of service - u_short tlen; // Total length - u_short identification; // Identification - u_short flags_fo; // Flags (3 bits) + Fragment offset (13 bits) - u_char ttl; // Time to live - u_char proto; // Protocol - u_short crc; // Header checksum - ip_address saddr; // Source address - ip_address daddr; // Destination address - u_int op_pad; // Option + Padding -}ip_header; - -/* UDP header*/ -typedef struct udp_header -{ - u_short sport; // Source port - u_short dport; // Destination port - u_short len; // Datagram length - u_short crc; // Checksum -}udp_header; - -/* prototype of the packet handler */ -void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data); - - -int main() -{ - pcap_if_t *alldevs; - pcap_if_t *d; - int inum; - int i=0; - pcap_t *adhandle; - char errbuf[PCAP_ERRBUF_SIZE]; - u_int netmask; - char packet_filter[] = "ip and udp"; - struct bpf_program fcode; - - /* Retrieve the device list */ - if(pcap_findalldevs(&alldevs, errbuf) == -1) - { - fprintf(stderr,"Error in pcap_findalldevs: %s\n", errbuf); - exit(1); - } - - /* Print the list */ - for(d=alldevs; d; d=d->next) - { - printf("%d. %s", ++i, d->name); - if (d->description) - printf(" (%s)\n", d->description); - else - printf(" (No description available)\n"); - } - - if(i==0) - { - printf("\nNo interfaces found! Make sure WinPcap is installed.\n"); - return -1; - } - - printf("Enter the interface number (1-%d):",i); - scanf("%d", &inum); - - /* Check if the user specified a valid adapter */ - if(inum < 1 || inum > i) - { - printf("\nAdapter number out of range.\n"); - - /* Free the device list */ - pcap_freealldevs(alldevs); - return -1; - } - - /* Jump to the selected adapter */ - for(d=alldevs, i=0; i< inum-1 ;d=d->next, i++); - - /* Open the adapter */ - if ((adhandle= pcap_open_live(d->name, // name of the device - 65536, // portion of the packet to capture. - // 65536 grants that the whole packet will be captured on all the MACs. - 1, // promiscuous mode (nonzero means promiscuous) - 1000, // read timeout - errbuf // error buffer - )) == NULL) - { - fprintf(stderr,"\nUnable to open the adapter. %s is not supported by WinPcap\n"); - /* Free the device list */ - pcap_freealldevs(alldevs); - return -1; - } - - /* Check the link layer. We support only Ethernet for simplicity. */ - if(pcap_datalink(adhandle) != DLT_EN10MB) - { - fprintf(stderr,"\nThis program works only on Ethernet networks.\n"); - /* Free the device list */ - pcap_freealldevs(alldevs); - return -1; - } - - if(d->addresses != NULL) - /* Retrieve the mask of the first address of the interface */ - netmask=((struct sockaddr_in *)(d->addresses->netmask))->sin_addr.S_un.S_addr; - else - /* If the interface is without addresses we suppose to be in a C class network */ - netmask=0xffffff; - - - //compile the filter - if (pcap_compile(adhandle, &fcode, packet_filter, 1, netmask) <0 ) - { - fprintf(stderr,"\nUnable to compile the packet filter. Check the syntax.\n"); - /* Free the device list */ - pcap_freealldevs(alldevs); - return -1; - } - - //set the filter - if (pcap_setfilter(adhandle, &fcode)<0) - { - fprintf(stderr,"\nError setting the filter.\n"); - /* Free the device list */ - pcap_freealldevs(alldevs); - return -1; - } - - printf("\nlistening on %s...\n", d->description); - - /* At this point, we don't need any more the device list. Free it */ - pcap_freealldevs(alldevs); - - /* start the capture */ - pcap_loop(adhandle, 0, packet_handler, NULL); - - return 0; -} - -/* Callback function invoked by libpcap for every incoming packet */ -void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data) -{ - struct tm *ltime; - char timestr[16]; - ip_header *ih; - udp_header *uh; - u_int ip_len; - u_short sport,dport; - time_t local_tv_sec; - - /* - * unused parameter - */ - (VOID)(param); - - /* convert the timestamp to readable format */ - local_tv_sec = header->ts.tv_sec; - ltime=localtime(&local_tv_sec); - strftime( timestr, sizeof timestr, "%H:%M:%S", ltime); - - /* print timestamp and length of the packet */ - printf("%s.%.6d len:%d ", timestr, header->ts.tv_usec, header->len); - - /* retireve the position of the ip header */ - ih = (ip_header *) (pkt_data + - 14); //length of ethernet header - - /* retireve the position of the udp header */ - ip_len = (ih->ver_ihl & 0xf) * 4; - uh = (udp_header *) ((u_char*)ih + ip_len); - - /* convert from network byte order to host byte order */ - sport = ntohs( uh->sport ); - dport = ntohs( uh->dport ); - - /* print ip addresses and udp ports */ - printf("%d.%d.%d.%d.%d -> %d.%d.%d.%d.%d\n", - ih->saddr.byte1, - ih->saddr.byte2, - ih->saddr.byte3, - ih->saddr.byte4, - sport, - ih->daddr.byte1, - ih->daddr.byte2, - ih->daddr.byte3, - ih->daddr.byte4, - dport); -} +/* + * Copyright (c) 1999 - 2005 NetGroup, Politecnico di Torino (Italy) + * Copyright (c) 2005 - 2006 CACE Technologies, Davis (California) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Politecnico di Torino, CACE Technologies + * nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written + * permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#ifdef _MSC_VER +/* + * we do not want the warnings about the old deprecated and unsecure CRT functions + * since these examples can be compiled under *nix as well + */ +#define _CRT_SECURE_NO_WARNINGS +#endif + +#include "pcap.h" + +/* 4 bytes IP address */ +typedef struct ip_address +{ + u_char byte1; + u_char byte2; + u_char byte3; + u_char byte4; +}ip_address; + +/* IPv4 header */ +typedef struct ip_header +{ + u_char ver_ihl; // Version (4 bits) + Internet header length (4 bits) + u_char tos; // Type of service + u_short tlen; // Total length + u_short identification; // Identification + u_short flags_fo; // Flags (3 bits) + Fragment offset (13 bits) + u_char ttl; // Time to live + u_char proto; // Protocol + u_short crc; // Header checksum + ip_address saddr; // Source address + ip_address daddr; // Destination address + u_int op_pad; // Option + Padding +}ip_header; + +/* UDP header*/ +typedef struct udp_header +{ + u_short sport; // Source port + u_short dport; // Destination port + u_short len; // Datagram length + u_short crc; // Checksum +}udp_header; + +/* prototype of the packet handler */ +void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data); + + +int main() +{ + pcap_if_t *alldevs; + pcap_if_t *d; + int inum; + int i=0; + pcap_t *adhandle; + char errbuf[PCAP_ERRBUF_SIZE]; + u_int netmask; + char packet_filter[] = "ip and udp"; + struct bpf_program fcode; + + /* Retrieve the device list */ + if(pcap_findalldevs(&alldevs, errbuf) == -1) + { + fprintf(stderr,"Error in pcap_findalldevs: %s\n", errbuf); + exit(1); + } + + /* Print the list */ + for(d=alldevs; d; d=d->next) + { + printf("%d. %s", ++i, d->name); + if (d->description) + printf(" (%s)\n", d->description); + else + printf(" (No description available)\n"); + } + + if(i==0) + { + printf("\nNo interfaces found! Make sure WinPcap is installed.\n"); + return -1; + } + + printf("Enter the interface number (1-%d):",i); + scanf("%d", &inum); + + /* Check if the user specified a valid adapter */ + if(inum < 1 || inum > i) + { + printf("\nAdapter number out of range.\n"); + + /* Free the device list */ + pcap_freealldevs(alldevs); + return -1; + } + + /* Jump to the selected adapter */ + for(d=alldevs, i=0; i< inum-1 ;d=d->next, i++); + + /* Open the adapter */ + if ((adhandle= pcap_open_live(d->name, // name of the device + 65536, // portion of the packet to capture. + // 65536 grants that the whole packet will be captured on all the MACs. + 1, // promiscuous mode (nonzero means promiscuous) + 1000, // read timeout + errbuf // error buffer + )) == NULL) + { + fprintf(stderr,"\nUnable to open the adapter. %s is not supported by WinPcap\n"); + /* Free the device list */ + pcap_freealldevs(alldevs); + return -1; + } + + /* Check the link layer. We support only Ethernet for simplicity. */ + if(pcap_datalink(adhandle) != DLT_EN10MB) + { + fprintf(stderr,"\nThis program works only on Ethernet networks.\n"); + /* Free the device list */ + pcap_freealldevs(alldevs); + return -1; + } + + if(d->addresses != NULL) + /* Retrieve the mask of the first address of the interface */ + netmask=((struct sockaddr_in *)(d->addresses->netmask))->sin_addr.S_un.S_addr; + else + /* If the interface is without addresses we suppose to be in a C class network */ + netmask=0xffffff; + + + //compile the filter + if (pcap_compile(adhandle, &fcode, packet_filter, 1, netmask) <0 ) + { + fprintf(stderr,"\nUnable to compile the packet filter. Check the syntax.\n"); + /* Free the device list */ + pcap_freealldevs(alldevs); + return -1; + } + + //set the filter + if (pcap_setfilter(adhandle, &fcode)<0) + { + fprintf(stderr,"\nError setting the filter.\n"); + /* Free the device list */ + pcap_freealldevs(alldevs); + return -1; + } + + printf("\nlistening on %s...\n", d->description); + + /* At this point, we don't need any more the device list. Free it */ + pcap_freealldevs(alldevs); + + /* start the capture */ + pcap_loop(adhandle, 0, packet_handler, NULL); + + return 0; +} + +/* Callback function invoked by libpcap for every incoming packet */ +void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data) +{ + struct tm *ltime; + char timestr[16]; + ip_header *ih; + udp_header *uh; + u_int ip_len; + u_short sport,dport; + time_t local_tv_sec; + + /* + * unused parameter + */ + (VOID)(param); + + /* convert the timestamp to readable format */ + local_tv_sec = header->ts.tv_sec; + ltime=localtime(&local_tv_sec); + strftime( timestr, sizeof timestr, "%H:%M:%S", ltime); + + /* print timestamp and length of the packet */ + printf("%s.%.6d len:%d ", timestr, header->ts.tv_usec, header->len); + + /* retireve the position of the ip header */ + ih = (ip_header *) (pkt_data + + 14); //length of ethernet header + + /* retireve the position of the udp header */ + ip_len = (ih->ver_ihl & 0xf) * 4; + uh = (udp_header *) ((u_char*)ih + ip_len); + + /* convert from network byte order to host byte order */ + sport = ntohs( uh->sport ); + dport = ntohs( uh->dport ); + + /* print ip addresses and udp ports */ + printf("%d.%d.%d.%d.%d -> %d.%d.%d.%d.%d\n", + ih->saddr.byte1, + ih->saddr.byte2, + ih->saddr.byte3, + ih->saddr.byte4, + sport, + ih->daddr.byte1, + ih->daddr.byte2, + ih->daddr.byte3, + ih->daddr.byte4, + dport); +} diff --git a/libs/WinPcap-413-173-b4/Examples-pcap/basic_dump/GNUmakefile b/libs/WpdPack_4_1_2/Examples-pcap/basic_dump/GNUmakefile similarity index 94% rename from libs/WinPcap-413-173-b4/Examples-pcap/basic_dump/GNUmakefile rename to libs/WpdPack_4_1_2/Examples-pcap/basic_dump/GNUmakefile index e10ff285..11951f4e 100644 --- a/libs/WinPcap-413-173-b4/Examples-pcap/basic_dump/GNUmakefile +++ b/libs/WpdPack_4_1_2/Examples-pcap/basic_dump/GNUmakefile @@ -1,17 +1,17 @@ -# Makefile for cygwin gcc -# Nate Lawson - -PCAP_PATH = ../../lib -CFLAGS = -g -O -mno-cygwin -I ../../include - -OBJS = basic_dump.o -LIBS = -L ${PCAP_PATH} -lwpcap - -all: ${OBJS} - ${CC} ${CFLAGS} -o basic_dump.exe ${OBJS} ${LIBS} - -clean: - rm -f ${OBJS} basic_dump.exe - -.c.o: - ${CC} ${CFLAGS} -c -o $*.o $< +# Makefile for cygwin gcc +# Nate Lawson + +PCAP_PATH = ../../lib +CFLAGS = -g -O -mno-cygwin -I ../../include + +OBJS = basic_dump.o +LIBS = -L ${PCAP_PATH} -lwpcap + +all: ${OBJS} + ${CC} ${CFLAGS} -o basic_dump.exe ${OBJS} ${LIBS} + +clean: + rm -f ${OBJS} basic_dump.exe + +.c.o: + ${CC} ${CFLAGS} -c -o $*.o $< diff --git a/libs/WinPcap-413-173-b4/Examples-pcap/basic_dump/basic_dump.c b/libs/WpdPack_4_1_2/Examples-pcap/basic_dump/basic_dump.c similarity index 96% rename from libs/WinPcap-413-173-b4/Examples-pcap/basic_dump/basic_dump.c rename to libs/WpdPack_4_1_2/Examples-pcap/basic_dump/basic_dump.c index 89fa6641..2980fd23 100644 --- a/libs/WinPcap-413-173-b4/Examples-pcap/basic_dump/basic_dump.c +++ b/libs/WpdPack_4_1_2/Examples-pcap/basic_dump/basic_dump.c @@ -1,109 +1,109 @@ -#ifdef _MSC_VER -/* - * we do not want the warnings about the old deprecated and unsecure CRT functions - * since these examples can be compiled under *nix as well - */ -#define _CRT_SECURE_NO_WARNINGS -#endif - -#include "pcap.h" - -/* prototype of the packet handler */ -void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data); - -int main() -{ - pcap_if_t *alldevs; - pcap_if_t *d; - int inum; - int i=0; - pcap_t *adhandle; - char errbuf[PCAP_ERRBUF_SIZE]; - - /* Retrieve the device list */ - if(pcap_findalldevs(&alldevs, errbuf) == -1) - { - fprintf(stderr,"Error in pcap_findalldevs: %s\n", errbuf); - exit(1); - } - - /* Print the list */ - for(d=alldevs; d; d=d->next) - { - printf("%d. %s", ++i, d->name); - if (d->description) - printf(" (%s)\n", d->description); - else - printf(" (No description available)\n"); - } - - if(i==0) - { - printf("\nNo interfaces found! Make sure WinPcap is installed.\n"); - return -1; - } - - printf("Enter the interface number (1-%d):",i); - scanf("%d", &inum); - - if(inum < 1 || inum > i) - { - printf("\nInterface number out of range.\n"); - /* Free the device list */ - pcap_freealldevs(alldevs); - return -1; - } - - /* Jump to the selected adapter */ - for(d=alldevs, i=0; i< inum-1 ;d=d->next, i++); - - /* Open the device */ - /* Open the adapter */ - if ((adhandle= pcap_open_live(d->name, // name of the device - 65536, // portion of the packet to capture. - // 65536 grants that the whole packet will be captured on all the MACs. - 1, // promiscuous mode (nonzero means promiscuous) - 1000, // read timeout - errbuf // error buffer - )) == NULL) - { - fprintf(stderr,"\nUnable to open the adapter. %s is not supported by WinPcap\n", d->name); - /* Free the device list */ - pcap_freealldevs(alldevs); - return -1; - } - - printf("\nlistening on %s...\n", d->description); - - /* At this point, we don't need any more the device list. Free it */ - pcap_freealldevs(alldevs); - - /* start the capture */ - pcap_loop(adhandle, 0, packet_handler, NULL); - - pcap_close(adhandle); - return 0; -} - - -/* Callback function invoked by libpcap for every incoming packet */ -void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data) -{ - struct tm *ltime; - char timestr[16]; - time_t local_tv_sec; - - /* - * unused parameters - */ - (VOID)(param); - (VOID)(pkt_data); - - /* convert the timestamp to readable format */ - local_tv_sec = header->ts.tv_sec; - ltime=localtime(&local_tv_sec); - strftime( timestr, sizeof timestr, "%H:%M:%S", ltime); - - printf("%s,%.6d len:%d\n", timestr, header->ts.tv_usec, header->len); - -} +#ifdef _MSC_VER +/* + * we do not want the warnings about the old deprecated and unsecure CRT functions + * since these examples can be compiled under *nix as well + */ +#define _CRT_SECURE_NO_WARNINGS +#endif + +#include "pcap.h" + +/* prototype of the packet handler */ +void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data); + +int main() +{ + pcap_if_t *alldevs; + pcap_if_t *d; + int inum; + int i=0; + pcap_t *adhandle; + char errbuf[PCAP_ERRBUF_SIZE]; + + /* Retrieve the device list */ + if(pcap_findalldevs(&alldevs, errbuf) == -1) + { + fprintf(stderr,"Error in pcap_findalldevs: %s\n", errbuf); + exit(1); + } + + /* Print the list */ + for(d=alldevs; d; d=d->next) + { + printf("%d. %s", ++i, d->name); + if (d->description) + printf(" (%s)\n", d->description); + else + printf(" (No description available)\n"); + } + + if(i==0) + { + printf("\nNo interfaces found! Make sure WinPcap is installed.\n"); + return -1; + } + + printf("Enter the interface number (1-%d):",i); + scanf("%d", &inum); + + if(inum < 1 || inum > i) + { + printf("\nInterface number out of range.\n"); + /* Free the device list */ + pcap_freealldevs(alldevs); + return -1; + } + + /* Jump to the selected adapter */ + for(d=alldevs, i=0; i< inum-1 ;d=d->next, i++); + + /* Open the device */ + /* Open the adapter */ + if ((adhandle= pcap_open_live(d->name, // name of the device + 65536, // portion of the packet to capture. + // 65536 grants that the whole packet will be captured on all the MACs. + 1, // promiscuous mode (nonzero means promiscuous) + 1000, // read timeout + errbuf // error buffer + )) == NULL) + { + fprintf(stderr,"\nUnable to open the adapter. %s is not supported by WinPcap\n", d->name); + /* Free the device list */ + pcap_freealldevs(alldevs); + return -1; + } + + printf("\nlistening on %s...\n", d->description); + + /* At this point, we don't need any more the device list. Free it */ + pcap_freealldevs(alldevs); + + /* start the capture */ + pcap_loop(adhandle, 0, packet_handler, NULL); + + pcap_close(adhandle); + return 0; +} + + +/* Callback function invoked by libpcap for every incoming packet */ +void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data) +{ + struct tm *ltime; + char timestr[16]; + time_t local_tv_sec; + + /* + * unused parameters + */ + (VOID)(param); + (VOID)(pkt_data); + + /* convert the timestamp to readable format */ + local_tv_sec = header->ts.tv_sec; + ltime=localtime(&local_tv_sec); + strftime( timestr, sizeof timestr, "%H:%M:%S", ltime); + + printf("%s,%.6d len:%d\n", timestr, header->ts.tv_usec, header->len); + +} diff --git a/libs/WinPcap-413-173-b4/Examples-remote/misc/basic_dump.dsp b/libs/WpdPack_4_1_2/Examples-pcap/basic_dump/basic_dump.dsp similarity index 97% rename from libs/WinPcap-413-173-b4/Examples-remote/misc/basic_dump.dsp rename to libs/WpdPack_4_1_2/Examples-pcap/basic_dump/basic_dump.dsp index 3e8bc029..7e74aaa0 100644 --- a/libs/WinPcap-413-173-b4/Examples-remote/misc/basic_dump.dsp +++ b/libs/WpdPack_4_1_2/Examples-pcap/basic_dump/basic_dump.dsp @@ -1,110 +1,110 @@ -# Microsoft Developer Studio Project File - Name="basic_dump" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=basic_dump - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "basic_dump.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "basic_dump.mak" CFG="basic_dump - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "basic_dump - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "basic_dump - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "basic_dump - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "../" /I "../bpf/" /I "../lbl/" /I "../../Include/" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_UNICODE" /D "WPCAP" /D "HAVE_REMOTE" /YX /FD /c -# ADD BASE RSC /l 0x410 /d "NDEBUG" -# ADD RSC /l 0x410 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib ws2_32.lib Iphlpapi.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "basic_dump - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../" /I "../bpf/" /I "../lbl/" /I "../../Include/" /I "D:/Program Files/Microsoft Platform SDK/include" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_UNICODE" /D "WPCAP" /D "HAVE_REMOTE" /YX /FD /GZ /c -# ADD BASE RSC /l 0x410 /d "_DEBUG" -# ADD RSC /l 0x410 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib ws2_32.lib Iphlpapi.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "basic_dump - Win32 Release" -# Name "basic_dump - Win32 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\basic_dump.c -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# Begin Source File - -SOURCE=..\..\include\pcap.h -# End Source File -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# Begin Source File - -SOURCE=..\..\lib\Wpcap.lib -# End Source File -# End Target -# End Project +# Microsoft Developer Studio Project File - Name="basic_dump" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Console Application" 0x0103 + +CFG=basic_dump - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "basic_dump.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "basic_dump.mak" CFG="basic_dump - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "basic_dump - Win32 Release" (based on "Win32 (x86) Console Application") +!MESSAGE "basic_dump - Win32 Debug" (based on "Win32 (x86) Console Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "basic_dump - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /I "../" /I "../bpf/" /I "../lbl/" /I "../../Include/" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_UNICODE" /D "WPCAP" /D "HAVE_REMOTE" /YX /FD /c +# ADD BASE RSC /l 0x410 /d "NDEBUG" +# ADD RSC /l 0x410 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib ws2_32.lib Iphlpapi.lib /nologo /subsystem:console /machine:I386 + +!ELSEIF "$(CFG)" == "basic_dump - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c +# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../" /I "../bpf/" /I "../lbl/" /I "../../Include/" /I "D:/Program Files/Microsoft Platform SDK/include" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_UNICODE" /D "WPCAP" /D "HAVE_REMOTE" /YX /FD /GZ /c +# ADD BASE RSC /l 0x410 /d "_DEBUG" +# ADD RSC /l 0x410 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib ws2_32.lib Iphlpapi.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept + +!ENDIF + +# Begin Target + +# Name "basic_dump - Win32 Release" +# Name "basic_dump - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\basic_dump.c +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# Begin Source File + +SOURCE=..\..\include\pcap.h +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# End Group +# Begin Source File + +SOURCE=..\..\lib\Wpcap.lib +# End Source File +# End Target +# End Project diff --git a/libs/WinPcap-413-173-b4/Examples-pcap/basic_dump/basic_dump.dsw b/libs/WpdPack_4_1_2/Examples-pcap/basic_dump/basic_dump.dsw similarity index 94% rename from libs/WinPcap-413-173-b4/Examples-pcap/basic_dump/basic_dump.dsw rename to libs/WpdPack_4_1_2/Examples-pcap/basic_dump/basic_dump.dsw index 1f6a6ff4..34942091 100644 --- a/libs/WinPcap-413-173-b4/Examples-pcap/basic_dump/basic_dump.dsw +++ b/libs/WpdPack_4_1_2/Examples-pcap/basic_dump/basic_dump.dsw @@ -1,29 +1,29 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "basic_dump"=.\basic_dump.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "basic_dump"=.\basic_dump.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/libs/WinPcap-413-173-b4/Examples-pcap/basic_dump/basic_dump.vcproj b/libs/WpdPack_4_1_2/Examples-pcap/basic_dump/basic_dump.vcproj similarity index 95% rename from libs/WinPcap-413-173-b4/Examples-pcap/basic_dump/basic_dump.vcproj rename to libs/WpdPack_4_1_2/Examples-pcap/basic_dump/basic_dump.vcproj index cf4907f4..6a3fe3da 100644 --- a/libs/WinPcap-413-173-b4/Examples-pcap/basic_dump/basic_dump.vcproj +++ b/libs/WpdPack_4_1_2/Examples-pcap/basic_dump/basic_dump.vcproj @@ -1,364 +1,364 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/libs/WinPcap-413-173-b4/Examples-pcap/basic_dump_ex/GNUmakefile b/libs/WpdPack_4_1_2/Examples-pcap/basic_dump_ex/GNUmakefile similarity index 95% rename from libs/WinPcap-413-173-b4/Examples-pcap/basic_dump_ex/GNUmakefile rename to libs/WpdPack_4_1_2/Examples-pcap/basic_dump_ex/GNUmakefile index 708acd4b..aeeeea6a 100644 --- a/libs/WinPcap-413-173-b4/Examples-pcap/basic_dump_ex/GNUmakefile +++ b/libs/WpdPack_4_1_2/Examples-pcap/basic_dump_ex/GNUmakefile @@ -1,17 +1,17 @@ -# Makefile for cygwin gcc -# Nate Lawson - -PCAP_PATH = ../../lib -CFLAGS = -g -O -mno-cygwin -I ../../include - -OBJS = basic_dump_ex.o -LIBS = -L ${PCAP_PATH} -lwpcap - -all: ${OBJS} - ${CC} ${CFLAGS} -o basic_dump_ex.exe ${OBJS} ${LIBS} - -clean: - rm -f ${OBJS} basic_dump_ex.exe - -.c.o: - ${CC} ${CFLAGS} -c -o $*.o $< +# Makefile for cygwin gcc +# Nate Lawson + +PCAP_PATH = ../../lib +CFLAGS = -g -O -mno-cygwin -I ../../include + +OBJS = basic_dump_ex.o +LIBS = -L ${PCAP_PATH} -lwpcap + +all: ${OBJS} + ${CC} ${CFLAGS} -o basic_dump_ex.exe ${OBJS} ${LIBS} + +clean: + rm -f ${OBJS} basic_dump_ex.exe + +.c.o: + ${CC} ${CFLAGS} -c -o $*.o $< diff --git a/libs/WinPcap-413-173-b4/Examples-pcap/basic_dump_ex/basic_dump_ex.c b/libs/WpdPack_4_1_2/Examples-pcap/basic_dump_ex/basic_dump_ex.c similarity index 96% rename from libs/WinPcap-413-173-b4/Examples-pcap/basic_dump_ex/basic_dump_ex.c rename to libs/WpdPack_4_1_2/Examples-pcap/basic_dump_ex/basic_dump_ex.c index 4c109dcc..d4e6117d 100644 --- a/libs/WinPcap-413-173-b4/Examples-pcap/basic_dump_ex/basic_dump_ex.c +++ b/libs/WpdPack_4_1_2/Examples-pcap/basic_dump_ex/basic_dump_ex.c @@ -1,106 +1,106 @@ -#ifdef _MSC_VER -/* - * we do not want the warnings about the old deprecated and unsecure CRT functions - * since these examples can be compiled under *nix as well - */ -#define _CRT_SECURE_NO_WARNINGS -#endif - -#include "pcap.h" - -int main() -{ - pcap_if_t *alldevs; - pcap_if_t *d; - int inum; - int i=0; - pcap_t *adhandle; - int res; - char errbuf[PCAP_ERRBUF_SIZE]; - struct tm *ltime; - char timestr[16]; - struct pcap_pkthdr *header; - const u_char *pkt_data; - time_t local_tv_sec; - - - /* Retrieve the device list */ - if(pcap_findalldevs(&alldevs, errbuf) == -1) - { - fprintf(stderr,"Error in pcap_findalldevs: %s\n", errbuf); - return -1; - } - - /* Print the list */ - for(d=alldevs; d; d=d->next) - { - printf("%d. %s", ++i, d->name); - if (d->description) - printf(" (%s)\n", d->description); - else - printf(" (No description available)\n"); - } - - if(i==0) - { - printf("\nNo interfaces found! Make sure WinPcap is installed.\n"); - return -1; - } - - printf("Enter the interface number (1-%d):",i); - scanf("%d", &inum); - - if(inum < 1 || inum > i) - { - printf("\nInterface number out of range.\n"); - /* Free the device list */ - pcap_freealldevs(alldevs); - return -1; - } - - /* Jump to the selected adapter */ - for(d=alldevs, i=0; i< inum-1 ;d=d->next, i++); - - /* Open the adapter */ - if ((adhandle= pcap_open_live(d->name, // name of the device - 65536, // portion of the packet to capture. - // 65536 grants that the whole packet will be captured on all the MACs. - 1, // promiscuous mode (nonzero means promiscuous) - 1000, // read timeout - errbuf // error buffer - )) == NULL) - { - fprintf(stderr,"\nUnable to open the adapter. %s is not supported by WinPcap\n", d->name); - /* Free the device list */ - pcap_freealldevs(alldevs); - return -1; - } - - printf("\nlistening on %s...\n", d->description); - - /* At this point, we don't need any more the device list. Free it */ - pcap_freealldevs(alldevs); - - /* Retrieve the packets */ - while((res = pcap_next_ex( adhandle, &header, &pkt_data)) >= 0){ - - if(res == 0) - /* Timeout elapsed */ - continue; - - /* convert the timestamp to readable format */ - local_tv_sec = header->ts.tv_sec; - ltime=localtime(&local_tv_sec); - strftime( timestr, sizeof timestr, "%H:%M:%S", ltime); - - printf("%s,%.6d len:%d\n", timestr, header->ts.tv_usec, header->len); - } - - if(res == -1){ - printf("Error reading the packets: %s\n", pcap_geterr(adhandle)); - return -1; - } - - pcap_close(adhandle); - return 0; -} +#ifdef _MSC_VER +/* + * we do not want the warnings about the old deprecated and unsecure CRT functions + * since these examples can be compiled under *nix as well + */ +#define _CRT_SECURE_NO_WARNINGS +#endif + +#include "pcap.h" + +int main() +{ + pcap_if_t *alldevs; + pcap_if_t *d; + int inum; + int i=0; + pcap_t *adhandle; + int res; + char errbuf[PCAP_ERRBUF_SIZE]; + struct tm *ltime; + char timestr[16]; + struct pcap_pkthdr *header; + const u_char *pkt_data; + time_t local_tv_sec; + + + /* Retrieve the device list */ + if(pcap_findalldevs(&alldevs, errbuf) == -1) + { + fprintf(stderr,"Error in pcap_findalldevs: %s\n", errbuf); + return -1; + } + + /* Print the list */ + for(d=alldevs; d; d=d->next) + { + printf("%d. %s", ++i, d->name); + if (d->description) + printf(" (%s)\n", d->description); + else + printf(" (No description available)\n"); + } + + if(i==0) + { + printf("\nNo interfaces found! Make sure WinPcap is installed.\n"); + return -1; + } + + printf("Enter the interface number (1-%d):",i); + scanf("%d", &inum); + + if(inum < 1 || inum > i) + { + printf("\nInterface number out of range.\n"); + /* Free the device list */ + pcap_freealldevs(alldevs); + return -1; + } + + /* Jump to the selected adapter */ + for(d=alldevs, i=0; i< inum-1 ;d=d->next, i++); + + /* Open the adapter */ + if ((adhandle= pcap_open_live(d->name, // name of the device + 65536, // portion of the packet to capture. + // 65536 grants that the whole packet will be captured on all the MACs. + 1, // promiscuous mode (nonzero means promiscuous) + 1000, // read timeout + errbuf // error buffer + )) == NULL) + { + fprintf(stderr,"\nUnable to open the adapter. %s is not supported by WinPcap\n", d->name); + /* Free the device list */ + pcap_freealldevs(alldevs); + return -1; + } + + printf("\nlistening on %s...\n", d->description); + + /* At this point, we don't need any more the device list. Free it */ + pcap_freealldevs(alldevs); + + /* Retrieve the packets */ + while((res = pcap_next_ex( adhandle, &header, &pkt_data)) >= 0){ + + if(res == 0) + /* Timeout elapsed */ + continue; + + /* convert the timestamp to readable format */ + local_tv_sec = header->ts.tv_sec; + ltime=localtime(&local_tv_sec); + strftime( timestr, sizeof timestr, "%H:%M:%S", ltime); + + printf("%s,%.6d len:%d\n", timestr, header->ts.tv_usec, header->len); + } + + if(res == -1){ + printf("Error reading the packets: %s\n", pcap_geterr(adhandle)); + return -1; + } + + pcap_close(adhandle); + return 0; +} diff --git a/libs/WinPcap-413-173-b4/Examples-pcap/basic_dump_ex/basic_dump_ex.dsp b/libs/WpdPack_4_1_2/Examples-pcap/basic_dump_ex/basic_dump_ex.dsp similarity index 97% rename from libs/WinPcap-413-173-b4/Examples-pcap/basic_dump_ex/basic_dump_ex.dsp rename to libs/WpdPack_4_1_2/Examples-pcap/basic_dump_ex/basic_dump_ex.dsp index e798f636..0405d292 100644 --- a/libs/WinPcap-413-173-b4/Examples-pcap/basic_dump_ex/basic_dump_ex.dsp +++ b/libs/WpdPack_4_1_2/Examples-pcap/basic_dump_ex/basic_dump_ex.dsp @@ -1,110 +1,110 @@ -# Microsoft Developer Studio Project File - Name="basic_dump_ex" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=basic_dump_ex - Win32 Release -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "basic_dump_ex.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "basic_dump_ex.mak" CFG="basic_dump_ex - Win32 Release" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "basic_dump_ex - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "basic_dump_ex - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "basic_dump_ex - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "../" /I "../bpf/" /I "../lbl/" /I "../../Include/" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_UNICODE" /D "WPCAP" /D "HAVE_REMOTE" /YX /FD /c -# ADD BASE RSC /l 0x410 /d "NDEBUG" -# ADD RSC /l 0x410 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib ws2_32.lib Iphlpapi.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "basic_dump_ex - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../" /I "../bpf/" /I "../lbl/" /I "../../Include/" /I "D:/Program Files/Microsoft Platform SDK/include" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_UNICODE" /D "WPCAP" /D "HAVE_REMOTE" /YX /FD /GZ /c -# ADD BASE RSC /l 0x410 /d "_DEBUG" -# ADD RSC /l 0x410 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib ws2_32.lib Iphlpapi.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "basic_dump_ex - Win32 Release" -# Name "basic_dump_ex - Win32 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\basic_dump_ex.c -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# Begin Source File - -SOURCE=..\..\include\pcap.h -# End Source File -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# Begin Source File - -SOURCE=..\..\lib\Wpcap.lib -# End Source File -# End Target -# End Project +# Microsoft Developer Studio Project File - Name="basic_dump_ex" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Console Application" 0x0103 + +CFG=basic_dump_ex - Win32 Release +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "basic_dump_ex.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "basic_dump_ex.mak" CFG="basic_dump_ex - Win32 Release" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "basic_dump_ex - Win32 Release" (based on "Win32 (x86) Console Application") +!MESSAGE "basic_dump_ex - Win32 Debug" (based on "Win32 (x86) Console Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "basic_dump_ex - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /I "../" /I "../bpf/" /I "../lbl/" /I "../../Include/" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_UNICODE" /D "WPCAP" /D "HAVE_REMOTE" /YX /FD /c +# ADD BASE RSC /l 0x410 /d "NDEBUG" +# ADD RSC /l 0x410 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib ws2_32.lib Iphlpapi.lib /nologo /subsystem:console /machine:I386 + +!ELSEIF "$(CFG)" == "basic_dump_ex - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c +# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../" /I "../bpf/" /I "../lbl/" /I "../../Include/" /I "D:/Program Files/Microsoft Platform SDK/include" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_UNICODE" /D "WPCAP" /D "HAVE_REMOTE" /YX /FD /GZ /c +# ADD BASE RSC /l 0x410 /d "_DEBUG" +# ADD RSC /l 0x410 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib ws2_32.lib Iphlpapi.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept + +!ENDIF + +# Begin Target + +# Name "basic_dump_ex - Win32 Release" +# Name "basic_dump_ex - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\basic_dump_ex.c +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# Begin Source File + +SOURCE=..\..\include\pcap.h +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# End Group +# Begin Source File + +SOURCE=..\..\lib\Wpcap.lib +# End Source File +# End Target +# End Project diff --git a/libs/WinPcap-413-173-b4/Examples-pcap/basic_dump_ex/basic_dump_ex.dsw b/libs/WpdPack_4_1_2/Examples-pcap/basic_dump_ex/basic_dump_ex.dsw similarity index 94% rename from libs/WinPcap-413-173-b4/Examples-pcap/basic_dump_ex/basic_dump_ex.dsw rename to libs/WpdPack_4_1_2/Examples-pcap/basic_dump_ex/basic_dump_ex.dsw index e3364367..ff590dd5 100644 --- a/libs/WinPcap-413-173-b4/Examples-pcap/basic_dump_ex/basic_dump_ex.dsw +++ b/libs/WpdPack_4_1_2/Examples-pcap/basic_dump_ex/basic_dump_ex.dsw @@ -1,29 +1,29 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "basic_dump_ex"=.\basic_dump_ex.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "basic_dump_ex"=.\basic_dump_ex.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/libs/WinPcap-413-173-b4/Examples-pcap/basic_dump_ex/basic_dump_ex.vcproj b/libs/WpdPack_4_1_2/Examples-pcap/basic_dump_ex/basic_dump_ex.vcproj similarity index 95% rename from libs/WinPcap-413-173-b4/Examples-pcap/basic_dump_ex/basic_dump_ex.vcproj rename to libs/WpdPack_4_1_2/Examples-pcap/basic_dump_ex/basic_dump_ex.vcproj index 6c63b8e9..a8f42f25 100644 --- a/libs/WinPcap-413-173-b4/Examples-pcap/basic_dump_ex/basic_dump_ex.vcproj +++ b/libs/WpdPack_4_1_2/Examples-pcap/basic_dump_ex/basic_dump_ex.vcproj @@ -1,364 +1,364 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/libs/WinPcap-413-173-b4/Examples-pcap/iflist/GNUmakefile b/libs/WpdPack_4_1_2/Examples-pcap/iflist/GNUmakefile similarity index 94% rename from libs/WinPcap-413-173-b4/Examples-pcap/iflist/GNUmakefile rename to libs/WpdPack_4_1_2/Examples-pcap/iflist/GNUmakefile index 30c70138..01766bd3 100644 --- a/libs/WinPcap-413-173-b4/Examples-pcap/iflist/GNUmakefile +++ b/libs/WpdPack_4_1_2/Examples-pcap/iflist/GNUmakefile @@ -1,17 +1,17 @@ -# Makefile for cygwin gcc -# Nate Lawson - -PCAP_PATH = ../../lib -CFLAGS = -g -O -mno-cygwin -I ../../include - -OBJS = iflist.o -LIBS = -L ${PCAP_PATH} -lwpcap - -all: ${OBJS} - ${CC} ${CFLAGS} -o iflist.exe ${OBJS} ${LIBS} - -clean: - rm -f ${OBJS} iflist.exe - -.c.o: - ${CC} ${CFLAGS} -c -o $*.o $< +# Makefile for cygwin gcc +# Nate Lawson + +PCAP_PATH = ../../lib +CFLAGS = -g -O -mno-cygwin -I ../../include + +OBJS = iflist.o +LIBS = -L ${PCAP_PATH} -lwpcap + +all: ${OBJS} + ${CC} ${CFLAGS} -o iflist.exe ${OBJS} ${LIBS} + +clean: + rm -f ${OBJS} iflist.exe + +.c.o: + ${CC} ${CFLAGS} -c -o $*.o $< diff --git a/libs/WinPcap-413-173-b4/Examples-pcap/iflist/iflist.c b/libs/WpdPack_4_1_2/Examples-pcap/iflist/iflist.c similarity index 72% rename from libs/WinPcap-413-173-b4/Examples-pcap/iflist/iflist.c rename to libs/WpdPack_4_1_2/Examples-pcap/iflist/iflist.c index 35f4c20b..d462afb1 100644 --- a/libs/WinPcap-413-173-b4/Examples-pcap/iflist/iflist.c +++ b/libs/WpdPack_4_1_2/Examples-pcap/iflist/iflist.c @@ -1,172 +1,172 @@ -/* - * Copyright (c) 1999 - 2005 NetGroup, Politecnico di Torino (Italy) - * Copyright (c) 2005 - 2006 CACE Technologies, Davis (California) - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the Politecnico di Torino, CACE Technologies - * nor the names of its contributors may be used to endorse or promote - * products derived from this software without specific prior written - * permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ - -#ifdef _MSC_VER -/* - * we do not want the warnings about the old deprecated and unsecure CRT functions - * since these examples can be compiled under *nix as well - */ -#define _CRT_SECURE_NO_WARNINGS -#endif - -#include "pcap.h" - -#ifndef _WIN32 - #include - #include -#else - #include -#endif - - -// Function prototypes -void ifprint(pcap_if_t *d); -char *iptos(u_long in); -char* ip6tos(struct sockaddr *sockaddr, char *address, int addrlen); - - -int main() -{ - pcap_if_t *alldevs; - pcap_if_t *d; - char errbuf[PCAP_ERRBUF_SIZE+1]; - - /* Retrieve the device list */ - if(pcap_findalldevs(&alldevs, errbuf) == -1) - { - fprintf(stderr,"Error in pcap_findalldevs: %s\n", errbuf); - exit(1); - } - - /* Scan the list printing every entry */ - for(d=alldevs;d;d=d->next) - { - ifprint(d); - } - - /* Free the device list */ - pcap_freealldevs(alldevs); - - return 1; -} - - - -/* Print all the available information on the given interface */ -void ifprint(pcap_if_t *d) -{ - pcap_addr_t *a; - char ip6str[128]; - - /* Name */ - printf("%s\n",d->name); - - /* Description */ - if (d->description) - printf("\tDescription: %s\n",d->description); - - /* Loopback Address*/ - printf("\tLoopback: %s\n",(d->flags & PCAP_IF_LOOPBACK)?"yes":"no"); - - /* IP addresses */ - for(a=d->addresses;a;a=a->next) { - printf("\tAddress Family: #%d\n",a->addr->sa_family); - - switch(a->addr->sa_family) - { - case AF_INET: - printf("\tAddress Family Name: AF_INET\n"); - if (a->addr) - printf("\tAddress: %s\n",iptos(((struct sockaddr_in *)a->addr)->sin_addr.s_addr)); - if (a->netmask) - printf("\tNetmask: %s\n",iptos(((struct sockaddr_in *)a->netmask)->sin_addr.s_addr)); - if (a->broadaddr) - printf("\tBroadcast Address: %s\n",iptos(((struct sockaddr_in *)a->broadaddr)->sin_addr.s_addr)); - if (a->dstaddr) - printf("\tDestination Address: %s\n",iptos(((struct sockaddr_in *)a->dstaddr)->sin_addr.s_addr)); - break; - - case AF_INET6: - printf("\tAddress Family Name: AF_INET6\n"); -#ifndef __MINGW32__ /* Cygnus doesn't have IPv6 */ - if (a->addr) - printf("\tAddress: %s\n", ip6tos(a->addr, ip6str, sizeof(ip6str))); -#endif - break; - - default: - printf("\tAddress Family Name: Unknown\n"); - break; - } - } - printf("\n"); -} - -/* From tcptraceroute, convert a numeric IP address to a string */ -#define IPTOSBUFFERS 12 -char *iptos(u_long in) -{ - static char output[IPTOSBUFFERS][3*4+3+1]; - static short which; - u_char *p; - - p = (u_char *)∈ - which = (which + 1 == IPTOSBUFFERS ? 0 : which + 1); - sprintf(output[which], "%d.%d.%d.%d", p[0], p[1], p[2], p[3]); - return output[which]; -} - -#ifndef __MINGW32__ /* Cygnus doesn't have IPv6 */ -char* ip6tos(struct sockaddr *sockaddr, char *address, int addrlen) -{ - socklen_t sockaddrlen; - - #ifdef _WIN32 - sockaddrlen = sizeof(struct sockaddr_in6); - #else - sockaddrlen = sizeof(struct sockaddr_storage); - #endif - - - if(getnameinfo(sockaddr, - sockaddrlen, - address, - addrlen, - NULL, - 0, - NI_NUMERICHOST) != 0) address = NULL; - - return address; -} -#endif /* __MINGW32__ */ - +/* + * Copyright (c) 1999 - 2005 NetGroup, Politecnico di Torino (Italy) + * Copyright (c) 2005 - 2006 CACE Technologies, Davis (California) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Politecnico di Torino, CACE Technologies + * nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written + * permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#ifdef _MSC_VER +/* + * we do not want the warnings about the old deprecated and unsecure CRT functions + * since these examples can be compiled under *nix as well + */ +#define _CRT_SECURE_NO_WARNINGS +#endif + +#include "pcap.h" + +#ifndef WIN32 + #include + #include +#else + #include +#endif + + +// Function prototypes +void ifprint(pcap_if_t *d); +char *iptos(u_long in); +char* ip6tos(struct sockaddr *sockaddr, char *address, int addrlen); + + +int main() +{ + pcap_if_t *alldevs; + pcap_if_t *d; + char errbuf[PCAP_ERRBUF_SIZE+1]; + + /* Retrieve the device list */ + if(pcap_findalldevs(&alldevs, errbuf) == -1) + { + fprintf(stderr,"Error in pcap_findalldevs: %s\n", errbuf); + exit(1); + } + + /* Scan the list printing every entry */ + for(d=alldevs;d;d=d->next) + { + ifprint(d); + } + + /* Free the device list */ + pcap_freealldevs(alldevs); + + return 1; +} + + + +/* Print all the available information on the given interface */ +void ifprint(pcap_if_t *d) +{ + pcap_addr_t *a; + char ip6str[128]; + + /* Name */ + printf("%s\n",d->name); + + /* Description */ + if (d->description) + printf("\tDescription: %s\n",d->description); + + /* Loopback Address*/ + printf("\tLoopback: %s\n",(d->flags & PCAP_IF_LOOPBACK)?"yes":"no"); + + /* IP addresses */ + for(a=d->addresses;a;a=a->next) { + printf("\tAddress Family: #%d\n",a->addr->sa_family); + + switch(a->addr->sa_family) + { + case AF_INET: + printf("\tAddress Family Name: AF_INET\n"); + if (a->addr) + printf("\tAddress: %s\n",iptos(((struct sockaddr_in *)a->addr)->sin_addr.s_addr)); + if (a->netmask) + printf("\tNetmask: %s\n",iptos(((struct sockaddr_in *)a->netmask)->sin_addr.s_addr)); + if (a->broadaddr) + printf("\tBroadcast Address: %s\n",iptos(((struct sockaddr_in *)a->broadaddr)->sin_addr.s_addr)); + if (a->dstaddr) + printf("\tDestination Address: %s\n",iptos(((struct sockaddr_in *)a->dstaddr)->sin_addr.s_addr)); + break; + + case AF_INET6: + printf("\tAddress Family Name: AF_INET6\n"); +#ifndef __MINGW32__ /* Cygnus doesn't have IPv6 */ + if (a->addr) + printf("\tAddress: %s\n", ip6tos(a->addr, ip6str, sizeof(ip6str))); +#endif + break; + + default: + printf("\tAddress Family Name: Unknown\n"); + break; + } + } + printf("\n"); +} + +/* From tcptraceroute, convert a numeric IP address to a string */ +#define IPTOSBUFFERS 12 +char *iptos(u_long in) +{ + static char output[IPTOSBUFFERS][3*4+3+1]; + static short which; + u_char *p; + + p = (u_char *)∈ + which = (which + 1 == IPTOSBUFFERS ? 0 : which + 1); + sprintf(output[which], "%d.%d.%d.%d", p[0], p[1], p[2], p[3]); + return output[which]; +} + +#ifndef __MINGW32__ /* Cygnus doesn't have IPv6 */ +char* ip6tos(struct sockaddr *sockaddr, char *address, int addrlen) +{ + socklen_t sockaddrlen; + + #ifdef WIN32 + sockaddrlen = sizeof(struct sockaddr_in6); + #else + sockaddrlen = sizeof(struct sockaddr_storage); + #endif + + + if(getnameinfo(sockaddr, + sockaddrlen, + address, + addrlen, + NULL, + 0, + NI_NUMERICHOST) != 0) address = NULL; + + return address; +} +#endif /* __MINGW32__ */ + diff --git a/libs/WinPcap-413-173-b4/Examples-pcap/iflist/iflist.dsp b/libs/WpdPack_4_1_2/Examples-pcap/iflist/iflist.dsp similarity index 97% rename from libs/WinPcap-413-173-b4/Examples-pcap/iflist/iflist.dsp rename to libs/WpdPack_4_1_2/Examples-pcap/iflist/iflist.dsp index b1a8c8c3..41823644 100644 --- a/libs/WinPcap-413-173-b4/Examples-pcap/iflist/iflist.dsp +++ b/libs/WpdPack_4_1_2/Examples-pcap/iflist/iflist.dsp @@ -1,110 +1,110 @@ -# Microsoft Developer Studio Project File - Name="iflist" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=iflist - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "iflist.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "iflist.mak" CFG="iflist - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "iflist - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "iflist - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "iflist - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "../" /I "../bpf/" /I "../lbl/" /I "../../Include/" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_UNICODE" /D "WPCAP" /D "HAVE_REMOTE" /YX /FD /c -# ADD BASE RSC /l 0x410 /d "NDEBUG" -# ADD RSC /l 0x410 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib ws2_32.lib Iphlpapi.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "iflist - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../" /I "../bpf/" /I "../lbl/" /I "../../Include/" /I "D:/Program Files/Microsoft Platform SDK/include" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_UNICODE" /D "WPCAP" /D "HAVE_REMOTE" /YX /FD /GZ /c -# ADD BASE RSC /l 0x410 /d "_DEBUG" -# ADD RSC /l 0x410 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib ws2_32.lib Iphlpapi.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "iflist - Win32 Release" -# Name "iflist - Win32 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\iflist.c -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# Begin Source File - -SOURCE=..\..\include\pcap.h -# End Source File -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# Begin Source File - -SOURCE=..\..\lib\Wpcap.lib -# End Source File -# End Target -# End Project +# Microsoft Developer Studio Project File - Name="iflist" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Console Application" 0x0103 + +CFG=iflist - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "iflist.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "iflist.mak" CFG="iflist - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "iflist - Win32 Release" (based on "Win32 (x86) Console Application") +!MESSAGE "iflist - Win32 Debug" (based on "Win32 (x86) Console Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "iflist - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /I "../" /I "../bpf/" /I "../lbl/" /I "../../Include/" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_UNICODE" /D "WPCAP" /D "HAVE_REMOTE" /YX /FD /c +# ADD BASE RSC /l 0x410 /d "NDEBUG" +# ADD RSC /l 0x410 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib ws2_32.lib Iphlpapi.lib /nologo /subsystem:console /machine:I386 + +!ELSEIF "$(CFG)" == "iflist - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c +# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../" /I "../bpf/" /I "../lbl/" /I "../../Include/" /I "D:/Program Files/Microsoft Platform SDK/include" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_UNICODE" /D "WPCAP" /D "HAVE_REMOTE" /YX /FD /GZ /c +# ADD BASE RSC /l 0x410 /d "_DEBUG" +# ADD RSC /l 0x410 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib ws2_32.lib Iphlpapi.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept + +!ENDIF + +# Begin Target + +# Name "iflist - Win32 Release" +# Name "iflist - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\iflist.c +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# Begin Source File + +SOURCE=..\..\include\pcap.h +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# End Group +# Begin Source File + +SOURCE=..\..\lib\Wpcap.lib +# End Source File +# End Target +# End Project diff --git a/libs/WinPcap-413-173-b4/Examples-pcap/iflist/iflist.dsw b/libs/WpdPack_4_1_2/Examples-pcap/iflist/iflist.dsw similarity index 94% rename from libs/WinPcap-413-173-b4/Examples-pcap/iflist/iflist.dsw rename to libs/WpdPack_4_1_2/Examples-pcap/iflist/iflist.dsw index 6bd686d0..1425db24 100644 --- a/libs/WinPcap-413-173-b4/Examples-pcap/iflist/iflist.dsw +++ b/libs/WpdPack_4_1_2/Examples-pcap/iflist/iflist.dsw @@ -1,29 +1,29 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "iflist"=.\iflist.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "iflist"=.\iflist.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/libs/WinPcap-413-173-b4/Examples-pcap/iflist/iflist.vcproj b/libs/WpdPack_4_1_2/Examples-pcap/iflist/iflist.vcproj similarity index 95% rename from libs/WinPcap-413-173-b4/Examples-pcap/iflist/iflist.vcproj rename to libs/WpdPack_4_1_2/Examples-pcap/iflist/iflist.vcproj index 779c0012..709a8047 100644 --- a/libs/WinPcap-413-173-b4/Examples-pcap/iflist/iflist.vcproj +++ b/libs/WpdPack_4_1_2/Examples-pcap/iflist/iflist.vcproj @@ -1,364 +1,364 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/libs/WinPcap-413-173-b4/Examples-pcap/pcap_filter/GNUmakefile b/libs/WpdPack_4_1_2/Examples-pcap/pcap_filter/GNUmakefile similarity index 94% rename from libs/WinPcap-413-173-b4/Examples-pcap/pcap_filter/GNUmakefile rename to libs/WpdPack_4_1_2/Examples-pcap/pcap_filter/GNUmakefile index ca84d01a..22523930 100644 --- a/libs/WinPcap-413-173-b4/Examples-pcap/pcap_filter/GNUmakefile +++ b/libs/WpdPack_4_1_2/Examples-pcap/pcap_filter/GNUmakefile @@ -1,17 +1,17 @@ -# Makefile for cygwin gcc -# Nate Lawson - -PCAP_PATH = ../../lib -CFLAGS = -g -O -mno-cygwin -I ../../include - -OBJS = pcap_filter.o -LIBS = -L ${PCAP_PATH} -lwpcap - -all: ${OBJS} - ${CC} ${CFLAGS} -o pf.exe ${OBJS} ${LIBS} - -clean: - rm -f ${OBJS} pf.exe - -.c.o: - ${CC} ${CFLAGS} -c -o $*.o $< +# Makefile for cygwin gcc +# Nate Lawson + +PCAP_PATH = ../../lib +CFLAGS = -g -O -mno-cygwin -I ../../include + +OBJS = pcap_filter.o +LIBS = -L ${PCAP_PATH} -lwpcap + +all: ${OBJS} + ${CC} ${CFLAGS} -o pf.exe ${OBJS} ${LIBS} + +clean: + rm -f ${OBJS} pf.exe + +.c.o: + ${CC} ${CFLAGS} -c -o $*.o $< diff --git a/libs/WpdPack_4_1_2/Examples-pcap/pcap_filter/Makefile.unix b/libs/WpdPack_4_1_2/Examples-pcap/pcap_filter/Makefile.unix new file mode 100644 index 00000000..f1997880 --- /dev/null +++ b/libs/WpdPack_4_1_2/Examples-pcap/pcap_filter/Makefile.unix @@ -0,0 +1,9 @@ + +CC = gcc +INCLDIR = -I /usr/src/sys +LIBS = -lpcap + +pktdump: pcap_filter.o + $(CC) $(INCLDIR) pcap_filter.o $(LIBS) -o pf + rm *.o + diff --git a/libs/WinPcap-413-173-b4/Examples-pcap/pcap_filter/pcap_filter.c b/libs/WpdPack_4_1_2/Examples-pcap/pcap_filter/pcap_filter.c similarity index 95% rename from libs/WinPcap-413-173-b4/Examples-pcap/pcap_filter/pcap_filter.c rename to libs/WpdPack_4_1_2/Examples-pcap/pcap_filter/pcap_filter.c index e910488e..d2f6e367 100644 --- a/libs/WinPcap-413-173-b4/Examples-pcap/pcap_filter/pcap_filter.c +++ b/libs/WpdPack_4_1_2/Examples-pcap/pcap_filter/pcap_filter.c @@ -1,179 +1,179 @@ -/* - * Copyright (c) 1999 - 2005 NetGroup, Politecnico di Torino (Italy) - * Copyright (c) 2005 - 2006 CACE Technologies, Davis (California) - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the Politecnico di Torino, CACE Technologies - * nor the names of its contributors may be used to endorse or promote - * products derived from this software without specific prior written - * permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ - - -#include -#include - -#include - -#define MAX_PRINT 80 -#define MAX_LINE 16 - - -void usage(); - - -int main(int argc, char **argv) -{ - pcap_t *fp; - char errbuf[PCAP_ERRBUF_SIZE]; - char *source = NULL; - char *ofilename = NULL; - char *filter = NULL; - int i; - pcap_dumper_t *dumpfile; - struct bpf_program fcode; - bpf_u_int32 NetMask; - int res; - struct pcap_pkthdr *header; - const u_char *pkt_data; - - if (argc == 1) - { - usage(); - return -1; - } - - /* Parse parameters */ - for(i=1;i < argc; i+= 2) - { - switch (argv[i] [1]) - { - case 's': - { - source=argv[i+1]; - }; - break; - - case 'o': - { - ofilename=argv[i+1]; - }; - break; - - case 'f': - { - filter=argv[i+1]; - }; - break; - } - } - - // open a capture from the network - if (source != NULL) - { - if ((fp = pcap_open_live(source, // name of the device - 65536, // portion of the packet to capture. - // 65536 grants that the whole packet will be captured on all the MACs. - 1, // promiscuous mode (nonzero means promiscuous) - 1000, // read timeout - errbuf // error buffer - )) == NULL) - { - fprintf(stderr,"\nUnable to open the adapter.\n"); - return -2; - } - } - else usage(); - - if (filter != NULL) - { - // We should loop through the adapters returned by the pcap_findalldevs_ex() - // in order to locate the correct one. - // - // Let's do things simpler: we suppose to be in a C class network ;-) - NetMask=0xffffff; - - //compile the filter - if(pcap_compile(fp, &fcode, filter, 1, NetMask) < 0) - { - fprintf(stderr,"\nError compiling filter: wrong syntax.\n"); - - pcap_close(fp); - return -3; - } - - //set the filter - if(pcap_setfilter(fp, &fcode)<0) - { - fprintf(stderr,"\nError setting the filter\n"); - - pcap_close(fp); - return -4; - } - - } - - //open the dump file - if (ofilename != NULL) - { - dumpfile= pcap_dump_open(fp, ofilename); - - if (dumpfile == NULL) - { - fprintf(stderr,"\nError opening output file\n"); - - pcap_close(fp); - return -5; - } - } - else usage(); - - //start the capture - while((res = pcap_next_ex( fp, &header, &pkt_data)) >= 0) - { - - if(res == 0) - /* Timeout elapsed */ - continue; - - //save the packet on the dump file - pcap_dump((unsigned char *) dumpfile, header, pkt_data); - - } - - pcap_close(fp); - pcap_dump_close(dumpfile); - - return 0; -} - - -void usage() -{ - - printf("\npf - Generic Packet Filter.\n"); - printf("\nUsage:\npf -s source -o output_file_name [-f filter_string]\n\n"); - exit(0); -} +/* + * Copyright (c) 1999 - 2005 NetGroup, Politecnico di Torino (Italy) + * Copyright (c) 2005 - 2006 CACE Technologies, Davis (California) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Politecnico di Torino, CACE Technologies + * nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written + * permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + + +#include +#include + +#include + +#define MAX_PRINT 80 +#define MAX_LINE 16 + + +void usage(); + + +int main(int argc, char **argv) +{ + pcap_t *fp; + char errbuf[PCAP_ERRBUF_SIZE]; + char *source = NULL; + char *ofilename = NULL; + char *filter = NULL; + int i; + pcap_dumper_t *dumpfile; + struct bpf_program fcode; + bpf_u_int32 NetMask; + int res; + struct pcap_pkthdr *header; + const u_char *pkt_data; + + if (argc == 1) + { + usage(); + return -1; + } + + /* Parse parameters */ + for(i=1;i < argc; i+= 2) + { + switch (argv[i] [1]) + { + case 's': + { + source=argv[i+1]; + }; + break; + + case 'o': + { + ofilename=argv[i+1]; + }; + break; + + case 'f': + { + filter=argv[i+1]; + }; + break; + } + } + + // open a capture from the network + if (source != NULL) + { + if ((fp = pcap_open_live(source, // name of the device + 65536, // portion of the packet to capture. + // 65536 grants that the whole packet will be captured on all the MACs. + 1, // promiscuous mode (nonzero means promiscuous) + 1000, // read timeout + errbuf // error buffer + )) == NULL) + { + fprintf(stderr,"\nUnable to open the adapter.\n"); + return -2; + } + } + else usage(); + + if (filter != NULL) + { + // We should loop through the adapters returned by the pcap_findalldevs_ex() + // in order to locate the correct one. + // + // Let's do things simpler: we suppose to be in a C class network ;-) + NetMask=0xffffff; + + //compile the filter + if(pcap_compile(fp, &fcode, filter, 1, NetMask) < 0) + { + fprintf(stderr,"\nError compiling filter: wrong syntax.\n"); + + pcap_close(fp); + return -3; + } + + //set the filter + if(pcap_setfilter(fp, &fcode)<0) + { + fprintf(stderr,"\nError setting the filter\n"); + + pcap_close(fp); + return -4; + } + + } + + //open the dump file + if (ofilename != NULL) + { + dumpfile= pcap_dump_open(fp, ofilename); + + if (dumpfile == NULL) + { + fprintf(stderr,"\nError opening output file\n"); + + pcap_close(fp); + return -5; + } + } + else usage(); + + //start the capture + while((res = pcap_next_ex( fp, &header, &pkt_data)) >= 0) + { + + if(res == 0) + /* Timeout elapsed */ + continue; + + //save the packet on the dump file + pcap_dump((unsigned char *) dumpfile, header, pkt_data); + + } + + pcap_close(fp); + pcap_dump_close(dumpfile); + + return 0; +} + + +void usage() +{ + + printf("\npf - Generic Packet Filter.\n"); + printf("\nUsage:\npf -s source -o output_file_name [-f filter_string]\n\n"); + exit(0); +} diff --git a/libs/WinPcap-413-173-b4/Examples-remote/pcap_filter/pcap_filter.dsp b/libs/WpdPack_4_1_2/Examples-pcap/pcap_filter/pcap_filter.dsp similarity index 97% rename from libs/WinPcap-413-173-b4/Examples-remote/pcap_filter/pcap_filter.dsp rename to libs/WpdPack_4_1_2/Examples-pcap/pcap_filter/pcap_filter.dsp index 5bd65b5b..c01d2e7e 100644 --- a/libs/WinPcap-413-173-b4/Examples-remote/pcap_filter/pcap_filter.dsp +++ b/libs/WpdPack_4_1_2/Examples-pcap/pcap_filter/pcap_filter.dsp @@ -1,110 +1,110 @@ -# Microsoft Developer Studio Project File - Name="pcap_filter" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=pcap_filter - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "pcap_filter.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "pcap_filter.mak" CFG="pcap_filter - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "pcap_filter - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "pcap_filter - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "pcap_filter - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "../" /I "../bpf/" /I "../lbl/" /I "../../Include/" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_UNICODE" /D "WPCAP" /D "HAVE_REMOTE" /YX /FD /c -# ADD BASE RSC /l 0x410 /d "NDEBUG" -# ADD RSC /l 0x410 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib /nologo /subsystem:console /machine:I386 /out:"Release/pf.exe" - -!ELSEIF "$(CFG)" == "pcap_filter - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../" /I "../bpf/" /I "../lbl/" /I "../../Include/" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_UNICODE" /D "WPCAP" /D "HAVE_REMOTE" /YX /FD /GZ /c -# ADD BASE RSC /l 0x410 /d "_DEBUG" -# ADD RSC /l 0x410 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib /nologo /subsystem:console /debug /machine:I386 /out:"Debug/pf.exe" /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "pcap_filter - Win32 Release" -# Name "pcap_filter - Win32 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\pcap_filter.c -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# Begin Source File - -SOURCE=..\..\include\pcap.h -# End Source File -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# Begin Source File - -SOURCE=..\..\lib\Wpcap.lib -# End Source File -# End Target -# End Project +# Microsoft Developer Studio Project File - Name="pcap_filter" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Console Application" 0x0103 + +CFG=pcap_filter - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "pcap_filter.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "pcap_filter.mak" CFG="pcap_filter - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "pcap_filter - Win32 Release" (based on "Win32 (x86) Console Application") +!MESSAGE "pcap_filter - Win32 Debug" (based on "Win32 (x86) Console Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "pcap_filter - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /I "../" /I "../bpf/" /I "../lbl/" /I "../../Include/" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_UNICODE" /D "WPCAP" /D "HAVE_REMOTE" /YX /FD /c +# ADD BASE RSC /l 0x410 /d "NDEBUG" +# ADD RSC /l 0x410 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib /nologo /subsystem:console /machine:I386 /out:"Release/pf.exe" + +!ELSEIF "$(CFG)" == "pcap_filter - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c +# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../" /I "../bpf/" /I "../lbl/" /I "../../Include/" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_UNICODE" /D "WPCAP" /D "HAVE_REMOTE" /YX /FD /GZ /c +# ADD BASE RSC /l 0x410 /d "_DEBUG" +# ADD RSC /l 0x410 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib /nologo /subsystem:console /debug /machine:I386 /out:"Debug/pf.exe" /pdbtype:sept + +!ENDIF + +# Begin Target + +# Name "pcap_filter - Win32 Release" +# Name "pcap_filter - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\pcap_filter.c +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# Begin Source File + +SOURCE=..\..\include\pcap.h +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# End Group +# Begin Source File + +SOURCE=..\..\lib\Wpcap.lib +# End Source File +# End Target +# End Project diff --git a/libs/WinPcap-413-173-b4/Examples-pcap/pcap_filter/pcap_filter.dsw b/libs/WpdPack_4_1_2/Examples-pcap/pcap_filter/pcap_filter.dsw similarity index 94% rename from libs/WinPcap-413-173-b4/Examples-pcap/pcap_filter/pcap_filter.dsw rename to libs/WpdPack_4_1_2/Examples-pcap/pcap_filter/pcap_filter.dsw index a9031834..1d39119b 100644 --- a/libs/WinPcap-413-173-b4/Examples-pcap/pcap_filter/pcap_filter.dsw +++ b/libs/WpdPack_4_1_2/Examples-pcap/pcap_filter/pcap_filter.dsw @@ -1,29 +1,29 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "pcap_filter"=.\pcap_filter.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "pcap_filter"=.\pcap_filter.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/libs/WinPcap-413-173-b4/Examples-pcap/pcap_filter/pcap_filter.vcproj b/libs/WpdPack_4_1_2/Examples-pcap/pcap_filter/pcap_filter.vcproj similarity index 95% rename from libs/WinPcap-413-173-b4/Examples-pcap/pcap_filter/pcap_filter.vcproj rename to libs/WpdPack_4_1_2/Examples-pcap/pcap_filter/pcap_filter.vcproj index ec5450df..e6fe721c 100644 --- a/libs/WinPcap-413-173-b4/Examples-pcap/pcap_filter/pcap_filter.vcproj +++ b/libs/WpdPack_4_1_2/Examples-pcap/pcap_filter/pcap_filter.vcproj @@ -1,364 +1,364 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/libs/WinPcap-413-173-b4/Examples-pcap/pktdump_ex/GNUmakefile b/libs/WpdPack_4_1_2/Examples-pcap/pktdump_ex/GNUmakefile similarity index 94% rename from libs/WinPcap-413-173-b4/Examples-pcap/pktdump_ex/GNUmakefile rename to libs/WpdPack_4_1_2/Examples-pcap/pktdump_ex/GNUmakefile index f649ce3c..db276c59 100644 --- a/libs/WinPcap-413-173-b4/Examples-pcap/pktdump_ex/GNUmakefile +++ b/libs/WpdPack_4_1_2/Examples-pcap/pktdump_ex/GNUmakefile @@ -1,14 +1,14 @@ -PCAP_PATH = ../../lib -CFLAGS = -g -O -mno-cygwin -I ../../include - -OBJS = pktdump_ex.o -LIBS = -L ${PCAP_PATH} -lwpcap - -all: ${OBJS} - ${CC} ${CFLAGS} -o pktdump_ex.exe ${OBJS} ${LIBS} - -clean: - rm -f ${OBJS} pktdump_ex.exe - -.c.o: - ${CC} ${CFLAGS} -c -o $*.o $< +PCAP_PATH = ../../lib +CFLAGS = -g -O -mno-cygwin -I ../../include + +OBJS = pktdump_ex.o +LIBS = -L ${PCAP_PATH} -lwpcap + +all: ${OBJS} + ${CC} ${CFLAGS} -o pktdump_ex.exe ${OBJS} ${LIBS} + +clean: + rm -f ${OBJS} pktdump_ex.exe + +.c.o: + ${CC} ${CFLAGS} -c -o $*.o $< diff --git a/libs/WinPcap-413-173-b4/Examples-pcap/pktdump_ex/pktdump_ex.c b/libs/WpdPack_4_1_2/Examples-pcap/pktdump_ex/pktdump_ex.c similarity index 96% rename from libs/WinPcap-413-173-b4/Examples-pcap/pktdump_ex/pktdump_ex.c rename to libs/WpdPack_4_1_2/Examples-pcap/pktdump_ex/pktdump_ex.c index 6ff42cac..383eaa97 100644 --- a/libs/WinPcap-413-173-b4/Examples-pcap/pktdump_ex/pktdump_ex.c +++ b/libs/WpdPack_4_1_2/Examples-pcap/pktdump_ex/pktdump_ex.c @@ -1,166 +1,166 @@ -/* - * Copyright (c) 1999 - 2005 NetGroup, Politecnico di Torino (Italy) - * Copyright (c) 2005 - 2006 CACE Technologies, Davis (California) - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the Politecnico di Torino, CACE Technologies - * nor the names of its contributors may be used to endorse or promote - * products derived from this software without specific prior written - * permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ - -#ifdef _MSC_VER -/* - * we do not want the warnings about the old deprecated and unsecure CRT functions - * since these examples can be compiled under *nix as well - */ -#define _CRT_SECURE_NO_WARNINGS -#endif - -#include -#include - -#include - -#define LINE_LEN 16 - - -int main(int argc, char **argv) -{ - pcap_if_t *alldevs, *d; - pcap_t *fp; - u_int inum, i=0; - char errbuf[PCAP_ERRBUF_SIZE]; - int res; - struct pcap_pkthdr *header; - const u_char *pkt_data; - - printf("pktdump_ex: prints the packets of the network using WinPcap.\n"); - printf(" Usage: pktdump_ex [-s source]\n\n" - " Examples:\n" - " pktdump_ex -s file.acp\n" - " pktdump_ex -s \\Device\\NPF_{C8736017-F3C3-4373-94AC-9A34B7DAD998}\n\n"); - - if(argc < 3) - { - printf("\nNo adapter selected: printing the device list:\n"); - /* The user didn't provide a packet source: Retrieve the local device list */ - if(pcap_findalldevs(&alldevs, errbuf) == -1) - { - fprintf(stderr,"Error in pcap_findalldevs_ex: %s\n", errbuf); - exit(1); - } - - /* Print the list */ - for(d=alldevs; d; d=d->next) - { - printf("%d. %s\n ", ++i, d->name); - - if (d->description) - printf(" (%s)\n", d->description); - else - printf(" (No description available)\n"); - } - - if (i==0) - { - printf("\nNo interfaces found! Make sure WinPcap is installed.\n"); - return -1; - } - - printf("Enter the interface number (1-%d):",i); - scanf("%d", &inum); - - if (inum < 1 || inum > i) - { - printf("\nInterface number out of range.\n"); - - /* Free the device list */ - pcap_freealldevs(alldevs); - return -1; - } - - /* Jump to the selected adapter */ - for (d=alldevs, i=0; i< inum-1 ;d=d->next, i++); - - /* Open the adapter */ - if ((fp = pcap_open_live(d->name, // name of the device - 65536, // portion of the packet to capture. - // 65536 grants that the whole packet will be captured on all the MACs. - 1, // promiscuous mode (nonzero means promiscuous) - 1000, // read timeout - errbuf // error buffer - )) == NULL) - { - fprintf(stderr,"\nError opening adapter\n"); - return -1; - } - } - else - { - /* Do not check for the switch type ('-s') */ - if ((fp = pcap_open_live(argv[2], // name of the device - 65536, // portion of the packet to capture. - // 65536 grants that the whole packet will be captured on all the MACs. - 1, // promiscuous mode (nonzero means promiscuous) - 1000, // read timeout - errbuf // error buffer - )) == NULL) - { - fprintf(stderr,"\nError opening adapter\n"); - return -1; - } - } - - /* Read the packets */ - while((res = pcap_next_ex( fp, &header, &pkt_data)) >= 0) - { - - if(res == 0) - /* Timeout elapsed */ - continue; - - /* print pkt timestamp and pkt len */ - printf("%ld:%ld (%ld)\n", header->ts.tv_sec, header->ts.tv_usec, header->len); - - /* Print the packet */ - for (i=1; (i < header->caplen + 1 ) ; i++) - { - printf("%.2x ", pkt_data[i-1]); - if ( (i % LINE_LEN) == 0) printf("\n"); - } - - printf("\n\n"); - } - - if(res == -1) - { - printf("Error reading the packets: %s\n", pcap_geterr(fp)); - return -1; - } - - pcap_close(fp); - return 0; -} +/* + * Copyright (c) 1999 - 2005 NetGroup, Politecnico di Torino (Italy) + * Copyright (c) 2005 - 2006 CACE Technologies, Davis (California) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Politecnico di Torino, CACE Technologies + * nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written + * permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#ifdef _MSC_VER +/* + * we do not want the warnings about the old deprecated and unsecure CRT functions + * since these examples can be compiled under *nix as well + */ +#define _CRT_SECURE_NO_WARNINGS +#endif + +#include +#include + +#include + +#define LINE_LEN 16 + + +int main(int argc, char **argv) +{ + pcap_if_t *alldevs, *d; + pcap_t *fp; + u_int inum, i=0; + char errbuf[PCAP_ERRBUF_SIZE]; + int res; + struct pcap_pkthdr *header; + const u_char *pkt_data; + + printf("pktdump_ex: prints the packets of the network using WinPcap.\n"); + printf(" Usage: pktdump_ex [-s source]\n\n" + " Examples:\n" + " pktdump_ex -s file.acp\n" + " pktdump_ex -s \\Device\\NPF_{C8736017-F3C3-4373-94AC-9A34B7DAD998}\n\n"); + + if(argc < 3) + { + printf("\nNo adapter selected: printing the device list:\n"); + /* The user didn't provide a packet source: Retrieve the local device list */ + if(pcap_findalldevs(&alldevs, errbuf) == -1) + { + fprintf(stderr,"Error in pcap_findalldevs_ex: %s\n", errbuf); + exit(1); + } + + /* Print the list */ + for(d=alldevs; d; d=d->next) + { + printf("%d. %s\n ", ++i, d->name); + + if (d->description) + printf(" (%s)\n", d->description); + else + printf(" (No description available)\n"); + } + + if (i==0) + { + printf("\nNo interfaces found! Make sure WinPcap is installed.\n"); + return -1; + } + + printf("Enter the interface number (1-%d):",i); + scanf("%d", &inum); + + if (inum < 1 || inum > i) + { + printf("\nInterface number out of range.\n"); + + /* Free the device list */ + pcap_freealldevs(alldevs); + return -1; + } + + /* Jump to the selected adapter */ + for (d=alldevs, i=0; i< inum-1 ;d=d->next, i++); + + /* Open the adapter */ + if ((fp = pcap_open_live(d->name, // name of the device + 65536, // portion of the packet to capture. + // 65536 grants that the whole packet will be captured on all the MACs. + 1, // promiscuous mode (nonzero means promiscuous) + 1000, // read timeout + errbuf // error buffer + )) == NULL) + { + fprintf(stderr,"\nError opening adapter\n"); + return -1; + } + } + else + { + /* Do not check for the switch type ('-s') */ + if ((fp = pcap_open_live(argv[2], // name of the device + 65536, // portion of the packet to capture. + // 65536 grants that the whole packet will be captured on all the MACs. + 1, // promiscuous mode (nonzero means promiscuous) + 1000, // read timeout + errbuf // error buffer + )) == NULL) + { + fprintf(stderr,"\nError opening adapter\n"); + return -1; + } + } + + /* Read the packets */ + while((res = pcap_next_ex( fp, &header, &pkt_data)) >= 0) + { + + if(res == 0) + /* Timeout elapsed */ + continue; + + /* print pkt timestamp and pkt len */ + printf("%ld:%ld (%ld)\n", header->ts.tv_sec, header->ts.tv_usec, header->len); + + /* Print the packet */ + for (i=1; (i < header->caplen + 1 ) ; i++) + { + printf("%.2x ", pkt_data[i-1]); + if ( (i % LINE_LEN) == 0) printf("\n"); + } + + printf("\n\n"); + } + + if(res == -1) + { + printf("Error reading the packets: %s\n", pcap_geterr(fp)); + return -1; + } + + pcap_close(fp); + return 0; +} diff --git a/libs/WinPcap-413-173-b4/Examples-pcap/pktdump_ex/pktdump_ex.dsp b/libs/WpdPack_4_1_2/Examples-pcap/pktdump_ex/pktdump_ex.dsp similarity index 97% rename from libs/WinPcap-413-173-b4/Examples-pcap/pktdump_ex/pktdump_ex.dsp rename to libs/WpdPack_4_1_2/Examples-pcap/pktdump_ex/pktdump_ex.dsp index 85c062da..a9800e6a 100644 --- a/libs/WinPcap-413-173-b4/Examples-pcap/pktdump_ex/pktdump_ex.dsp +++ b/libs/WpdPack_4_1_2/Examples-pcap/pktdump_ex/pktdump_ex.dsp @@ -1,110 +1,110 @@ -# Microsoft Developer Studio Project File - Name="pktdump_ex" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=pktdump_ex - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "pktdump_ex.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "pktdump_ex.mak" CFG="pktdump_ex - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "pktdump_ex - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "pktdump_ex - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "pktdump_ex - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "../" /I "../bpf/" /I "../lbl/" /I "../../Include/" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_UNICODE" /D "WPCAP" /D "HAVE_REMOTE" /YX /FD /c -# ADD BASE RSC /l 0x410 /d "NDEBUG" -# ADD RSC /l 0x410 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "pktdump_ex - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../" /I "../bpf/" /I "../lbl/" /I "../../Include/" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_UNICODE" /D "WPCAP" /D "HAVE_REMOTE" /YX /FD /GZ /c -# ADD BASE RSC /l 0x410 /d "_DEBUG" -# ADD RSC /l 0x410 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "pktdump_ex - Win32 Release" -# Name "pktdump_ex - Win32 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\pktdump_ex.c -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# Begin Source File - -SOURCE=..\..\include\pcap.h -# End Source File -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# Begin Source File - -SOURCE=..\..\lib\Wpcap.lib -# End Source File -# End Target -# End Project +# Microsoft Developer Studio Project File - Name="pktdump_ex" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Console Application" 0x0103 + +CFG=pktdump_ex - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "pktdump_ex.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "pktdump_ex.mak" CFG="pktdump_ex - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "pktdump_ex - Win32 Release" (based on "Win32 (x86) Console Application") +!MESSAGE "pktdump_ex - Win32 Debug" (based on "Win32 (x86) Console Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "pktdump_ex - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /I "../" /I "../bpf/" /I "../lbl/" /I "../../Include/" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_UNICODE" /D "WPCAP" /D "HAVE_REMOTE" /YX /FD /c +# ADD BASE RSC /l 0x410 /d "NDEBUG" +# ADD RSC /l 0x410 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib /nologo /subsystem:console /machine:I386 + +!ELSEIF "$(CFG)" == "pktdump_ex - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c +# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../" /I "../bpf/" /I "../lbl/" /I "../../Include/" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_UNICODE" /D "WPCAP" /D "HAVE_REMOTE" /YX /FD /GZ /c +# ADD BASE RSC /l 0x410 /d "_DEBUG" +# ADD RSC /l 0x410 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept + +!ENDIF + +# Begin Target + +# Name "pktdump_ex - Win32 Release" +# Name "pktdump_ex - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\pktdump_ex.c +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# Begin Source File + +SOURCE=..\..\include\pcap.h +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# End Group +# Begin Source File + +SOURCE=..\..\lib\Wpcap.lib +# End Source File +# End Target +# End Project diff --git a/libs/WinPcap-413-173-b4/Examples-remote/pktdump_ex/pktdump_ex.dsw b/libs/WpdPack_4_1_2/Examples-pcap/pktdump_ex/pktdump_ex.dsw similarity index 94% rename from libs/WinPcap-413-173-b4/Examples-remote/pktdump_ex/pktdump_ex.dsw rename to libs/WpdPack_4_1_2/Examples-pcap/pktdump_ex/pktdump_ex.dsw index b0f6812f..ec247333 100644 --- a/libs/WinPcap-413-173-b4/Examples-remote/pktdump_ex/pktdump_ex.dsw +++ b/libs/WpdPack_4_1_2/Examples-pcap/pktdump_ex/pktdump_ex.dsw @@ -1,29 +1,29 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "pktdump_ex"=.\pktdump_ex.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "pktdump_ex"=.\pktdump_ex.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/libs/WinPcap-413-173-b4/Examples-pcap/pktdump_ex/pktdump_ex.vcproj b/libs/WpdPack_4_1_2/Examples-pcap/pktdump_ex/pktdump_ex.vcproj similarity index 95% rename from libs/WinPcap-413-173-b4/Examples-pcap/pktdump_ex/pktdump_ex.vcproj rename to libs/WpdPack_4_1_2/Examples-pcap/pktdump_ex/pktdump_ex.vcproj index 74b98e56..f477c047 100644 --- a/libs/WinPcap-413-173-b4/Examples-pcap/pktdump_ex/pktdump_ex.vcproj +++ b/libs/WpdPack_4_1_2/Examples-pcap/pktdump_ex/pktdump_ex.vcproj @@ -1,364 +1,364 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/libs/WinPcap-413-173-b4/Examples-pcap/readfile/GNUmakefile b/libs/WpdPack_4_1_2/Examples-pcap/readfile/GNUmakefile similarity index 94% rename from libs/WinPcap-413-173-b4/Examples-pcap/readfile/GNUmakefile rename to libs/WpdPack_4_1_2/Examples-pcap/readfile/GNUmakefile index fe4bae3a..967bc186 100644 --- a/libs/WinPcap-413-173-b4/Examples-pcap/readfile/GNUmakefile +++ b/libs/WpdPack_4_1_2/Examples-pcap/readfile/GNUmakefile @@ -1,17 +1,17 @@ -# Makefile for cygwin gcc -# Nate Lawson - -PCAP_PATH = ../../lib -CFLAGS = -g -O -mno-cygwin -I ../../include - -OBJS = readfile.o -LIBS = -L ${PCAP_PATH} -lwpcap - -all: ${OBJS} - ${CC} ${CFLAGS} -o readfile.exe ${OBJS} ${LIBS} - -clean: - rm -f ${OBJS} readfile.exe - -.c.o: - ${CC} ${CFLAGS} -c -o $*.o $< +# Makefile for cygwin gcc +# Nate Lawson + +PCAP_PATH = ../../lib +CFLAGS = -g -O -mno-cygwin -I ../../include + +OBJS = readfile.o +LIBS = -L ${PCAP_PATH} -lwpcap + +all: ${OBJS} + ${CC} ${CFLAGS} -o readfile.exe ${OBJS} ${LIBS} + +clean: + rm -f ${OBJS} readfile.exe + +.c.o: + ${CC} ${CFLAGS} -c -o $*.o $< diff --git a/libs/WinPcap-413-173-b4/Examples-pcap/readfile/readfile.c b/libs/WpdPack_4_1_2/Examples-pcap/readfile/readfile.c similarity index 94% rename from libs/WinPcap-413-173-b4/Examples-pcap/readfile/readfile.c rename to libs/WpdPack_4_1_2/Examples-pcap/readfile/readfile.c index 187634f0..c62dc463 100644 --- a/libs/WinPcap-413-173-b4/Examples-pcap/readfile/readfile.c +++ b/libs/WpdPack_4_1_2/Examples-pcap/readfile/readfile.c @@ -1,61 +1,61 @@ -#include -#include - -#define LINE_LEN 16 - -void dispatcher_handler(u_char *, const struct pcap_pkthdr *, const u_char *); - -int main(int argc, char **argv) -{ - pcap_t *fp; - char errbuf[PCAP_ERRBUF_SIZE]; - - if(argc != 2) - { - printf("usage: %s filename", argv[0]); - return -1; - - } - - /* Open the capture file */ - if ((fp = pcap_open_offline(argv[1], // name of the device - errbuf // error buffer - )) == NULL) - { - fprintf(stderr,"\nUnable to open the file %s.\n", argv[1]); - return -1; - } - - /* read and dispatch packets until EOF is reached */ - pcap_loop(fp, 0, dispatcher_handler, NULL); - - pcap_close(fp); - return 0; -} - - - -void dispatcher_handler(u_char *temp1, - const struct pcap_pkthdr *header, - const u_char *pkt_data) -{ - u_int i=0; - - /* - * unused variable - */ - (VOID*)temp1; - - /* print pkt timestamp and pkt len */ - printf("%ld:%ld (%ld)\n", header->ts.tv_sec, header->ts.tv_usec, header->len); - - /* Print the packet */ - for (i=1; (i < header->caplen + 1 ) ; i++) - { - printf("%.2x ", pkt_data[i-1]); - if ( (i % LINE_LEN) == 0) printf("\n"); - } - - printf("\n\n"); - -} +#include +#include + +#define LINE_LEN 16 + +void dispatcher_handler(u_char *, const struct pcap_pkthdr *, const u_char *); + +int main(int argc, char **argv) +{ + pcap_t *fp; + char errbuf[PCAP_ERRBUF_SIZE]; + + if(argc != 2) + { + printf("usage: %s filename", argv[0]); + return -1; + + } + + /* Open the capture file */ + if ((fp = pcap_open_offline(argv[1], // name of the device + errbuf // error buffer + )) == NULL) + { + fprintf(stderr,"\nUnable to open the file %s.\n", argv[1]); + return -1; + } + + /* read and dispatch packets until EOF is reached */ + pcap_loop(fp, 0, dispatcher_handler, NULL); + + pcap_close(fp); + return 0; +} + + + +void dispatcher_handler(u_char *temp1, + const struct pcap_pkthdr *header, + const u_char *pkt_data) +{ + u_int i=0; + + /* + * unused variable + */ + (VOID*)temp1; + + /* print pkt timestamp and pkt len */ + printf("%ld:%ld (%ld)\n", header->ts.tv_sec, header->ts.tv_usec, header->len); + + /* Print the packet */ + for (i=1; (i < header->caplen + 1 ) ; i++) + { + printf("%.2x ", pkt_data[i-1]); + if ( (i % LINE_LEN) == 0) printf("\n"); + } + + printf("\n\n"); + +} diff --git a/libs/WinPcap-413-173-b4/Examples-remote/misc/readfile.dsp b/libs/WpdPack_4_1_2/Examples-pcap/readfile/readfile.dsp similarity index 97% rename from libs/WinPcap-413-173-b4/Examples-remote/misc/readfile.dsp rename to libs/WpdPack_4_1_2/Examples-pcap/readfile/readfile.dsp index 88972bb5..5d45bde1 100644 --- a/libs/WinPcap-413-173-b4/Examples-remote/misc/readfile.dsp +++ b/libs/WpdPack_4_1_2/Examples-pcap/readfile/readfile.dsp @@ -1,110 +1,110 @@ -# Microsoft Developer Studio Project File - Name="readfile" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=readfile - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "readfile.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "readfile.mak" CFG="readfile - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "readfile - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "readfile - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "readfile - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "../" /I "../bpf/" /I "../lbl/" /I "../../Include/" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_UNICODE" /D "WPCAP" /D "HAVE_REMOTE" /YX /FD /c -# ADD BASE RSC /l 0x410 /d "NDEBUG" -# ADD RSC /l 0x410 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib ws2_32.lib Iphlpapi.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "readfile - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../" /I "../bpf/" /I "../lbl/" /I "../../Include/" /I "D:/Program Files/Microsoft Platform SDK/include" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_UNICODE" /D "WPCAP" /D "HAVE_REMOTE" /YX /FD /GZ /c -# ADD BASE RSC /l 0x410 /d "_DEBUG" -# ADD RSC /l 0x410 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib ws2_32.lib Iphlpapi.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "readfile - Win32 Release" -# Name "readfile - Win32 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\readfile.c -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# Begin Source File - -SOURCE=..\..\include\pcap.h -# End Source File -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# Begin Source File - -SOURCE=..\..\lib\Wpcap.lib -# End Source File -# End Target -# End Project +# Microsoft Developer Studio Project File - Name="readfile" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Console Application" 0x0103 + +CFG=readfile - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "readfile.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "readfile.mak" CFG="readfile - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "readfile - Win32 Release" (based on "Win32 (x86) Console Application") +!MESSAGE "readfile - Win32 Debug" (based on "Win32 (x86) Console Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "readfile - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /I "../" /I "../bpf/" /I "../lbl/" /I "../../Include/" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_UNICODE" /D "WPCAP" /D "HAVE_REMOTE" /YX /FD /c +# ADD BASE RSC /l 0x410 /d "NDEBUG" +# ADD RSC /l 0x410 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib ws2_32.lib Iphlpapi.lib /nologo /subsystem:console /machine:I386 + +!ELSEIF "$(CFG)" == "readfile - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c +# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../" /I "../bpf/" /I "../lbl/" /I "../../Include/" /I "D:/Program Files/Microsoft Platform SDK/include" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_UNICODE" /D "WPCAP" /D "HAVE_REMOTE" /YX /FD /GZ /c +# ADD BASE RSC /l 0x410 /d "_DEBUG" +# ADD RSC /l 0x410 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib ws2_32.lib Iphlpapi.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept + +!ENDIF + +# Begin Target + +# Name "readfile - Win32 Release" +# Name "readfile - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\readfile.c +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# Begin Source File + +SOURCE=..\..\include\pcap.h +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# End Group +# Begin Source File + +SOURCE=..\..\lib\Wpcap.lib +# End Source File +# End Target +# End Project diff --git a/libs/WinPcap-413-173-b4/Examples-pcap/readfile/readfile.dsw b/libs/WpdPack_4_1_2/Examples-pcap/readfile/readfile.dsw similarity index 94% rename from libs/WinPcap-413-173-b4/Examples-pcap/readfile/readfile.dsw rename to libs/WpdPack_4_1_2/Examples-pcap/readfile/readfile.dsw index f971e0b6..7565dbde 100644 --- a/libs/WinPcap-413-173-b4/Examples-pcap/readfile/readfile.dsw +++ b/libs/WpdPack_4_1_2/Examples-pcap/readfile/readfile.dsw @@ -1,29 +1,29 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "readfile"=.\readfile.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "readfile"=.\readfile.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/libs/WinPcap-413-173-b4/Examples-pcap/readfile/readfile.vcproj b/libs/WpdPack_4_1_2/Examples-pcap/readfile/readfile.vcproj similarity index 95% rename from libs/WinPcap-413-173-b4/Examples-pcap/readfile/readfile.vcproj rename to libs/WpdPack_4_1_2/Examples-pcap/readfile/readfile.vcproj index 46e9df92..20b30c3f 100644 --- a/libs/WinPcap-413-173-b4/Examples-pcap/readfile/readfile.vcproj +++ b/libs/WpdPack_4_1_2/Examples-pcap/readfile/readfile.vcproj @@ -1,364 +1,364 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/libs/WinPcap-413-173-b4/Examples-pcap/readfile_ex/GNUmakefile b/libs/WpdPack_4_1_2/Examples-pcap/readfile_ex/GNUmakefile similarity index 95% rename from libs/WinPcap-413-173-b4/Examples-pcap/readfile_ex/GNUmakefile rename to libs/WpdPack_4_1_2/Examples-pcap/readfile_ex/GNUmakefile index 34087211..3eaba961 100644 --- a/libs/WinPcap-413-173-b4/Examples-pcap/readfile_ex/GNUmakefile +++ b/libs/WpdPack_4_1_2/Examples-pcap/readfile_ex/GNUmakefile @@ -1,17 +1,17 @@ -# Makefile for cygwin gcc -# Nate Lawson - -PCAP_PATH = ../../lib -CFLAGS = -g -O -mno-cygwin -I ../../include - -OBJS = readfile_ex.o -LIBS = -L ${PCAP_PATH} -lwpcap - -all: ${OBJS} - ${CC} ${CFLAGS} -o readfile_ex.exe ${OBJS} ${LIBS} - -clean: - rm -f ${OBJS} readfile_ex.exe - -.c.o: - ${CC} ${CFLAGS} -c -o $*.o $< +# Makefile for cygwin gcc +# Nate Lawson + +PCAP_PATH = ../../lib +CFLAGS = -g -O -mno-cygwin -I ../../include + +OBJS = readfile_ex.o +LIBS = -L ${PCAP_PATH} -lwpcap + +all: ${OBJS} + ${CC} ${CFLAGS} -o readfile_ex.exe ${OBJS} ${LIBS} + +clean: + rm -f ${OBJS} readfile_ex.exe + +.c.o: + ${CC} ${CFLAGS} -c -o $*.o $< diff --git a/libs/WinPcap-413-173-b4/Examples-pcap/readfile_ex/readfile_ex.c b/libs/WpdPack_4_1_2/Examples-pcap/readfile_ex/readfile_ex.c similarity index 94% rename from libs/WinPcap-413-173-b4/Examples-pcap/readfile_ex/readfile_ex.c rename to libs/WpdPack_4_1_2/Examples-pcap/readfile_ex/readfile_ex.c index 2324c065..9b6e9ed2 100644 --- a/libs/WinPcap-413-173-b4/Examples-pcap/readfile_ex/readfile_ex.c +++ b/libs/WpdPack_4_1_2/Examples-pcap/readfile_ex/readfile_ex.c @@ -1,56 +1,56 @@ -#include -#include - -#define LINE_LEN 16 - -int main(int argc, char **argv) -{ - pcap_t *fp; - char errbuf[PCAP_ERRBUF_SIZE]; - struct pcap_pkthdr *header; - const u_char *pkt_data; - u_int i=0; - int res; - - if(argc != 2) - { - printf("usage: %s filename", argv[0]); - return -1; - - } - - /* Open the capture file */ - if ((fp = pcap_open_offline(argv[1], // name of the device - errbuf // error buffer - )) == NULL) - { - fprintf(stderr,"\nUnable to open the file %s.\n", argv[1]); - return -1; - } - - /* Retrieve the packets from the file */ - while((res = pcap_next_ex(fp, &header, &pkt_data)) >= 0) - { - /* print pkt timestamp and pkt len */ - printf("%ld:%ld (%ld)\n", header->ts.tv_sec, header->ts.tv_usec, header->len); - - /* Print the packet */ - for (i=1; (i < header->caplen + 1 ) ; i++) - { - printf("%.2x ", pkt_data[i-1]); - if ( (i % LINE_LEN) == 0) printf("\n"); - } - - printf("\n\n"); - } - - - if (res == -1) - { - printf("Error reading the packets: %s\n", pcap_geterr(fp)); - } - - pcap_close(fp); - return 0; -} - +#include +#include + +#define LINE_LEN 16 + +int main(int argc, char **argv) +{ + pcap_t *fp; + char errbuf[PCAP_ERRBUF_SIZE]; + struct pcap_pkthdr *header; + const u_char *pkt_data; + u_int i=0; + int res; + + if(argc != 2) + { + printf("usage: %s filename", argv[0]); + return -1; + + } + + /* Open the capture file */ + if ((fp = pcap_open_offline(argv[1], // name of the device + errbuf // error buffer + )) == NULL) + { + fprintf(stderr,"\nUnable to open the file %s.\n", argv[1]); + return -1; + } + + /* Retrieve the packets from the file */ + while((res = pcap_next_ex(fp, &header, &pkt_data)) >= 0) + { + /* print pkt timestamp and pkt len */ + printf("%ld:%ld (%ld)\n", header->ts.tv_sec, header->ts.tv_usec, header->len); + + /* Print the packet */ + for (i=1; (i < header->caplen + 1 ) ; i++) + { + printf("%.2x ", pkt_data[i-1]); + if ( (i % LINE_LEN) == 0) printf("\n"); + } + + printf("\n\n"); + } + + + if (res == -1) + { + printf("Error reading the packets: %s\n", pcap_geterr(fp)); + } + + pcap_close(fp); + return 0; +} + diff --git a/libs/WinPcap-413-173-b4/Examples-remote/misc/readfile_ex.dsp b/libs/WpdPack_4_1_2/Examples-pcap/readfile_ex/readfile_ex.dsp similarity index 97% rename from libs/WinPcap-413-173-b4/Examples-remote/misc/readfile_ex.dsp rename to libs/WpdPack_4_1_2/Examples-pcap/readfile_ex/readfile_ex.dsp index 2c1b4889..07dcf9ff 100644 --- a/libs/WinPcap-413-173-b4/Examples-remote/misc/readfile_ex.dsp +++ b/libs/WpdPack_4_1_2/Examples-pcap/readfile_ex/readfile_ex.dsp @@ -1,110 +1,110 @@ -# Microsoft Developer Studio Project File - Name="readfile_ex" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=readfile_ex - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "readfile_ex.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "readfile_ex.mak" CFG="readfile_ex - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "readfile_ex - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "readfile_ex - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "readfile_ex - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "../" /I "../bpf/" /I "../lbl/" /I "../../Include/" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_UNICODE" /D "WPCAP" /D "HAVE_REMOTE" /YX /FD /c -# ADD BASE RSC /l 0x410 /d "NDEBUG" -# ADD RSC /l 0x410 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib ws2_32.lib Iphlpapi.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "readfile_ex - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../" /I "../bpf/" /I "../lbl/" /I "../../Include/" /I "D:/Program Files/Microsoft Platform SDK/include" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_UNICODE" /D "WPCAP" /D "HAVE_REMOTE" /YX /FD /GZ /c -# ADD BASE RSC /l 0x410 /d "_DEBUG" -# ADD RSC /l 0x410 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib ws2_32.lib Iphlpapi.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "readfile_ex - Win32 Release" -# Name "readfile_ex - Win32 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\readfile_ex.c -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# Begin Source File - -SOURCE=..\..\include\pcap.h -# End Source File -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# Begin Source File - -SOURCE=..\..\lib\Wpcap.lib -# End Source File -# End Target -# End Project +# Microsoft Developer Studio Project File - Name="readfile_ex" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Console Application" 0x0103 + +CFG=readfile_ex - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "readfile_ex.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "readfile_ex.mak" CFG="readfile_ex - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "readfile_ex - Win32 Release" (based on "Win32 (x86) Console Application") +!MESSAGE "readfile_ex - Win32 Debug" (based on "Win32 (x86) Console Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "readfile_ex - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /I "../" /I "../bpf/" /I "../lbl/" /I "../../Include/" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_UNICODE" /D "WPCAP" /D "HAVE_REMOTE" /YX /FD /c +# ADD BASE RSC /l 0x410 /d "NDEBUG" +# ADD RSC /l 0x410 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib ws2_32.lib Iphlpapi.lib /nologo /subsystem:console /machine:I386 + +!ELSEIF "$(CFG)" == "readfile_ex - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c +# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../" /I "../bpf/" /I "../lbl/" /I "../../Include/" /I "D:/Program Files/Microsoft Platform SDK/include" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_UNICODE" /D "WPCAP" /D "HAVE_REMOTE" /YX /FD /GZ /c +# ADD BASE RSC /l 0x410 /d "_DEBUG" +# ADD RSC /l 0x410 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib ws2_32.lib Iphlpapi.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept + +!ENDIF + +# Begin Target + +# Name "readfile_ex - Win32 Release" +# Name "readfile_ex - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\readfile_ex.c +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# Begin Source File + +SOURCE=..\..\include\pcap.h +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# End Group +# Begin Source File + +SOURCE=..\..\lib\Wpcap.lib +# End Source File +# End Target +# End Project diff --git a/libs/WinPcap-413-173-b4/Examples-pcap/readfile_ex/readfile_ex.dsw b/libs/WpdPack_4_1_2/Examples-pcap/readfile_ex/readfile_ex.dsw similarity index 94% rename from libs/WinPcap-413-173-b4/Examples-pcap/readfile_ex/readfile_ex.dsw rename to libs/WpdPack_4_1_2/Examples-pcap/readfile_ex/readfile_ex.dsw index 2713b365..8e4c3065 100644 --- a/libs/WinPcap-413-173-b4/Examples-pcap/readfile_ex/readfile_ex.dsw +++ b/libs/WpdPack_4_1_2/Examples-pcap/readfile_ex/readfile_ex.dsw @@ -1,29 +1,29 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "readfile_ex"=.\readfile_ex.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "readfile_ex"=.\readfile_ex.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/libs/WinPcap-413-173-b4/Examples-pcap/readfile_ex/readfile_ex.vcproj b/libs/WpdPack_4_1_2/Examples-pcap/readfile_ex/readfile_ex.vcproj similarity index 95% rename from libs/WinPcap-413-173-b4/Examples-pcap/readfile_ex/readfile_ex.vcproj rename to libs/WpdPack_4_1_2/Examples-pcap/readfile_ex/readfile_ex.vcproj index a75e0dd9..d7c16b41 100644 --- a/libs/WinPcap-413-173-b4/Examples-pcap/readfile_ex/readfile_ex.vcproj +++ b/libs/WpdPack_4_1_2/Examples-pcap/readfile_ex/readfile_ex.vcproj @@ -1,364 +1,364 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/libs/WinPcap-413-173-b4/Examples-pcap/savedump/GNUmakefile b/libs/WpdPack_4_1_2/Examples-pcap/savedump/GNUmakefile similarity index 94% rename from libs/WinPcap-413-173-b4/Examples-pcap/savedump/GNUmakefile rename to libs/WpdPack_4_1_2/Examples-pcap/savedump/GNUmakefile index fd98a3ab..86bbaa0a 100644 --- a/libs/WinPcap-413-173-b4/Examples-pcap/savedump/GNUmakefile +++ b/libs/WpdPack_4_1_2/Examples-pcap/savedump/GNUmakefile @@ -1,17 +1,17 @@ -# Makefile for cygwin gcc -# Nate Lawson - -PCAP_PATH = ../../lib -CFLAGS = -g -O -mno-cygwin -I ../../include - -OBJS = savedump.o -LIBS = -L ${PCAP_PATH} -lwpcap - -all: ${OBJS} - ${CC} ${CFLAGS} -o savedump.exe ${OBJS} ${LIBS} - -clean: - rm -f ${OBJS} savedump.exe - -.c.o: - ${CC} ${CFLAGS} -c -o $*.o $< +# Makefile for cygwin gcc +# Nate Lawson + +PCAP_PATH = ../../lib +CFLAGS = -g -O -mno-cygwin -I ../../include + +OBJS = savedump.o +LIBS = -L ${PCAP_PATH} -lwpcap + +all: ${OBJS} + ${CC} ${CFLAGS} -o savedump.exe ${OBJS} ${LIBS} + +clean: + rm -f ${OBJS} savedump.exe + +.c.o: + ${CC} ${CFLAGS} -c -o $*.o $< diff --git a/libs/WinPcap-413-173-b4/Examples-pcap/savedump/savedump.c b/libs/WpdPack_4_1_2/Examples-pcap/savedump/savedump.c similarity index 96% rename from libs/WinPcap-413-173-b4/Examples-pcap/savedump/savedump.c rename to libs/WpdPack_4_1_2/Examples-pcap/savedump/savedump.c index 84273a7e..17456a77 100644 --- a/libs/WinPcap-413-173-b4/Examples-pcap/savedump/savedump.c +++ b/libs/WpdPack_4_1_2/Examples-pcap/savedump/savedump.c @@ -1,111 +1,111 @@ -#ifdef _MSC_VER -/* - * we do not want the warnings about the old deprecated and unsecure CRT functions - * since these examples can be compiled under *nix as well - */ -#define _CRT_SECURE_NO_WARNINGS -#endif - -#include "pcap.h" - -/* prototype of the packet handler */ -void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data); - -int main(int argc, char **argv) -{ - pcap_if_t *alldevs; - pcap_if_t *d; - int inum; - int i=0; - pcap_t *adhandle; - char errbuf[PCAP_ERRBUF_SIZE]; - pcap_dumper_t *dumpfile; - - - /* Check command line */ - if(argc != 2) - { - printf("usage: %s filename", argv[0]); - return -1; - } - - /* Retrieve the device list on the local machine */ - if (pcap_findalldevs(&alldevs, errbuf) == -1) - { - fprintf(stderr,"Error in pcap_findalldevs: %s\n", errbuf); - exit(1); - } - - /* Print the list */ - for(d=alldevs; d; d=d->next) - { - printf("%d. %s", ++i, d->name); - if (d->description) - printf(" (%s)\n", d->description); - else - printf(" (No description available)\n"); - } - - if(i==0) - { - printf("\nNo interfaces found! Make sure WinPcap is installed.\n"); - return -1; - } - - printf("Enter the interface number (1-%d):",i); - scanf("%d", &inum); - - if(inum < 1 || inum > i) - { - printf("\nInterface number out of range.\n"); - /* Free the device list */ - pcap_freealldevs(alldevs); - return -1; - } - - /* Jump to the selected adapter */ - for(d=alldevs, i=0; i< inum-1 ;d=d->next, i++); - - - /* Open the adapter */ - if ((adhandle= pcap_open_live(d->name, // name of the device - 65536, // portion of the packet to capture. - // 65536 grants that the whole packet will be captured on all the MACs. - 1, // promiscuous mode (nonzero means promiscuous) - 1000, // read timeout - errbuf // error buffer - )) == NULL) - { - fprintf(stderr,"\nUnable to open the adapter. %s is not supported by WinPcap\n", d->name); - /* Free the device list */ - pcap_freealldevs(alldevs); - return -1; - } - - /* Open the dump file */ - dumpfile = pcap_dump_open(adhandle, argv[1]); - - if(dumpfile==NULL) - { - fprintf(stderr,"\nError opening output file\n"); - return -1; - } - - printf("\nlistening on %s... Press Ctrl+C to stop...\n", d->description); - - /* At this point, we no longer need the device list. Free it */ - pcap_freealldevs(alldevs); - - /* start the capture */ - pcap_loop(adhandle, 0, packet_handler, (unsigned char *)dumpfile); - - pcap_close(adhandle); - return 0; -} - -/* Callback function invoked by libpcap for every incoming packet */ -void packet_handler(u_char *dumpfile, const struct pcap_pkthdr *header, const u_char *pkt_data) -{ - /* save the packet on the dump file */ - pcap_dump(dumpfile, header, pkt_data); -} +#ifdef _MSC_VER +/* + * we do not want the warnings about the old deprecated and unsecure CRT functions + * since these examples can be compiled under *nix as well + */ +#define _CRT_SECURE_NO_WARNINGS +#endif + +#include "pcap.h" + +/* prototype of the packet handler */ +void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data); + +int main(int argc, char **argv) +{ + pcap_if_t *alldevs; + pcap_if_t *d; + int inum; + int i=0; + pcap_t *adhandle; + char errbuf[PCAP_ERRBUF_SIZE]; + pcap_dumper_t *dumpfile; + + + /* Check command line */ + if(argc != 2) + { + printf("usage: %s filename", argv[0]); + return -1; + } + + /* Retrieve the device list on the local machine */ + if (pcap_findalldevs(&alldevs, errbuf) == -1) + { + fprintf(stderr,"Error in pcap_findalldevs: %s\n", errbuf); + exit(1); + } + + /* Print the list */ + for(d=alldevs; d; d=d->next) + { + printf("%d. %s", ++i, d->name); + if (d->description) + printf(" (%s)\n", d->description); + else + printf(" (No description available)\n"); + } + + if(i==0) + { + printf("\nNo interfaces found! Make sure WinPcap is installed.\n"); + return -1; + } + + printf("Enter the interface number (1-%d):",i); + scanf("%d", &inum); + + if(inum < 1 || inum > i) + { + printf("\nInterface number out of range.\n"); + /* Free the device list */ + pcap_freealldevs(alldevs); + return -1; + } + + /* Jump to the selected adapter */ + for(d=alldevs, i=0; i< inum-1 ;d=d->next, i++); + + + /* Open the adapter */ + if ((adhandle= pcap_open_live(d->name, // name of the device + 65536, // portion of the packet to capture. + // 65536 grants that the whole packet will be captured on all the MACs. + 1, // promiscuous mode (nonzero means promiscuous) + 1000, // read timeout + errbuf // error buffer + )) == NULL) + { + fprintf(stderr,"\nUnable to open the adapter. %s is not supported by WinPcap\n", d->name); + /* Free the device list */ + pcap_freealldevs(alldevs); + return -1; + } + + /* Open the dump file */ + dumpfile = pcap_dump_open(adhandle, argv[1]); + + if(dumpfile==NULL) + { + fprintf(stderr,"\nError opening output file\n"); + return -1; + } + + printf("\nlistening on %s... Press Ctrl+C to stop...\n", d->description); + + /* At this point, we no longer need the device list. Free it */ + pcap_freealldevs(alldevs); + + /* start the capture */ + pcap_loop(adhandle, 0, packet_handler, (unsigned char *)dumpfile); + + pcap_close(adhandle); + return 0; +} + +/* Callback function invoked by libpcap for every incoming packet */ +void packet_handler(u_char *dumpfile, const struct pcap_pkthdr *header, const u_char *pkt_data) +{ + /* save the packet on the dump file */ + pcap_dump(dumpfile, header, pkt_data); +} diff --git a/libs/WinPcap-413-173-b4/Examples-remote/misc/savedump.dsp b/libs/WpdPack_4_1_2/Examples-pcap/savedump/savedump.dsp similarity index 97% rename from libs/WinPcap-413-173-b4/Examples-remote/misc/savedump.dsp rename to libs/WpdPack_4_1_2/Examples-pcap/savedump/savedump.dsp index 7d2e366b..22d5d399 100644 --- a/libs/WinPcap-413-173-b4/Examples-remote/misc/savedump.dsp +++ b/libs/WpdPack_4_1_2/Examples-pcap/savedump/savedump.dsp @@ -1,110 +1,110 @@ -# Microsoft Developer Studio Project File - Name="savedump" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=savedump - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "savedump.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "savedump.mak" CFG="savedump - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "savedump - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "savedump - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "savedump - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "../" /I "../bpf/" /I "../lbl/" /I "../../Include/" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_UNICODE" /D "WPCAP" /D "HAVE_REMOTE" /YX /FD /c -# ADD BASE RSC /l 0x410 /d "NDEBUG" -# ADD RSC /l 0x410 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib ws2_32.lib Iphlpapi.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "savedump - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../" /I "../bpf/" /I "../lbl/" /I "../../Include/" /I "D:/Program Files/Microsoft Platform SDK/include" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_UNICODE" /D "WPCAP" /D "HAVE_REMOTE" /YX /FD /GZ /c -# ADD BASE RSC /l 0x410 /d "_DEBUG" -# ADD RSC /l 0x410 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib ws2_32.lib Iphlpapi.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "savedump - Win32 Release" -# Name "savedump - Win32 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\savedump.c -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# Begin Source File - -SOURCE=..\..\include\pcap.h -# End Source File -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# Begin Source File - -SOURCE=..\..\lib\Wpcap.lib -# End Source File -# End Target -# End Project +# Microsoft Developer Studio Project File - Name="savedump" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Console Application" 0x0103 + +CFG=savedump - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "savedump.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "savedump.mak" CFG="savedump - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "savedump - Win32 Release" (based on "Win32 (x86) Console Application") +!MESSAGE "savedump - Win32 Debug" (based on "Win32 (x86) Console Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "savedump - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /I "../" /I "../bpf/" /I "../lbl/" /I "../../Include/" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_UNICODE" /D "WPCAP" /D "HAVE_REMOTE" /YX /FD /c +# ADD BASE RSC /l 0x410 /d "NDEBUG" +# ADD RSC /l 0x410 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib ws2_32.lib Iphlpapi.lib /nologo /subsystem:console /machine:I386 + +!ELSEIF "$(CFG)" == "savedump - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c +# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../" /I "../bpf/" /I "../lbl/" /I "../../Include/" /I "D:/Program Files/Microsoft Platform SDK/include" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_UNICODE" /D "WPCAP" /D "HAVE_REMOTE" /YX /FD /GZ /c +# ADD BASE RSC /l 0x410 /d "_DEBUG" +# ADD RSC /l 0x410 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib ws2_32.lib Iphlpapi.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept + +!ENDIF + +# Begin Target + +# Name "savedump - Win32 Release" +# Name "savedump - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\savedump.c +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# Begin Source File + +SOURCE=..\..\include\pcap.h +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# End Group +# Begin Source File + +SOURCE=..\..\lib\Wpcap.lib +# End Source File +# End Target +# End Project diff --git a/libs/WinPcap-413-173-b4/Examples-pcap/savedump/savedump.dsw b/libs/WpdPack_4_1_2/Examples-pcap/savedump/savedump.dsw similarity index 94% rename from libs/WinPcap-413-173-b4/Examples-pcap/savedump/savedump.dsw rename to libs/WpdPack_4_1_2/Examples-pcap/savedump/savedump.dsw index 32473951..b0e9fc64 100644 --- a/libs/WinPcap-413-173-b4/Examples-pcap/savedump/savedump.dsw +++ b/libs/WpdPack_4_1_2/Examples-pcap/savedump/savedump.dsw @@ -1,29 +1,29 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "savedump"=.\savedump.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "savedump"=.\savedump.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/libs/WinPcap-413-173-b4/Examples-pcap/savedump/savedump.vcproj b/libs/WpdPack_4_1_2/Examples-pcap/savedump/savedump.vcproj similarity index 95% rename from libs/WinPcap-413-173-b4/Examples-pcap/savedump/savedump.vcproj rename to libs/WpdPack_4_1_2/Examples-pcap/savedump/savedump.vcproj index 79f6b461..00873281 100644 --- a/libs/WinPcap-413-173-b4/Examples-pcap/savedump/savedump.vcproj +++ b/libs/WpdPack_4_1_2/Examples-pcap/savedump/savedump.vcproj @@ -1,364 +1,364 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/libs/WinPcap-413-173-b4/Examples-pcap/sendpack/GNUmakefile b/libs/WpdPack_4_1_2/Examples-pcap/sendpack/GNUmakefile similarity index 94% rename from libs/WinPcap-413-173-b4/Examples-pcap/sendpack/GNUmakefile rename to libs/WpdPack_4_1_2/Examples-pcap/sendpack/GNUmakefile index 54939a6f..60fd211d 100644 --- a/libs/WinPcap-413-173-b4/Examples-pcap/sendpack/GNUmakefile +++ b/libs/WpdPack_4_1_2/Examples-pcap/sendpack/GNUmakefile @@ -1,17 +1,17 @@ -# Makefile for cygwin gcc -# Nate Lawson - -PCAP_PATH = ../../lib -CFLAGS = -g -O -mno-cygwin -I ../../include - -OBJS = sendpack.o -LIBS = -L ${PCAP_PATH} -lwpcap - -all: ${OBJS} - ${CC} ${CFLAGS} -o sendpack.exe ${OBJS} ${LIBS} - -clean: - rm -f ${OBJS} sendpack.exe - -.c.o: - ${CC} ${CFLAGS} -c -o $*.o $< +# Makefile for cygwin gcc +# Nate Lawson + +PCAP_PATH = ../../lib +CFLAGS = -g -O -mno-cygwin -I ../../include + +OBJS = sendpack.o +LIBS = -L ${PCAP_PATH} -lwpcap + +all: ${OBJS} + ${CC} ${CFLAGS} -o sendpack.exe ${OBJS} ${LIBS} + +clean: + rm -f ${OBJS} sendpack.exe + +.c.o: + ${CC} ${CFLAGS} -c -o $*.o $< diff --git a/libs/WinPcap-413-173-b4/Examples-pcap/sendpack/sendpack.c b/libs/WpdPack_4_1_2/Examples-pcap/sendpack/sendpack.c similarity index 95% rename from libs/WinPcap-413-173-b4/Examples-pcap/sendpack/sendpack.c rename to libs/WpdPack_4_1_2/Examples-pcap/sendpack/sendpack.c index 28af84cf..7c68c910 100644 --- a/libs/WinPcap-413-173-b4/Examples-pcap/sendpack/sendpack.c +++ b/libs/WpdPack_4_1_2/Examples-pcap/sendpack/sendpack.c @@ -1,68 +1,68 @@ -#include -#include - -#include - - -int main(int argc, char **argv) -{ - pcap_t *fp; - char errbuf[PCAP_ERRBUF_SIZE]; - u_char packet[100]; - int i; - - /* Check the validity of the command line */ - if (argc != 2) - { - printf("usage: %s interface", argv[0]); - return 1; - } - - /* Open the adapter */ - if ((fp = pcap_open_live(argv[1], // name of the device - 65536, // portion of the packet to capture. It doesn't matter in this case - 1, // promiscuous mode (nonzero means promiscuous) - 1000, // read timeout - errbuf // error buffer - )) == NULL) - { - fprintf(stderr,"\nUnable to open the adapter. %s is not supported by WinPcap\n", argv[1]); - return 2; - } - - /* Supposing to be on ethernet, set mac destination to 1:1:1:1:1:1 */ - packet[0]=1; - packet[1]=1; - packet[2]=1; - packet[3]=1; - packet[4]=1; - packet[5]=1; - - /* set mac source to 2:2:2:2:2:2 */ - packet[6]=2; - packet[7]=2; - packet[8]=2; - packet[9]=2; - packet[10]=2; - packet[11]=2; - - /* Fill the rest of the packet */ - for(i=12;i<100;i++) - { - packet[i]= (u_char)i; - } - - /* Send down the packet */ - if (pcap_sendpacket(fp, // Adapter - packet, // buffer with the packet - 100 // size - ) != 0) - { - fprintf(stderr,"\nError sending the packet: %s\n", pcap_geterr(fp)); - return 3; - } - - pcap_close(fp); - return 0; -} - +#include +#include + +#include + + +int main(int argc, char **argv) +{ + pcap_t *fp; + char errbuf[PCAP_ERRBUF_SIZE]; + u_char packet[100]; + int i; + + /* Check the validity of the command line */ + if (argc != 2) + { + printf("usage: %s interface", argv[0]); + return 1; + } + + /* Open the adapter */ + if ((fp = pcap_open_live(argv[1], // name of the device + 65536, // portion of the packet to capture. It doesn't matter in this case + 1, // promiscuous mode (nonzero means promiscuous) + 1000, // read timeout + errbuf // error buffer + )) == NULL) + { + fprintf(stderr,"\nUnable to open the adapter. %s is not supported by WinPcap\n", argv[1]); + return 2; + } + + /* Supposing to be on ethernet, set mac destination to 1:1:1:1:1:1 */ + packet[0]=1; + packet[1]=1; + packet[2]=1; + packet[3]=1; + packet[4]=1; + packet[5]=1; + + /* set mac source to 2:2:2:2:2:2 */ + packet[6]=2; + packet[7]=2; + packet[8]=2; + packet[9]=2; + packet[10]=2; + packet[11]=2; + + /* Fill the rest of the packet */ + for(i=12;i<100;i++) + { + packet[i]= (u_char)i; + } + + /* Send down the packet */ + if (pcap_sendpacket(fp, // Adapter + packet, // buffer with the packet + 100 // size + ) != 0) + { + fprintf(stderr,"\nError sending the packet: %s\n", pcap_geterr(fp)); + return 3; + } + + pcap_close(fp); + return 0; +} + diff --git a/libs/WinPcap-413-173-b4/Examples-remote/misc/sendpack.dsp b/libs/WpdPack_4_1_2/Examples-pcap/sendpack/sendpack.dsp similarity index 97% rename from libs/WinPcap-413-173-b4/Examples-remote/misc/sendpack.dsp rename to libs/WpdPack_4_1_2/Examples-pcap/sendpack/sendpack.dsp index 982ce670..95022e37 100644 --- a/libs/WinPcap-413-173-b4/Examples-remote/misc/sendpack.dsp +++ b/libs/WpdPack_4_1_2/Examples-pcap/sendpack/sendpack.dsp @@ -1,110 +1,110 @@ -# Microsoft Developer Studio Project File - Name="sendpack" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=sendpack - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "sendpack.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "sendpack.mak" CFG="sendpack - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "sendpack - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "sendpack - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "sendpack - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "../" /I "../bpf/" /I "../lbl/" /I "../../Include/" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_UNICODE" /D "WPCAP" /D "HAVE_REMOTE" /YX /FD /c -# ADD BASE RSC /l 0x410 /d "NDEBUG" -# ADD RSC /l 0x410 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib ws2_32.lib Iphlpapi.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "sendpack - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../" /I "../bpf/" /I "../lbl/" /I "../../Include/" /I "D:/Program Files/Microsoft Platform SDK/include" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_UNICODE" /D "WPCAP" /D "HAVE_REMOTE" /YX /FD /GZ /c -# ADD BASE RSC /l 0x410 /d "_DEBUG" -# ADD RSC /l 0x410 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib ws2_32.lib Iphlpapi.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "sendpack - Win32 Release" -# Name "sendpack - Win32 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\sendpack.c -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# Begin Source File - -SOURCE=..\..\include\pcap.h -# End Source File -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# Begin Source File - -SOURCE=..\..\lib\Wpcap.lib -# End Source File -# End Target -# End Project +# Microsoft Developer Studio Project File - Name="sendpack" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Console Application" 0x0103 + +CFG=sendpack - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "sendpack.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "sendpack.mak" CFG="sendpack - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "sendpack - Win32 Release" (based on "Win32 (x86) Console Application") +!MESSAGE "sendpack - Win32 Debug" (based on "Win32 (x86) Console Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "sendpack - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /I "../" /I "../bpf/" /I "../lbl/" /I "../../Include/" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_UNICODE" /D "WPCAP" /D "HAVE_REMOTE" /YX /FD /c +# ADD BASE RSC /l 0x410 /d "NDEBUG" +# ADD RSC /l 0x410 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib ws2_32.lib Iphlpapi.lib /nologo /subsystem:console /machine:I386 + +!ELSEIF "$(CFG)" == "sendpack - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c +# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../" /I "../bpf/" /I "../lbl/" /I "../../Include/" /I "D:/Program Files/Microsoft Platform SDK/include" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_UNICODE" /D "WPCAP" /D "HAVE_REMOTE" /YX /FD /GZ /c +# ADD BASE RSC /l 0x410 /d "_DEBUG" +# ADD RSC /l 0x410 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib ws2_32.lib Iphlpapi.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept + +!ENDIF + +# Begin Target + +# Name "sendpack - Win32 Release" +# Name "sendpack - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\sendpack.c +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# Begin Source File + +SOURCE=..\..\include\pcap.h +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# End Group +# Begin Source File + +SOURCE=..\..\lib\Wpcap.lib +# End Source File +# End Target +# End Project diff --git a/libs/WinPcap-413-173-b4/Examples-pcap/sendpack/sendpack.dsw b/libs/WpdPack_4_1_2/Examples-pcap/sendpack/sendpack.dsw similarity index 94% rename from libs/WinPcap-413-173-b4/Examples-pcap/sendpack/sendpack.dsw rename to libs/WpdPack_4_1_2/Examples-pcap/sendpack/sendpack.dsw index 3e0424d3..1ccadc7f 100644 --- a/libs/WinPcap-413-173-b4/Examples-pcap/sendpack/sendpack.dsw +++ b/libs/WpdPack_4_1_2/Examples-pcap/sendpack/sendpack.dsw @@ -1,29 +1,29 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "sendpack"=.\sendpack.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "sendpack"=.\sendpack.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/libs/WinPcap-413-173-b4/Examples-pcap/sendpack/sendpack.vcproj b/libs/WpdPack_4_1_2/Examples-pcap/sendpack/sendpack.vcproj similarity index 95% rename from libs/WinPcap-413-173-b4/Examples-pcap/sendpack/sendpack.vcproj rename to libs/WpdPack_4_1_2/Examples-pcap/sendpack/sendpack.vcproj index 1a48c44c..6a6b1c22 100644 --- a/libs/WinPcap-413-173-b4/Examples-pcap/sendpack/sendpack.vcproj +++ b/libs/WpdPack_4_1_2/Examples-pcap/sendpack/sendpack.vcproj @@ -1,364 +1,364 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/libs/WinPcap-413-173-b4/Examples-remote/MakeAll.sln b/libs/WpdPack_4_1_2/Examples-remote/MakeAll.sln similarity index 98% rename from libs/WinPcap-413-173-b4/Examples-remote/MakeAll.sln rename to libs/WpdPack_4_1_2/Examples-remote/MakeAll.sln index fde1f41b..f22bc478 100644 --- a/libs/WinPcap-413-173-b4/Examples-remote/MakeAll.sln +++ b/libs/WpdPack_4_1_2/Examples-remote/MakeAll.sln @@ -1,196 +1,196 @@ - -Microsoft Visual Studio Solution File, Format Version 9.00 -# Visual Studio 2005 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "iflist", "iflist\iflist.vcproj", "{B0C740E1-73A3-43C7-B0CB-B715A4E691DD}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "basic_dump", "misc\basic_dump.vcproj", "{66297062-96A0-4F0E-B147-3C8384031232}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "basic_dump_ex", "misc\basic_dump_ex.vcproj", "{92849630-6B09-409C-A7AD-E91E682558B1}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "readfile", "misc\readfile.vcproj", "{161E7606-F4CD-4A04-AB6B-5837F7818EE1}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "readfile_ex", "misc\readfile_ex.vcproj", "{3071DFB6-68F8-41EF-A56C-0C7A71B6967C}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "savedump", "misc\savedump.vcproj", "{1B8791CB-DD15-46BF-B0A2-879892085538}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sendpack", "misc\sendpack.vcproj", "{1C376689-5F61-48E7-AE83-0DED9EE9E458}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pcap_filter", "pcap_filter\pcap_filter.vcproj", "{B9F68F6F-22AE-47A2-A3A3-1212831AF9FF}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pktdump_ex", "pktdump_ex\pktdump_ex.vcproj", "{3D62DEB4-3536-44AE-8E4B-AD6DFF1B795E}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sendcap", "sendcap\sendcap.vcproj", "{C6712171-F9B8-4A1E-A774-5D93C9116CEE}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "smp_1", "smp_1\smp_1.vcproj", "{21F49E7F-6C58-4DA5-ABE5-A9DFB6165C83}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tcptop", "tcptop\tcptop.vcproj", "{B671D5DF-3A80-4A21-BC01-79E3FB73D372}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "UDPdump", "UDPdump\UDPdump.vcproj", "{42E5F1D6-6E83-4C13-83CC-C6CD83478C58}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "UserBridge", "UserLevelBridge\UserBridge.vcproj", "{BB73BFD4-454F-42C8-AFE6-FA890A8BD8FC}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "GetMacAddress", "PacketDriver\GetMacAddress\GetMacAddress.vcproj", "{0E6A3C08-86E8-495B-976B-2666AB16501C}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TestPacketCapture", "PacketDriver\TestPacketCapture\TestPacketCapture.vcproj", "{79942922-E02C-486D-9EE3-A13C0876C4C2}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TestPacketSend", "PacketDriver\TestPacketSend\TestPacketSend.vcproj", "{1E3BED58-2F2C-463A-B9FD-9A55235C6840}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pcap_fopen", "pcap_fopen\pcap_fopen.vcproj", "{DD317CB5-6337-498F-A560-553B5558E133}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {B0C740E1-73A3-43C7-B0CB-B715A4E691DD}.Debug|Win32.ActiveCfg = Debug|Win32 - {B0C740E1-73A3-43C7-B0CB-B715A4E691DD}.Debug|Win32.Build.0 = Debug|Win32 - {B0C740E1-73A3-43C7-B0CB-B715A4E691DD}.Debug|x64.ActiveCfg = Debug|x64 - {B0C740E1-73A3-43C7-B0CB-B715A4E691DD}.Debug|x64.Build.0 = Debug|x64 - {B0C740E1-73A3-43C7-B0CB-B715A4E691DD}.Release|Win32.ActiveCfg = Release|Win32 - {B0C740E1-73A3-43C7-B0CB-B715A4E691DD}.Release|Win32.Build.0 = Release|Win32 - {B0C740E1-73A3-43C7-B0CB-B715A4E691DD}.Release|x64.ActiveCfg = Release|x64 - {B0C740E1-73A3-43C7-B0CB-B715A4E691DD}.Release|x64.Build.0 = Release|x64 - {66297062-96A0-4F0E-B147-3C8384031232}.Debug|Win32.ActiveCfg = Debug|Win32 - {66297062-96A0-4F0E-B147-3C8384031232}.Debug|Win32.Build.0 = Debug|Win32 - {66297062-96A0-4F0E-B147-3C8384031232}.Debug|x64.ActiveCfg = Debug|x64 - {66297062-96A0-4F0E-B147-3C8384031232}.Debug|x64.Build.0 = Debug|x64 - {66297062-96A0-4F0E-B147-3C8384031232}.Release|Win32.ActiveCfg = Release|Win32 - {66297062-96A0-4F0E-B147-3C8384031232}.Release|Win32.Build.0 = Release|Win32 - {66297062-96A0-4F0E-B147-3C8384031232}.Release|x64.ActiveCfg = Release|x64 - {66297062-96A0-4F0E-B147-3C8384031232}.Release|x64.Build.0 = Release|x64 - {92849630-6B09-409C-A7AD-E91E682558B1}.Debug|Win32.ActiveCfg = Debug|Win32 - {92849630-6B09-409C-A7AD-E91E682558B1}.Debug|Win32.Build.0 = Debug|Win32 - {92849630-6B09-409C-A7AD-E91E682558B1}.Debug|x64.ActiveCfg = Debug|x64 - {92849630-6B09-409C-A7AD-E91E682558B1}.Debug|x64.Build.0 = Debug|x64 - {92849630-6B09-409C-A7AD-E91E682558B1}.Release|Win32.ActiveCfg = Release|Win32 - {92849630-6B09-409C-A7AD-E91E682558B1}.Release|Win32.Build.0 = Release|Win32 - {92849630-6B09-409C-A7AD-E91E682558B1}.Release|x64.ActiveCfg = Release|x64 - {92849630-6B09-409C-A7AD-E91E682558B1}.Release|x64.Build.0 = Release|x64 - {161E7606-F4CD-4A04-AB6B-5837F7818EE1}.Debug|Win32.ActiveCfg = Debug|Win32 - {161E7606-F4CD-4A04-AB6B-5837F7818EE1}.Debug|Win32.Build.0 = Debug|Win32 - {161E7606-F4CD-4A04-AB6B-5837F7818EE1}.Debug|x64.ActiveCfg = Debug|x64 - {161E7606-F4CD-4A04-AB6B-5837F7818EE1}.Debug|x64.Build.0 = Debug|x64 - {161E7606-F4CD-4A04-AB6B-5837F7818EE1}.Release|Win32.ActiveCfg = Release|Win32 - {161E7606-F4CD-4A04-AB6B-5837F7818EE1}.Release|Win32.Build.0 = Release|Win32 - {161E7606-F4CD-4A04-AB6B-5837F7818EE1}.Release|x64.ActiveCfg = Release|x64 - {161E7606-F4CD-4A04-AB6B-5837F7818EE1}.Release|x64.Build.0 = Release|x64 - {3071DFB6-68F8-41EF-A56C-0C7A71B6967C}.Debug|Win32.ActiveCfg = Debug|Win32 - {3071DFB6-68F8-41EF-A56C-0C7A71B6967C}.Debug|Win32.Build.0 = Debug|Win32 - {3071DFB6-68F8-41EF-A56C-0C7A71B6967C}.Debug|x64.ActiveCfg = Debug|x64 - {3071DFB6-68F8-41EF-A56C-0C7A71B6967C}.Debug|x64.Build.0 = Debug|x64 - {3071DFB6-68F8-41EF-A56C-0C7A71B6967C}.Release|Win32.ActiveCfg = Release|Win32 - {3071DFB6-68F8-41EF-A56C-0C7A71B6967C}.Release|Win32.Build.0 = Release|Win32 - {3071DFB6-68F8-41EF-A56C-0C7A71B6967C}.Release|x64.ActiveCfg = Release|x64 - {3071DFB6-68F8-41EF-A56C-0C7A71B6967C}.Release|x64.Build.0 = Release|x64 - {1B8791CB-DD15-46BF-B0A2-879892085538}.Debug|Win32.ActiveCfg = Debug|Win32 - {1B8791CB-DD15-46BF-B0A2-879892085538}.Debug|Win32.Build.0 = Debug|Win32 - {1B8791CB-DD15-46BF-B0A2-879892085538}.Debug|x64.ActiveCfg = Debug|x64 - {1B8791CB-DD15-46BF-B0A2-879892085538}.Debug|x64.Build.0 = Debug|x64 - {1B8791CB-DD15-46BF-B0A2-879892085538}.Release|Win32.ActiveCfg = Release|Win32 - {1B8791CB-DD15-46BF-B0A2-879892085538}.Release|Win32.Build.0 = Release|Win32 - {1B8791CB-DD15-46BF-B0A2-879892085538}.Release|x64.ActiveCfg = Release|x64 - {1B8791CB-DD15-46BF-B0A2-879892085538}.Release|x64.Build.0 = Release|x64 - {1C376689-5F61-48E7-AE83-0DED9EE9E458}.Debug|Win32.ActiveCfg = Debug|Win32 - {1C376689-5F61-48E7-AE83-0DED9EE9E458}.Debug|Win32.Build.0 = Debug|Win32 - {1C376689-5F61-48E7-AE83-0DED9EE9E458}.Debug|x64.ActiveCfg = Debug|x64 - {1C376689-5F61-48E7-AE83-0DED9EE9E458}.Debug|x64.Build.0 = Debug|x64 - {1C376689-5F61-48E7-AE83-0DED9EE9E458}.Release|Win32.ActiveCfg = Release|Win32 - {1C376689-5F61-48E7-AE83-0DED9EE9E458}.Release|Win32.Build.0 = Release|Win32 - {1C376689-5F61-48E7-AE83-0DED9EE9E458}.Release|x64.ActiveCfg = Release|x64 - {1C376689-5F61-48E7-AE83-0DED9EE9E458}.Release|x64.Build.0 = Release|x64 - {B9F68F6F-22AE-47A2-A3A3-1212831AF9FF}.Debug|Win32.ActiveCfg = Debug|Win32 - {B9F68F6F-22AE-47A2-A3A3-1212831AF9FF}.Debug|Win32.Build.0 = Debug|Win32 - {B9F68F6F-22AE-47A2-A3A3-1212831AF9FF}.Debug|x64.ActiveCfg = Debug|x64 - {B9F68F6F-22AE-47A2-A3A3-1212831AF9FF}.Debug|x64.Build.0 = Debug|x64 - {B9F68F6F-22AE-47A2-A3A3-1212831AF9FF}.Release|Win32.ActiveCfg = Release|Win32 - {B9F68F6F-22AE-47A2-A3A3-1212831AF9FF}.Release|Win32.Build.0 = Release|Win32 - {B9F68F6F-22AE-47A2-A3A3-1212831AF9FF}.Release|x64.ActiveCfg = Release|x64 - {B9F68F6F-22AE-47A2-A3A3-1212831AF9FF}.Release|x64.Build.0 = Release|x64 - {3D62DEB4-3536-44AE-8E4B-AD6DFF1B795E}.Debug|Win32.ActiveCfg = Debug|Win32 - {3D62DEB4-3536-44AE-8E4B-AD6DFF1B795E}.Debug|Win32.Build.0 = Debug|Win32 - {3D62DEB4-3536-44AE-8E4B-AD6DFF1B795E}.Debug|x64.ActiveCfg = Debug|x64 - {3D62DEB4-3536-44AE-8E4B-AD6DFF1B795E}.Debug|x64.Build.0 = Debug|x64 - {3D62DEB4-3536-44AE-8E4B-AD6DFF1B795E}.Release|Win32.ActiveCfg = Release|Win32 - {3D62DEB4-3536-44AE-8E4B-AD6DFF1B795E}.Release|Win32.Build.0 = Release|Win32 - {3D62DEB4-3536-44AE-8E4B-AD6DFF1B795E}.Release|x64.ActiveCfg = Release|x64 - {3D62DEB4-3536-44AE-8E4B-AD6DFF1B795E}.Release|x64.Build.0 = Release|x64 - {C6712171-F9B8-4A1E-A774-5D93C9116CEE}.Debug|Win32.ActiveCfg = Debug|Win32 - {C6712171-F9B8-4A1E-A774-5D93C9116CEE}.Debug|Win32.Build.0 = Debug|Win32 - {C6712171-F9B8-4A1E-A774-5D93C9116CEE}.Debug|x64.ActiveCfg = Debug|x64 - {C6712171-F9B8-4A1E-A774-5D93C9116CEE}.Debug|x64.Build.0 = Debug|x64 - {C6712171-F9B8-4A1E-A774-5D93C9116CEE}.Release|Win32.ActiveCfg = Release|Win32 - {C6712171-F9B8-4A1E-A774-5D93C9116CEE}.Release|Win32.Build.0 = Release|Win32 - {C6712171-F9B8-4A1E-A774-5D93C9116CEE}.Release|x64.ActiveCfg = Release|x64 - {C6712171-F9B8-4A1E-A774-5D93C9116CEE}.Release|x64.Build.0 = Release|x64 - {21F49E7F-6C58-4DA5-ABE5-A9DFB6165C83}.Debug|Win32.ActiveCfg = Debug|Win32 - {21F49E7F-6C58-4DA5-ABE5-A9DFB6165C83}.Debug|Win32.Build.0 = Debug|Win32 - {21F49E7F-6C58-4DA5-ABE5-A9DFB6165C83}.Debug|x64.ActiveCfg = Debug|x64 - {21F49E7F-6C58-4DA5-ABE5-A9DFB6165C83}.Debug|x64.Build.0 = Debug|x64 - {21F49E7F-6C58-4DA5-ABE5-A9DFB6165C83}.Release|Win32.ActiveCfg = Release|Win32 - {21F49E7F-6C58-4DA5-ABE5-A9DFB6165C83}.Release|Win32.Build.0 = Release|Win32 - {21F49E7F-6C58-4DA5-ABE5-A9DFB6165C83}.Release|x64.ActiveCfg = Release|x64 - {21F49E7F-6C58-4DA5-ABE5-A9DFB6165C83}.Release|x64.Build.0 = Release|x64 - {B671D5DF-3A80-4A21-BC01-79E3FB73D372}.Debug|Win32.ActiveCfg = Debug|Win32 - {B671D5DF-3A80-4A21-BC01-79E3FB73D372}.Debug|Win32.Build.0 = Debug|Win32 - {B671D5DF-3A80-4A21-BC01-79E3FB73D372}.Debug|x64.ActiveCfg = Debug|x64 - {B671D5DF-3A80-4A21-BC01-79E3FB73D372}.Debug|x64.Build.0 = Debug|x64 - {B671D5DF-3A80-4A21-BC01-79E3FB73D372}.Release|Win32.ActiveCfg = Release|Win32 - {B671D5DF-3A80-4A21-BC01-79E3FB73D372}.Release|Win32.Build.0 = Release|Win32 - {B671D5DF-3A80-4A21-BC01-79E3FB73D372}.Release|x64.ActiveCfg = Release|x64 - {B671D5DF-3A80-4A21-BC01-79E3FB73D372}.Release|x64.Build.0 = Release|x64 - {42E5F1D6-6E83-4C13-83CC-C6CD83478C58}.Debug|Win32.ActiveCfg = Debug|Win32 - {42E5F1D6-6E83-4C13-83CC-C6CD83478C58}.Debug|Win32.Build.0 = Debug|Win32 - {42E5F1D6-6E83-4C13-83CC-C6CD83478C58}.Debug|x64.ActiveCfg = Debug|x64 - {42E5F1D6-6E83-4C13-83CC-C6CD83478C58}.Debug|x64.Build.0 = Debug|x64 - {42E5F1D6-6E83-4C13-83CC-C6CD83478C58}.Release|Win32.ActiveCfg = Release|Win32 - {42E5F1D6-6E83-4C13-83CC-C6CD83478C58}.Release|Win32.Build.0 = Release|Win32 - {42E5F1D6-6E83-4C13-83CC-C6CD83478C58}.Release|x64.ActiveCfg = Release|x64 - {42E5F1D6-6E83-4C13-83CC-C6CD83478C58}.Release|x64.Build.0 = Release|x64 - {BB73BFD4-454F-42C8-AFE6-FA890A8BD8FC}.Debug|Win32.ActiveCfg = Debug|Win32 - {BB73BFD4-454F-42C8-AFE6-FA890A8BD8FC}.Debug|Win32.Build.0 = Debug|Win32 - {BB73BFD4-454F-42C8-AFE6-FA890A8BD8FC}.Debug|x64.ActiveCfg = Debug|x64 - {BB73BFD4-454F-42C8-AFE6-FA890A8BD8FC}.Debug|x64.Build.0 = Debug|x64 - {BB73BFD4-454F-42C8-AFE6-FA890A8BD8FC}.Release|Win32.ActiveCfg = Release|Win32 - {BB73BFD4-454F-42C8-AFE6-FA890A8BD8FC}.Release|Win32.Build.0 = Release|Win32 - {BB73BFD4-454F-42C8-AFE6-FA890A8BD8FC}.Release|x64.ActiveCfg = Release|x64 - {BB73BFD4-454F-42C8-AFE6-FA890A8BD8FC}.Release|x64.Build.0 = Release|x64 - {0E6A3C08-86E8-495B-976B-2666AB16501C}.Debug|Win32.ActiveCfg = Debug|Win32 - {0E6A3C08-86E8-495B-976B-2666AB16501C}.Debug|Win32.Build.0 = Debug|Win32 - {0E6A3C08-86E8-495B-976B-2666AB16501C}.Debug|x64.ActiveCfg = Debug|x64 - {0E6A3C08-86E8-495B-976B-2666AB16501C}.Debug|x64.Build.0 = Debug|x64 - {0E6A3C08-86E8-495B-976B-2666AB16501C}.Release|Win32.ActiveCfg = Release|Win32 - {0E6A3C08-86E8-495B-976B-2666AB16501C}.Release|Win32.Build.0 = Release|Win32 - {0E6A3C08-86E8-495B-976B-2666AB16501C}.Release|x64.ActiveCfg = Release|x64 - {0E6A3C08-86E8-495B-976B-2666AB16501C}.Release|x64.Build.0 = Release|x64 - {79942922-E02C-486D-9EE3-A13C0876C4C2}.Debug|Win32.ActiveCfg = Debug|Win32 - {79942922-E02C-486D-9EE3-A13C0876C4C2}.Debug|Win32.Build.0 = Debug|Win32 - {79942922-E02C-486D-9EE3-A13C0876C4C2}.Debug|x64.ActiveCfg = Debug|x64 - {79942922-E02C-486D-9EE3-A13C0876C4C2}.Debug|x64.Build.0 = Debug|x64 - {79942922-E02C-486D-9EE3-A13C0876C4C2}.Release|Win32.ActiveCfg = Release|Win32 - {79942922-E02C-486D-9EE3-A13C0876C4C2}.Release|Win32.Build.0 = Release|Win32 - {79942922-E02C-486D-9EE3-A13C0876C4C2}.Release|x64.ActiveCfg = Release|x64 - {79942922-E02C-486D-9EE3-A13C0876C4C2}.Release|x64.Build.0 = Release|x64 - {1E3BED58-2F2C-463A-B9FD-9A55235C6840}.Debug|Win32.ActiveCfg = Debug|Win32 - {1E3BED58-2F2C-463A-B9FD-9A55235C6840}.Debug|Win32.Build.0 = Debug|Win32 - {1E3BED58-2F2C-463A-B9FD-9A55235C6840}.Debug|x64.ActiveCfg = Debug|x64 - {1E3BED58-2F2C-463A-B9FD-9A55235C6840}.Debug|x64.Build.0 = Debug|x64 - {1E3BED58-2F2C-463A-B9FD-9A55235C6840}.Release|Win32.ActiveCfg = Release|Win32 - {1E3BED58-2F2C-463A-B9FD-9A55235C6840}.Release|Win32.Build.0 = Release|Win32 - {1E3BED58-2F2C-463A-B9FD-9A55235C6840}.Release|x64.ActiveCfg = Release|x64 - {1E3BED58-2F2C-463A-B9FD-9A55235C6840}.Release|x64.Build.0 = Release|x64 - {DD317CB5-6337-498F-A560-553B5558E133}.Debug|Win32.ActiveCfg = Debug|Win32 - {DD317CB5-6337-498F-A560-553B5558E133}.Debug|Win32.Build.0 = Debug|Win32 - {DD317CB5-6337-498F-A560-553B5558E133}.Debug|x64.ActiveCfg = Debug|x64 - {DD317CB5-6337-498F-A560-553B5558E133}.Debug|x64.Build.0 = Debug|x64 - {DD317CB5-6337-498F-A560-553B5558E133}.Release|Win32.ActiveCfg = Release|Win32 - {DD317CB5-6337-498F-A560-553B5558E133}.Release|Win32.Build.0 = Release|Win32 - {DD317CB5-6337-498F-A560-553B5558E133}.Release|x64.ActiveCfg = Release|x64 - {DD317CB5-6337-498F-A560-553B5558E133}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "iflist", "iflist\iflist.vcproj", "{B0C740E1-73A3-43C7-B0CB-B715A4E691DD}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "basic_dump", "misc\basic_dump.vcproj", "{66297062-96A0-4F0E-B147-3C8384031232}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "basic_dump_ex", "misc\basic_dump_ex.vcproj", "{92849630-6B09-409C-A7AD-E91E682558B1}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "readfile", "misc\readfile.vcproj", "{161E7606-F4CD-4A04-AB6B-5837F7818EE1}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "readfile_ex", "misc\readfile_ex.vcproj", "{3071DFB6-68F8-41EF-A56C-0C7A71B6967C}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "savedump", "misc\savedump.vcproj", "{1B8791CB-DD15-46BF-B0A2-879892085538}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sendpack", "misc\sendpack.vcproj", "{1C376689-5F61-48E7-AE83-0DED9EE9E458}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pcap_filter", "pcap_filter\pcap_filter.vcproj", "{B9F68F6F-22AE-47A2-A3A3-1212831AF9FF}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pktdump_ex", "pktdump_ex\pktdump_ex.vcproj", "{3D62DEB4-3536-44AE-8E4B-AD6DFF1B795E}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sendcap", "sendcap\sendcap.vcproj", "{C6712171-F9B8-4A1E-A774-5D93C9116CEE}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "smp_1", "smp_1\smp_1.vcproj", "{21F49E7F-6C58-4DA5-ABE5-A9DFB6165C83}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tcptop", "tcptop\tcptop.vcproj", "{B671D5DF-3A80-4A21-BC01-79E3FB73D372}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "UDPdump", "UDPdump\UDPdump.vcproj", "{42E5F1D6-6E83-4C13-83CC-C6CD83478C58}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "UserBridge", "UserLevelBridge\UserBridge.vcproj", "{BB73BFD4-454F-42C8-AFE6-FA890A8BD8FC}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "GetMacAddress", "PacketDriver\GetMacAddress\GetMacAddress.vcproj", "{0E6A3C08-86E8-495B-976B-2666AB16501C}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TestPacketCapture", "PacketDriver\TestPacketCapture\TestPacketCapture.vcproj", "{79942922-E02C-486D-9EE3-A13C0876C4C2}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TestPacketSend", "PacketDriver\TestPacketSend\TestPacketSend.vcproj", "{1E3BED58-2F2C-463A-B9FD-9A55235C6840}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pcap_fopen", "pcap_fopen\pcap_fopen.vcproj", "{DD317CB5-6337-498F-A560-553B5558E133}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {B0C740E1-73A3-43C7-B0CB-B715A4E691DD}.Debug|Win32.ActiveCfg = Debug|Win32 + {B0C740E1-73A3-43C7-B0CB-B715A4E691DD}.Debug|Win32.Build.0 = Debug|Win32 + {B0C740E1-73A3-43C7-B0CB-B715A4E691DD}.Debug|x64.ActiveCfg = Debug|x64 + {B0C740E1-73A3-43C7-B0CB-B715A4E691DD}.Debug|x64.Build.0 = Debug|x64 + {B0C740E1-73A3-43C7-B0CB-B715A4E691DD}.Release|Win32.ActiveCfg = Release|Win32 + {B0C740E1-73A3-43C7-B0CB-B715A4E691DD}.Release|Win32.Build.0 = Release|Win32 + {B0C740E1-73A3-43C7-B0CB-B715A4E691DD}.Release|x64.ActiveCfg = Release|x64 + {B0C740E1-73A3-43C7-B0CB-B715A4E691DD}.Release|x64.Build.0 = Release|x64 + {66297062-96A0-4F0E-B147-3C8384031232}.Debug|Win32.ActiveCfg = Debug|Win32 + {66297062-96A0-4F0E-B147-3C8384031232}.Debug|Win32.Build.0 = Debug|Win32 + {66297062-96A0-4F0E-B147-3C8384031232}.Debug|x64.ActiveCfg = Debug|x64 + {66297062-96A0-4F0E-B147-3C8384031232}.Debug|x64.Build.0 = Debug|x64 + {66297062-96A0-4F0E-B147-3C8384031232}.Release|Win32.ActiveCfg = Release|Win32 + {66297062-96A0-4F0E-B147-3C8384031232}.Release|Win32.Build.0 = Release|Win32 + {66297062-96A0-4F0E-B147-3C8384031232}.Release|x64.ActiveCfg = Release|x64 + {66297062-96A0-4F0E-B147-3C8384031232}.Release|x64.Build.0 = Release|x64 + {92849630-6B09-409C-A7AD-E91E682558B1}.Debug|Win32.ActiveCfg = Debug|Win32 + {92849630-6B09-409C-A7AD-E91E682558B1}.Debug|Win32.Build.0 = Debug|Win32 + {92849630-6B09-409C-A7AD-E91E682558B1}.Debug|x64.ActiveCfg = Debug|x64 + {92849630-6B09-409C-A7AD-E91E682558B1}.Debug|x64.Build.0 = Debug|x64 + {92849630-6B09-409C-A7AD-E91E682558B1}.Release|Win32.ActiveCfg = Release|Win32 + {92849630-6B09-409C-A7AD-E91E682558B1}.Release|Win32.Build.0 = Release|Win32 + {92849630-6B09-409C-A7AD-E91E682558B1}.Release|x64.ActiveCfg = Release|x64 + {92849630-6B09-409C-A7AD-E91E682558B1}.Release|x64.Build.0 = Release|x64 + {161E7606-F4CD-4A04-AB6B-5837F7818EE1}.Debug|Win32.ActiveCfg = Debug|Win32 + {161E7606-F4CD-4A04-AB6B-5837F7818EE1}.Debug|Win32.Build.0 = Debug|Win32 + {161E7606-F4CD-4A04-AB6B-5837F7818EE1}.Debug|x64.ActiveCfg = Debug|x64 + {161E7606-F4CD-4A04-AB6B-5837F7818EE1}.Debug|x64.Build.0 = Debug|x64 + {161E7606-F4CD-4A04-AB6B-5837F7818EE1}.Release|Win32.ActiveCfg = Release|Win32 + {161E7606-F4CD-4A04-AB6B-5837F7818EE1}.Release|Win32.Build.0 = Release|Win32 + {161E7606-F4CD-4A04-AB6B-5837F7818EE1}.Release|x64.ActiveCfg = Release|x64 + {161E7606-F4CD-4A04-AB6B-5837F7818EE1}.Release|x64.Build.0 = Release|x64 + {3071DFB6-68F8-41EF-A56C-0C7A71B6967C}.Debug|Win32.ActiveCfg = Debug|Win32 + {3071DFB6-68F8-41EF-A56C-0C7A71B6967C}.Debug|Win32.Build.0 = Debug|Win32 + {3071DFB6-68F8-41EF-A56C-0C7A71B6967C}.Debug|x64.ActiveCfg = Debug|x64 + {3071DFB6-68F8-41EF-A56C-0C7A71B6967C}.Debug|x64.Build.0 = Debug|x64 + {3071DFB6-68F8-41EF-A56C-0C7A71B6967C}.Release|Win32.ActiveCfg = Release|Win32 + {3071DFB6-68F8-41EF-A56C-0C7A71B6967C}.Release|Win32.Build.0 = Release|Win32 + {3071DFB6-68F8-41EF-A56C-0C7A71B6967C}.Release|x64.ActiveCfg = Release|x64 + {3071DFB6-68F8-41EF-A56C-0C7A71B6967C}.Release|x64.Build.0 = Release|x64 + {1B8791CB-DD15-46BF-B0A2-879892085538}.Debug|Win32.ActiveCfg = Debug|Win32 + {1B8791CB-DD15-46BF-B0A2-879892085538}.Debug|Win32.Build.0 = Debug|Win32 + {1B8791CB-DD15-46BF-B0A2-879892085538}.Debug|x64.ActiveCfg = Debug|x64 + {1B8791CB-DD15-46BF-B0A2-879892085538}.Debug|x64.Build.0 = Debug|x64 + {1B8791CB-DD15-46BF-B0A2-879892085538}.Release|Win32.ActiveCfg = Release|Win32 + {1B8791CB-DD15-46BF-B0A2-879892085538}.Release|Win32.Build.0 = Release|Win32 + {1B8791CB-DD15-46BF-B0A2-879892085538}.Release|x64.ActiveCfg = Release|x64 + {1B8791CB-DD15-46BF-B0A2-879892085538}.Release|x64.Build.0 = Release|x64 + {1C376689-5F61-48E7-AE83-0DED9EE9E458}.Debug|Win32.ActiveCfg = Debug|Win32 + {1C376689-5F61-48E7-AE83-0DED9EE9E458}.Debug|Win32.Build.0 = Debug|Win32 + {1C376689-5F61-48E7-AE83-0DED9EE9E458}.Debug|x64.ActiveCfg = Debug|x64 + {1C376689-5F61-48E7-AE83-0DED9EE9E458}.Debug|x64.Build.0 = Debug|x64 + {1C376689-5F61-48E7-AE83-0DED9EE9E458}.Release|Win32.ActiveCfg = Release|Win32 + {1C376689-5F61-48E7-AE83-0DED9EE9E458}.Release|Win32.Build.0 = Release|Win32 + {1C376689-5F61-48E7-AE83-0DED9EE9E458}.Release|x64.ActiveCfg = Release|x64 + {1C376689-5F61-48E7-AE83-0DED9EE9E458}.Release|x64.Build.0 = Release|x64 + {B9F68F6F-22AE-47A2-A3A3-1212831AF9FF}.Debug|Win32.ActiveCfg = Debug|Win32 + {B9F68F6F-22AE-47A2-A3A3-1212831AF9FF}.Debug|Win32.Build.0 = Debug|Win32 + {B9F68F6F-22AE-47A2-A3A3-1212831AF9FF}.Debug|x64.ActiveCfg = Debug|x64 + {B9F68F6F-22AE-47A2-A3A3-1212831AF9FF}.Debug|x64.Build.0 = Debug|x64 + {B9F68F6F-22AE-47A2-A3A3-1212831AF9FF}.Release|Win32.ActiveCfg = Release|Win32 + {B9F68F6F-22AE-47A2-A3A3-1212831AF9FF}.Release|Win32.Build.0 = Release|Win32 + {B9F68F6F-22AE-47A2-A3A3-1212831AF9FF}.Release|x64.ActiveCfg = Release|x64 + {B9F68F6F-22AE-47A2-A3A3-1212831AF9FF}.Release|x64.Build.0 = Release|x64 + {3D62DEB4-3536-44AE-8E4B-AD6DFF1B795E}.Debug|Win32.ActiveCfg = Debug|Win32 + {3D62DEB4-3536-44AE-8E4B-AD6DFF1B795E}.Debug|Win32.Build.0 = Debug|Win32 + {3D62DEB4-3536-44AE-8E4B-AD6DFF1B795E}.Debug|x64.ActiveCfg = Debug|x64 + {3D62DEB4-3536-44AE-8E4B-AD6DFF1B795E}.Debug|x64.Build.0 = Debug|x64 + {3D62DEB4-3536-44AE-8E4B-AD6DFF1B795E}.Release|Win32.ActiveCfg = Release|Win32 + {3D62DEB4-3536-44AE-8E4B-AD6DFF1B795E}.Release|Win32.Build.0 = Release|Win32 + {3D62DEB4-3536-44AE-8E4B-AD6DFF1B795E}.Release|x64.ActiveCfg = Release|x64 + {3D62DEB4-3536-44AE-8E4B-AD6DFF1B795E}.Release|x64.Build.0 = Release|x64 + {C6712171-F9B8-4A1E-A774-5D93C9116CEE}.Debug|Win32.ActiveCfg = Debug|Win32 + {C6712171-F9B8-4A1E-A774-5D93C9116CEE}.Debug|Win32.Build.0 = Debug|Win32 + {C6712171-F9B8-4A1E-A774-5D93C9116CEE}.Debug|x64.ActiveCfg = Debug|x64 + {C6712171-F9B8-4A1E-A774-5D93C9116CEE}.Debug|x64.Build.0 = Debug|x64 + {C6712171-F9B8-4A1E-A774-5D93C9116CEE}.Release|Win32.ActiveCfg = Release|Win32 + {C6712171-F9B8-4A1E-A774-5D93C9116CEE}.Release|Win32.Build.0 = Release|Win32 + {C6712171-F9B8-4A1E-A774-5D93C9116CEE}.Release|x64.ActiveCfg = Release|x64 + {C6712171-F9B8-4A1E-A774-5D93C9116CEE}.Release|x64.Build.0 = Release|x64 + {21F49E7F-6C58-4DA5-ABE5-A9DFB6165C83}.Debug|Win32.ActiveCfg = Debug|Win32 + {21F49E7F-6C58-4DA5-ABE5-A9DFB6165C83}.Debug|Win32.Build.0 = Debug|Win32 + {21F49E7F-6C58-4DA5-ABE5-A9DFB6165C83}.Debug|x64.ActiveCfg = Debug|x64 + {21F49E7F-6C58-4DA5-ABE5-A9DFB6165C83}.Debug|x64.Build.0 = Debug|x64 + {21F49E7F-6C58-4DA5-ABE5-A9DFB6165C83}.Release|Win32.ActiveCfg = Release|Win32 + {21F49E7F-6C58-4DA5-ABE5-A9DFB6165C83}.Release|Win32.Build.0 = Release|Win32 + {21F49E7F-6C58-4DA5-ABE5-A9DFB6165C83}.Release|x64.ActiveCfg = Release|x64 + {21F49E7F-6C58-4DA5-ABE5-A9DFB6165C83}.Release|x64.Build.0 = Release|x64 + {B671D5DF-3A80-4A21-BC01-79E3FB73D372}.Debug|Win32.ActiveCfg = Debug|Win32 + {B671D5DF-3A80-4A21-BC01-79E3FB73D372}.Debug|Win32.Build.0 = Debug|Win32 + {B671D5DF-3A80-4A21-BC01-79E3FB73D372}.Debug|x64.ActiveCfg = Debug|x64 + {B671D5DF-3A80-4A21-BC01-79E3FB73D372}.Debug|x64.Build.0 = Debug|x64 + {B671D5DF-3A80-4A21-BC01-79E3FB73D372}.Release|Win32.ActiveCfg = Release|Win32 + {B671D5DF-3A80-4A21-BC01-79E3FB73D372}.Release|Win32.Build.0 = Release|Win32 + {B671D5DF-3A80-4A21-BC01-79E3FB73D372}.Release|x64.ActiveCfg = Release|x64 + {B671D5DF-3A80-4A21-BC01-79E3FB73D372}.Release|x64.Build.0 = Release|x64 + {42E5F1D6-6E83-4C13-83CC-C6CD83478C58}.Debug|Win32.ActiveCfg = Debug|Win32 + {42E5F1D6-6E83-4C13-83CC-C6CD83478C58}.Debug|Win32.Build.0 = Debug|Win32 + {42E5F1D6-6E83-4C13-83CC-C6CD83478C58}.Debug|x64.ActiveCfg = Debug|x64 + {42E5F1D6-6E83-4C13-83CC-C6CD83478C58}.Debug|x64.Build.0 = Debug|x64 + {42E5F1D6-6E83-4C13-83CC-C6CD83478C58}.Release|Win32.ActiveCfg = Release|Win32 + {42E5F1D6-6E83-4C13-83CC-C6CD83478C58}.Release|Win32.Build.0 = Release|Win32 + {42E5F1D6-6E83-4C13-83CC-C6CD83478C58}.Release|x64.ActiveCfg = Release|x64 + {42E5F1D6-6E83-4C13-83CC-C6CD83478C58}.Release|x64.Build.0 = Release|x64 + {BB73BFD4-454F-42C8-AFE6-FA890A8BD8FC}.Debug|Win32.ActiveCfg = Debug|Win32 + {BB73BFD4-454F-42C8-AFE6-FA890A8BD8FC}.Debug|Win32.Build.0 = Debug|Win32 + {BB73BFD4-454F-42C8-AFE6-FA890A8BD8FC}.Debug|x64.ActiveCfg = Debug|x64 + {BB73BFD4-454F-42C8-AFE6-FA890A8BD8FC}.Debug|x64.Build.0 = Debug|x64 + {BB73BFD4-454F-42C8-AFE6-FA890A8BD8FC}.Release|Win32.ActiveCfg = Release|Win32 + {BB73BFD4-454F-42C8-AFE6-FA890A8BD8FC}.Release|Win32.Build.0 = Release|Win32 + {BB73BFD4-454F-42C8-AFE6-FA890A8BD8FC}.Release|x64.ActiveCfg = Release|x64 + {BB73BFD4-454F-42C8-AFE6-FA890A8BD8FC}.Release|x64.Build.0 = Release|x64 + {0E6A3C08-86E8-495B-976B-2666AB16501C}.Debug|Win32.ActiveCfg = Debug|Win32 + {0E6A3C08-86E8-495B-976B-2666AB16501C}.Debug|Win32.Build.0 = Debug|Win32 + {0E6A3C08-86E8-495B-976B-2666AB16501C}.Debug|x64.ActiveCfg = Debug|x64 + {0E6A3C08-86E8-495B-976B-2666AB16501C}.Debug|x64.Build.0 = Debug|x64 + {0E6A3C08-86E8-495B-976B-2666AB16501C}.Release|Win32.ActiveCfg = Release|Win32 + {0E6A3C08-86E8-495B-976B-2666AB16501C}.Release|Win32.Build.0 = Release|Win32 + {0E6A3C08-86E8-495B-976B-2666AB16501C}.Release|x64.ActiveCfg = Release|x64 + {0E6A3C08-86E8-495B-976B-2666AB16501C}.Release|x64.Build.0 = Release|x64 + {79942922-E02C-486D-9EE3-A13C0876C4C2}.Debug|Win32.ActiveCfg = Debug|Win32 + {79942922-E02C-486D-9EE3-A13C0876C4C2}.Debug|Win32.Build.0 = Debug|Win32 + {79942922-E02C-486D-9EE3-A13C0876C4C2}.Debug|x64.ActiveCfg = Debug|x64 + {79942922-E02C-486D-9EE3-A13C0876C4C2}.Debug|x64.Build.0 = Debug|x64 + {79942922-E02C-486D-9EE3-A13C0876C4C2}.Release|Win32.ActiveCfg = Release|Win32 + {79942922-E02C-486D-9EE3-A13C0876C4C2}.Release|Win32.Build.0 = Release|Win32 + {79942922-E02C-486D-9EE3-A13C0876C4C2}.Release|x64.ActiveCfg = Release|x64 + {79942922-E02C-486D-9EE3-A13C0876C4C2}.Release|x64.Build.0 = Release|x64 + {1E3BED58-2F2C-463A-B9FD-9A55235C6840}.Debug|Win32.ActiveCfg = Debug|Win32 + {1E3BED58-2F2C-463A-B9FD-9A55235C6840}.Debug|Win32.Build.0 = Debug|Win32 + {1E3BED58-2F2C-463A-B9FD-9A55235C6840}.Debug|x64.ActiveCfg = Debug|x64 + {1E3BED58-2F2C-463A-B9FD-9A55235C6840}.Debug|x64.Build.0 = Debug|x64 + {1E3BED58-2F2C-463A-B9FD-9A55235C6840}.Release|Win32.ActiveCfg = Release|Win32 + {1E3BED58-2F2C-463A-B9FD-9A55235C6840}.Release|Win32.Build.0 = Release|Win32 + {1E3BED58-2F2C-463A-B9FD-9A55235C6840}.Release|x64.ActiveCfg = Release|x64 + {1E3BED58-2F2C-463A-B9FD-9A55235C6840}.Release|x64.Build.0 = Release|x64 + {DD317CB5-6337-498F-A560-553B5558E133}.Debug|Win32.ActiveCfg = Debug|Win32 + {DD317CB5-6337-498F-A560-553B5558E133}.Debug|Win32.Build.0 = Debug|Win32 + {DD317CB5-6337-498F-A560-553B5558E133}.Debug|x64.ActiveCfg = Debug|x64 + {DD317CB5-6337-498F-A560-553B5558E133}.Debug|x64.Build.0 = Debug|x64 + {DD317CB5-6337-498F-A560-553B5558E133}.Release|Win32.ActiveCfg = Release|Win32 + {DD317CB5-6337-498F-A560-553B5558E133}.Release|Win32.Build.0 = Release|Win32 + {DD317CB5-6337-498F-A560-553B5558E133}.Release|x64.ActiveCfg = Release|x64 + {DD317CB5-6337-498F-A560-553B5558E133}.Release|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/libs/WinPcap-413-173-b4/Examples-remote/MakeaAll.dsw b/libs/WpdPack_4_1_2/Examples-remote/MakeaAll.dsw similarity index 94% rename from libs/WinPcap-413-173-b4/Examples-remote/MakeaAll.dsw rename to libs/WpdPack_4_1_2/Examples-remote/MakeaAll.dsw index 1772c2aa..3236b641 100644 --- a/libs/WinPcap-413-173-b4/Examples-remote/MakeaAll.dsw +++ b/libs/WpdPack_4_1_2/Examples-remote/MakeaAll.dsw @@ -1,221 +1,221 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "GetMacAddress"=".\PacketDriver\GetMacAddress\GetMacAddress.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "TestPacketCapture"=".\PacketDriver\TestPacketCapture\TestPacketCapture.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "TestPacketSend"=".\PacketDriver\TestPacketSend\TestPacketSend.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "UDPdump"=".\UDPdump\UDPdump.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "UserBridge"=".\UserLevelBridge\UserBridge.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "basic_dump"=".\misc\basic_dump.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "basic_dump_ex"=".\misc\basic_dump_ex.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "iflist"=".\iflist\iflist.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "pcap_filter"=".\pcap_filter\pcap_filter.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "pktdump_ex"=".\pktdump_ex\pktdump_ex.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "readfile"=".\misc\readfile.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "readfile_ex"=".\misc\readfile_ex.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "savedump"=".\misc\savedump.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "sendcap"=".\sendcap\sendcap.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "sendpack"=".\misc\sendpack.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "smp_1"=".\smp_1\smp_1.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "tcptop"=".\tcptop\tcptop.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "GetMacAddress"=".\PacketDriver\GetMacAddress\GetMacAddress.dsp" - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "TestPacketCapture"=".\PacketDriver\TestPacketCapture\TestPacketCapture.dsp" - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "TestPacketSend"=".\PacketDriver\TestPacketSend\TestPacketSend.dsp" - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "UDPdump"=".\UDPdump\UDPdump.dsp" - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "UserBridge"=".\UserLevelBridge\UserBridge.dsp" - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "basic_dump"=".\misc\basic_dump.dsp" - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "basic_dump_ex"=".\misc\basic_dump_ex.dsp" - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "iflist"=".\iflist\iflist.dsp" - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "pcap_filter"=".\pcap_filter\pcap_filter.dsp" - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "pktdump_ex"=".\pktdump_ex\pktdump_ex.dsp" - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "readfile"=".\misc\readfile.dsp" - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "readfile_ex"=".\misc\readfile_ex.dsp" - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "savedump"=".\misc\savedump.dsp" - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "sendcap"=".\sendcap\sendcap.dsp" - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "sendpack"=".\misc\sendpack.dsp" - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "smp_1"=".\smp_1\smp_1.dsp" - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "tcptop"=".\tcptop\tcptop.dsp" - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/libs/WinPcap-413-173-b4/Examples-remote/PacketDriver/GetMacAddress/GetMacAddress.c b/libs/WpdPack_4_1_2/Examples-remote/PacketDriver/GetMacAddress/GetMacAddress.c similarity index 96% rename from libs/WinPcap-413-173-b4/Examples-remote/PacketDriver/GetMacAddress/GetMacAddress.c rename to libs/WpdPack_4_1_2/Examples-remote/PacketDriver/GetMacAddress/GetMacAddress.c index 4cb6c0c5..014da74f 100644 --- a/libs/WinPcap-413-173-b4/Examples-remote/PacketDriver/GetMacAddress/GetMacAddress.c +++ b/libs/WpdPack_4_1_2/Examples-remote/PacketDriver/GetMacAddress/GetMacAddress.c @@ -1,152 +1,152 @@ -/* - * Copyright (c) 1999 - 2005 NetGroup, Politecnico di Torino (Italy) - * Copyright (c) 2005 - 2006 CACE Technologies, Davis (California) - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the Politecnico di Torino, CACE Technologies - * nor the names of its contributors may be used to endorse or promote - * products derived from this software without specific prior written - * permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ - -#include -#include -#include "..\..\..\Include\packet32.h" -#include - -#define Max_Num_Adapter 10 -char AdapterList[Max_Num_Adapter][1024]; - -int main() -{ - LPADAPTER lpAdapter = 0; - int i; - DWORD dwErrorCode; - char AdapterName[8192]; - char *temp,*temp1; - int AdapterNum=0,Open; - ULONG AdapterLength; - PPACKET_OID_DATA OidData; - BOOLEAN Status; - - // - // Obtain the name of the adapters installed on this machine - // - - printf("Packet.dll test application. Library version:%s\n", PacketGetVersion()); - - printf("Adapters installed:\n"); - i=0; - - AdapterLength = sizeof(AdapterName); - - if(PacketGetAdapterNames(AdapterName,&AdapterLength)==FALSE){ - printf("Unable to retrieve the list of the adapters!\n"); - return -1; - } - temp=AdapterName; - temp1=AdapterName; - - while ((*temp!='\0')||(*(temp-1)!='\0')) - { - if (*temp=='\0') - { - memcpy(AdapterList[i],temp1,temp-temp1); - temp1=temp+1; - i++; - } - temp++; - } - - AdapterNum=i; - for (i=0;iAdapterNum) printf("\nThe number must be smaller than %d",AdapterNum); - } while (Open>AdapterNum); - - - // - // Open the selected adapter - // - - lpAdapter = PacketOpenAdapter(AdapterList[Open-1]); - - if (!lpAdapter || (lpAdapter->hFile == INVALID_HANDLE_VALUE)) - { - dwErrorCode=GetLastError(); - printf("Unable to open the adapter, Error Code : %lx\n",dwErrorCode); - - return -1; - } - - // - // Allocate a buffer to get the MAC adress - // - - OidData = malloc(6 + sizeof(PACKET_OID_DATA)); - if (OidData == NULL) - { - printf("error allocating memory!\n"); - PacketCloseAdapter(lpAdapter); - return -1; - } - - // - // Retrieve the adapter MAC querying the NIC driver - // - - OidData->Oid = OID_802_3_CURRENT_ADDRESS; - - OidData->Length = 6; - ZeroMemory(OidData->Data, 6); - - Status = PacketRequest(lpAdapter, FALSE, OidData); - if(Status) - { - printf("The MAC address of the adapter is %.2x:%.2x:%.2x:%.2x:%.2x:%.2x\n", - (OidData->Data)[0], - (OidData->Data)[1], - (OidData->Data)[2], - (OidData->Data)[3], - (OidData->Data)[4], - (OidData->Data)[5]); - } - else - { - printf("error retrieving the MAC address of the adapter!\n"); - } - - free(OidData); - PacketCloseAdapter(lpAdapter); - return (0); -} - +/* + * Copyright (c) 1999 - 2005 NetGroup, Politecnico di Torino (Italy) + * Copyright (c) 2005 - 2006 CACE Technologies, Davis (California) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Politecnico di Torino, CACE Technologies + * nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written + * permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#include +#include +#include "..\..\..\Include\packet32.h" +#include + +#define Max_Num_Adapter 10 +char AdapterList[Max_Num_Adapter][1024]; + +int main() +{ + LPADAPTER lpAdapter = 0; + int i; + DWORD dwErrorCode; + char AdapterName[8192]; + char *temp,*temp1; + int AdapterNum=0,Open; + ULONG AdapterLength; + PPACKET_OID_DATA OidData; + BOOLEAN Status; + + // + // Obtain the name of the adapters installed on this machine + // + + printf("Packet.dll test application. Library version:%s\n", PacketGetVersion()); + + printf("Adapters installed:\n"); + i=0; + + AdapterLength = sizeof(AdapterName); + + if(PacketGetAdapterNames(AdapterName,&AdapterLength)==FALSE){ + printf("Unable to retrieve the list of the adapters!\n"); + return -1; + } + temp=AdapterName; + temp1=AdapterName; + + while ((*temp!='\0')||(*(temp-1)!='\0')) + { + if (*temp=='\0') + { + memcpy(AdapterList[i],temp1,temp-temp1); + temp1=temp+1; + i++; + } + temp++; + } + + AdapterNum=i; + for (i=0;iAdapterNum) printf("\nThe number must be smaller than %d",AdapterNum); + } while (Open>AdapterNum); + + + // + // Open the selected adapter + // + + lpAdapter = PacketOpenAdapter(AdapterList[Open-1]); + + if (!lpAdapter || (lpAdapter->hFile == INVALID_HANDLE_VALUE)) + { + dwErrorCode=GetLastError(); + printf("Unable to open the adapter, Error Code : %lx\n",dwErrorCode); + + return -1; + } + + // + // Allocate a buffer to get the MAC adress + // + + OidData = malloc(6 + sizeof(PACKET_OID_DATA)); + if (OidData == NULL) + { + printf("error allocating memory!\n"); + PacketCloseAdapter(lpAdapter); + return -1; + } + + // + // Retrieve the adapter MAC querying the NIC driver + // + + OidData->Oid = OID_802_3_CURRENT_ADDRESS; + + OidData->Length = 6; + ZeroMemory(OidData->Data, 6); + + Status = PacketRequest(lpAdapter, FALSE, OidData); + if(Status) + { + printf("The MAC address of the adapter is %.2x:%.2x:%.2x:%.2x:%.2x:%.2x\n", + (OidData->Data)[0], + (OidData->Data)[1], + (OidData->Data)[2], + (OidData->Data)[3], + (OidData->Data)[4], + (OidData->Data)[5]); + } + else + { + printf("error retrieving the MAC address of the adapter!\n"); + } + + free(OidData); + PacketCloseAdapter(lpAdapter); + return (0); +} + diff --git a/libs/WinPcap-413-173-b4/Examples-remote/PacketDriver/GetMacAddress/GetMacAddress.dsp b/libs/WpdPack_4_1_2/Examples-remote/PacketDriver/GetMacAddress/GetMacAddress.dsp similarity index 97% rename from libs/WinPcap-413-173-b4/Examples-remote/PacketDriver/GetMacAddress/GetMacAddress.dsp rename to libs/WpdPack_4_1_2/Examples-remote/PacketDriver/GetMacAddress/GetMacAddress.dsp index 1f3210e5..d7012902 100644 --- a/libs/WinPcap-413-173-b4/Examples-remote/PacketDriver/GetMacAddress/GetMacAddress.dsp +++ b/libs/WpdPack_4_1_2/Examples-remote/PacketDriver/GetMacAddress/GetMacAddress.dsp @@ -1,105 +1,105 @@ -# Microsoft Developer Studio Project File - Name="GetMacAddress" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=GetMacAddress - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "GetMacAddress.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "GetMacAddress.mak" CFG="GetMacAddress - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "GetMacAddress - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "GetMacAddress - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "GetMacAddress - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x410 /d "NDEBUG" -# ADD RSC /l 0x410 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "GetMacAddress - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x410 /d "_DEBUG" -# ADD RSC /l 0x410 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "GetMacAddress - Win32 Release" -# Name "GetMacAddress - Win32 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\GetMacAddress.c -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# Begin Source File - -SOURCE=..\..\..\lib\Packet.lib -# End Source File -# End Target -# End Project +# Microsoft Developer Studio Project File - Name="GetMacAddress" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Console Application" 0x0103 + +CFG=GetMacAddress - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "GetMacAddress.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "GetMacAddress.mak" CFG="GetMacAddress - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "GetMacAddress - Win32 Release" (based on "Win32 (x86) Console Application") +!MESSAGE "GetMacAddress - Win32 Debug" (based on "Win32 (x86) Console Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "GetMacAddress - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD BASE RSC /l 0x410 /d "NDEBUG" +# ADD RSC /l 0x410 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 + +!ELSEIF "$(CFG)" == "GetMacAddress - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c +# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c +# ADD BASE RSC /l 0x410 /d "_DEBUG" +# ADD RSC /l 0x410 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept + +!ENDIF + +# Begin Target + +# Name "GetMacAddress - Win32 Release" +# Name "GetMacAddress - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\GetMacAddress.c +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# End Group +# Begin Source File + +SOURCE=..\..\..\lib\Packet.lib +# End Source File +# End Target +# End Project diff --git a/libs/WinPcap-413-173-b4/Examples-remote/PacketDriver/GetMacAddress/GetMacAddress.vcproj b/libs/WpdPack_4_1_2/Examples-remote/PacketDriver/GetMacAddress/GetMacAddress.vcproj similarity index 95% rename from libs/WinPcap-413-173-b4/Examples-remote/PacketDriver/GetMacAddress/GetMacAddress.vcproj rename to libs/WpdPack_4_1_2/Examples-remote/PacketDriver/GetMacAddress/GetMacAddress.vcproj index 2ec3cbd5..4130c3f9 100644 --- a/libs/WinPcap-413-173-b4/Examples-remote/PacketDriver/GetMacAddress/GetMacAddress.vcproj +++ b/libs/WpdPack_4_1_2/Examples-remote/PacketDriver/GetMacAddress/GetMacAddress.vcproj @@ -1,364 +1,364 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/libs/WinPcap-413-173-b4/Examples-remote/PacketDriver/TestPacketCapture/TestPacketCapture.c b/libs/WpdPack_4_1_2/Examples-remote/PacketDriver/TestPacketCapture/TestPacketCapture.c similarity index 96% rename from libs/WinPcap-413-173-b4/Examples-remote/PacketDriver/TestPacketCapture/TestPacketCapture.c rename to libs/WpdPack_4_1_2/Examples-remote/PacketDriver/TestPacketCapture/TestPacketCapture.c index ce8ef754..4bc676dc 100644 --- a/libs/WinPcap-413-173-b4/Examples-remote/PacketDriver/TestPacketCapture/TestPacketCapture.c +++ b/libs/WpdPack_4_1_2/Examples-remote/PacketDriver/TestPacketCapture/TestPacketCapture.c @@ -1,244 +1,244 @@ -/* - * Copyright (c) 1999 - 2005 NetGroup, Politecnico di Torino (Italy) - * Copyright (c) 2005 - 2006 CACE Technologies, Davis (California) - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the Politecnico di Torino, CACE Technologies - * nor the names of its contributors may be used to endorse or promote - * products derived from this software without specific prior written - * permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ - - -#include -#include - - -#include "..\..\..\Include\packet32.h" -#include - -#define Max_Num_Adapter 10 - -// Prototypes - -void PrintPackets(LPPACKET lpPacket); - -char AdapterList[Max_Num_Adapter][1024]; - -int main() -{ -//define a pointer to an ADAPTER structure - -LPADAPTER lpAdapter = 0; - -//define a pointer to a PACKET structure - -LPPACKET lpPacket; - -int i; -DWORD dwErrorCode; - -//ascii strings -char AdapterName[8192]; // string that contains a list of the network adapters -char *temp,*temp1; - - -int AdapterNum=0,Open; -ULONG AdapterLength; - -char buffer[256000]; // buffer to hold the data coming from the driver - -struct bpf_stat stat; - - // - // Obtain the name of the adapters installed on this machine - // - printf("Packet.dll test application. Library version:%s\n", PacketGetVersion()); - - printf("Adapters installed:\n"); - i=0; - - AdapterLength = sizeof(AdapterName); - - if(PacketGetAdapterNames(AdapterName,&AdapterLength)==FALSE){ - printf("Unable to retrieve the list of the adapters!\n"); - return -1; - } - temp=AdapterName; - temp1=AdapterName; - - while ((*temp!='\0')||(*(temp-1)!='\0')) - { - if (*temp=='\0') - { - memcpy(AdapterList[i],temp1,temp-temp1); - temp1=temp+1; - i++; - } - temp++; - } - - AdapterNum=i; - for (i=0;iAdapterNum) printf("\nThe number must be smaller than %d",AdapterNum); - } while (Open>AdapterNum); - - - - - lpAdapter = PacketOpenAdapter(AdapterList[Open-1]); - - if (!lpAdapter || (lpAdapter->hFile == INVALID_HANDLE_VALUE)) - { - dwErrorCode=GetLastError(); - printf("Unable to open the adapter, Error Code : %lx\n",dwErrorCode); - - return -1; - } - - // set the network adapter in promiscuous mode - - if(PacketSetHwFilter(lpAdapter,NDIS_PACKET_TYPE_PROMISCUOUS)==FALSE){ - printf("Warning: unable to set promiscuous mode!\n"); - } - - // set a 512K buffer in the driver - if(PacketSetBuff(lpAdapter,512000)==FALSE){ - printf("Unable to set the kernel buffer!\n"); - return -1; - } - - // set a 1 second read timeout - if(PacketSetReadTimeout(lpAdapter,1000)==FALSE){ - printf("Warning: unable to set the read tiemout!\n"); - } - - //allocate and initialize a packet structure that will be used to - //receive the packets. - if((lpPacket = PacketAllocatePacket())==NULL){ - printf("\nError: failed to allocate the LPPACKET structure."); - return (-1); - } - PacketInitPacket(lpPacket,(char*)buffer,256000); - - //main capture loop - while(!_kbhit()) - { - // capture the packets - if(PacketReceivePacket(lpAdapter,lpPacket,TRUE)==FALSE){ - printf("Error: PacketReceivePacket failed"); - return (-1); - } - - PrintPackets(lpPacket); - } - - - //print the capture statistics - if(PacketGetStats(lpAdapter,&stat)==FALSE){ - printf("Warning: unable to get stats from the kernel!\n"); - } - else - printf("\n\n%d packets received.\n%d Packets lost",stat.bs_recv,stat.bs_drop); - - PacketFreePacket(lpPacket); - - // close the adapter and exit - - PacketCloseAdapter(lpAdapter); - return (0); -} - -// this function prints the content of a block of packets received from the driver - -void PrintPackets(LPPACKET lpPacket) -{ - - ULONG i, j, ulLines, ulen, ulBytesReceived; - char *pChar, *pLine, *base; - char *buf; - u_int off=0; - u_int tlen,tlen1; - struct bpf_hdr *hdr; - - ulBytesReceived = lpPacket->ulBytesReceived; - - - buf = lpPacket->Buffer; - - off=0; - - while(offbh_datalen; - tlen=hdr->bh_caplen; - printf("Packet length, captured portion: %ld, %ld\n", tlen1, tlen); - off+=hdr->bh_hdrlen; - - ulLines = (tlen + 15) / 16; - - pChar =(char*)(buf+off); - base=pChar; - off=Packet_WORDALIGN(off+tlen); - - for ( i=0; i 16 ) ? 16 : ulen; - tlen -= ulen; - - for ( j=0; j +#include + + +#include "..\..\..\Include\packet32.h" +#include + +#define Max_Num_Adapter 10 + +// Prototypes + +void PrintPackets(LPPACKET lpPacket); + +char AdapterList[Max_Num_Adapter][1024]; + +int main() +{ +//define a pointer to an ADAPTER structure + +LPADAPTER lpAdapter = 0; + +//define a pointer to a PACKET structure + +LPPACKET lpPacket; + +int i; +DWORD dwErrorCode; + +//ascii strings +char AdapterName[8192]; // string that contains a list of the network adapters +char *temp,*temp1; + + +int AdapterNum=0,Open; +ULONG AdapterLength; + +char buffer[256000]; // buffer to hold the data coming from the driver + +struct bpf_stat stat; + + // + // Obtain the name of the adapters installed on this machine + // + printf("Packet.dll test application. Library version:%s\n", PacketGetVersion()); + + printf("Adapters installed:\n"); + i=0; + + AdapterLength = sizeof(AdapterName); + + if(PacketGetAdapterNames(AdapterName,&AdapterLength)==FALSE){ + printf("Unable to retrieve the list of the adapters!\n"); + return -1; + } + temp=AdapterName; + temp1=AdapterName; + + while ((*temp!='\0')||(*(temp-1)!='\0')) + { + if (*temp=='\0') + { + memcpy(AdapterList[i],temp1,temp-temp1); + temp1=temp+1; + i++; + } + temp++; + } + + AdapterNum=i; + for (i=0;iAdapterNum) printf("\nThe number must be smaller than %d",AdapterNum); + } while (Open>AdapterNum); + + + + + lpAdapter = PacketOpenAdapter(AdapterList[Open-1]); + + if (!lpAdapter || (lpAdapter->hFile == INVALID_HANDLE_VALUE)) + { + dwErrorCode=GetLastError(); + printf("Unable to open the adapter, Error Code : %lx\n",dwErrorCode); + + return -1; + } + + // set the network adapter in promiscuous mode + + if(PacketSetHwFilter(lpAdapter,NDIS_PACKET_TYPE_PROMISCUOUS)==FALSE){ + printf("Warning: unable to set promiscuous mode!\n"); + } + + // set a 512K buffer in the driver + if(PacketSetBuff(lpAdapter,512000)==FALSE){ + printf("Unable to set the kernel buffer!\n"); + return -1; + } + + // set a 1 second read timeout + if(PacketSetReadTimeout(lpAdapter,1000)==FALSE){ + printf("Warning: unable to set the read tiemout!\n"); + } + + //allocate and initialize a packet structure that will be used to + //receive the packets. + if((lpPacket = PacketAllocatePacket())==NULL){ + printf("\nError: failed to allocate the LPPACKET structure."); + return (-1); + } + PacketInitPacket(lpPacket,(char*)buffer,256000); + + //main capture loop + while(!_kbhit()) + { + // capture the packets + if(PacketReceivePacket(lpAdapter,lpPacket,TRUE)==FALSE){ + printf("Error: PacketReceivePacket failed"); + return (-1); + } + + PrintPackets(lpPacket); + } + + + //print the capture statistics + if(PacketGetStats(lpAdapter,&stat)==FALSE){ + printf("Warning: unable to get stats from the kernel!\n"); + } + else + printf("\n\n%d packets received.\n%d Packets lost",stat.bs_recv,stat.bs_drop); + + PacketFreePacket(lpPacket); + + // close the adapter and exit + + PacketCloseAdapter(lpAdapter); + return (0); +} + +// this function prints the content of a block of packets received from the driver + +void PrintPackets(LPPACKET lpPacket) +{ + + ULONG i, j, ulLines, ulen, ulBytesReceived; + char *pChar, *pLine, *base; + char *buf; + u_int off=0; + u_int tlen,tlen1; + struct bpf_hdr *hdr; + + ulBytesReceived = lpPacket->ulBytesReceived; + + + buf = lpPacket->Buffer; + + off=0; + + while(offbh_datalen; + tlen=hdr->bh_caplen; + printf("Packet length, captured portion: %ld, %ld\n", tlen1, tlen); + off+=hdr->bh_hdrlen; + + ulLines = (tlen + 15) / 16; + + pChar =(char*)(buf+off); + base=pChar; + off=Packet_WORDALIGN(off+tlen); + + for ( i=0; i 16 ) ? 16 : ulen; + tlen -= ulen; + + for ( j=0; j -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=TestPacketCapture - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "TestPacketCapture.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "TestPacketCapture.mak" CFG="TestPacketCapture - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "TestPacketCapture - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "TestPacketCapture - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "TestPacketCapture - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x410 /d "NDEBUG" -# ADD RSC /l 0x410 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "TestPacketCapture - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x410 /d "_DEBUG" -# ADD RSC /l 0x410 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "TestPacketCapture - Win32 Release" -# Name "TestPacketCapture - Win32 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\TestPacketCapture.c -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# Begin Source File - -SOURCE=..\..\..\lib\Packet.lib -# End Source File -# End Target -# End Project +# Microsoft Developer Studio Project File - Name="TestPacketCapture" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Console Application" 0x0103 + +CFG=TestPacketCapture - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "TestPacketCapture.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "TestPacketCapture.mak" CFG="TestPacketCapture - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "TestPacketCapture - Win32 Release" (based on "Win32 (x86) Console Application") +!MESSAGE "TestPacketCapture - Win32 Debug" (based on "Win32 (x86) Console Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "TestPacketCapture - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD BASE RSC /l 0x410 /d "NDEBUG" +# ADD RSC /l 0x410 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 + +!ELSEIF "$(CFG)" == "TestPacketCapture - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c +# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c +# ADD BASE RSC /l 0x410 /d "_DEBUG" +# ADD RSC /l 0x410 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept + +!ENDIF + +# Begin Target + +# Name "TestPacketCapture - Win32 Release" +# Name "TestPacketCapture - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\TestPacketCapture.c +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# End Group +# Begin Source File + +SOURCE=..\..\..\lib\Packet.lib +# End Source File +# End Target +# End Project diff --git a/libs/WinPcap-413-173-b4/Examples-remote/PacketDriver/TestPacketCapture/TestPacketCapture.vcproj b/libs/WpdPack_4_1_2/Examples-remote/PacketDriver/TestPacketCapture/TestPacketCapture.vcproj similarity index 95% rename from libs/WinPcap-413-173-b4/Examples-remote/PacketDriver/TestPacketCapture/TestPacketCapture.vcproj rename to libs/WpdPack_4_1_2/Examples-remote/PacketDriver/TestPacketCapture/TestPacketCapture.vcproj index 40e38570..ab5783cd 100644 --- a/libs/WinPcap-413-173-b4/Examples-remote/PacketDriver/TestPacketCapture/TestPacketCapture.vcproj +++ b/libs/WpdPack_4_1_2/Examples-remote/PacketDriver/TestPacketCapture/TestPacketCapture.vcproj @@ -1,364 +1,364 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/libs/WinPcap-413-173-b4/Examples-remote/PacketDriver/TestPacketSend/TestPacketSend.c b/libs/WpdPack_4_1_2/Examples-remote/PacketDriver/TestPacketSend/TestPacketSend.c similarity index 96% rename from libs/WinPcap-413-173-b4/Examples-remote/PacketDriver/TestPacketSend/TestPacketSend.c rename to libs/WpdPack_4_1_2/Examples-remote/PacketDriver/TestPacketSend/TestPacketSend.c index cc86510f..b4a73bce 100644 --- a/libs/WinPcap-413-173-b4/Examples-remote/PacketDriver/TestPacketSend/TestPacketSend.c +++ b/libs/WpdPack_4_1_2/Examples-remote/PacketDriver/TestPacketSend/TestPacketSend.c @@ -1,235 +1,235 @@ -/* - * Copyright (c) 1999 - 2005 NetGroup, Politecnico di Torino (Italy) - * Copyright (c) 2005 - 2006 CACE Technologies, Davis (California) - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the Politecnico di Torino, CACE Technologies - * nor the names of its contributors may be used to endorse or promote - * products derived from this software without specific prior written - * permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ - -#include -#include -#include - -#include "..\..\..\Include\packet32.h" - - -#define Max_Num_Adapter 10 - -// Prototypes - -void PrintPackets(LPPACKET lpPacket); - -char AdapterList[Max_Num_Adapter][8192]; - - - -int main(int argc, char **argv) -{ -char packetbuff[5000]; - -// define a pointer to a ADAPTER structure - -LPADAPTER lpAdapter = 0; - -// define a pointer to a PACKET structure - -LPPACKET lpPacket; - -int i,npacks,Snaplen; -DWORD dwErrorCode; - -//ascii strings -char AdapterName[8192]; // string that contains a list of the network adapters -char *temp,*temp1; - -int AdapterNum=0,Open; -ULONG AdapterLength; - -float cpu_time; - - printf("Traffic Generator v 0.9999\nCopyright 1999 Loris Degioanni (loris@netgroup-serv.polito.it)"); - printf("\nSends a set of packets to the network using packet.dll API.\n"); - - if (argc == 1){ - printf("\n\n Usage: TestpacketSend [-i adapter] -n npacks -s size"); - printf("\n size is between 60 and 1514\n\n"); - return -1; - } - - - AdapterName[0]=0; - - //get the command line parameters - for(i=1;iAdapterNum) printf("\nThe number must be smaller than %d",AdapterNum); - } while (Open>AdapterNum); - - - - - lpAdapter = PacketOpenAdapter(AdapterList[Open-1]); - - if (!lpAdapter || (lpAdapter->hFile == INVALID_HANDLE_VALUE)) - { - dwErrorCode=GetLastError(); - printf("Unable to open the driver, Error Code : %lx\n",dwErrorCode); - - return(-1); - } - - } - else{ - - lpAdapter = PacketOpenAdapter(AdapterName); - - if (!lpAdapter || (lpAdapter->hFile == INVALID_HANDLE_VALUE)) - { - dwErrorCode=GetLastError(); - printf("Unable to open the driver, Error Code : %lx\n",dwErrorCode); - - return(-1); - } - - } - - if((lpPacket = PacketAllocatePacket())==NULL){ - printf("\nError:failed to allocate the LPPACKET structure."); - return (-1); - } - - packetbuff[0]=1; - packetbuff[1]=1; - packetbuff[2]=1; - packetbuff[3]=1; - packetbuff[4]=1; - packetbuff[5]=1; - - packetbuff[6]=2; - packetbuff[7]=2; - packetbuff[8]=2; - packetbuff[9]=2; - packetbuff[10]=2; - packetbuff[11]=2; - - for(i=12;i<1514;i++){ - packetbuff[i]= (char)i; - } - - PacketInitPacket(lpPacket,packetbuff,Snaplen); - // capture the packet - - - if(PacketSetNumWrites(lpAdapter,npacks)==FALSE){ - printf("warning: Unable to send more than one packet in a single write!\n"); - } - - printf("\n\nGenerating %d packets...",npacks); - - cpu_time = (float)clock (); - - if(PacketSendPacket(lpAdapter,lpPacket,TRUE)==FALSE){ - printf("Error sending the packets!\n"); - return -1; - } - - cpu_time = (clock() - cpu_time)/CLK_TCK; - - printf ("\n\nElapsed time: %5.3f\n", cpu_time); - printf ("\nTotal packets generated = %d", npacks); - printf ("\nTotal bytes generated = %d", (Snaplen+24)*npacks); - printf ("\nTotal bits generated = %d", (Snaplen+24)*npacks*8); - printf ("\nAverage packets per second = %d", (int)((double)npacks/cpu_time)); - printf ("\nAverage bytes per second = %d", (int)((double)((Snaplen+24)*npacks)/cpu_time)); - printf ("\nAverage bits per second = %d", (int)((double)((Snaplen+24)*npacks*8)/cpu_time)); - printf ("\n"); - - PacketFreePacket(lpPacket); - - // close the adapter and exit - - PacketCloseAdapter(lpAdapter); - return (0); -} +/* + * Copyright (c) 1999 - 2005 NetGroup, Politecnico di Torino (Italy) + * Copyright (c) 2005 - 2006 CACE Technologies, Davis (California) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Politecnico di Torino, CACE Technologies + * nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written + * permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#include +#include +#include + +#include "..\..\..\Include\packet32.h" + + +#define Max_Num_Adapter 10 + +// Prototypes + +void PrintPackets(LPPACKET lpPacket); + +char AdapterList[Max_Num_Adapter][8192]; + + + +int main(int argc, char **argv) +{ +char packetbuff[5000]; + +// define a pointer to a ADAPTER structure + +LPADAPTER lpAdapter = 0; + +// define a pointer to a PACKET structure + +LPPACKET lpPacket; + +int i,npacks,Snaplen; +DWORD dwErrorCode; + +//ascii strings +char AdapterName[8192]; // string that contains a list of the network adapters +char *temp,*temp1; + +int AdapterNum=0,Open; +ULONG AdapterLength; + +float cpu_time; + + printf("Traffic Generator v 0.9999\nCopyright 1999 Loris Degioanni (loris@netgroup-serv.polito.it)"); + printf("\nSends a set of packets to the network using packet.dll API.\n"); + + if (argc == 1){ + printf("\n\n Usage: TestpacketSend [-i adapter] -n npacks -s size"); + printf("\n size is between 60 and 1514\n\n"); + return -1; + } + + + AdapterName[0]=0; + + //get the command line parameters + for(i=1;iAdapterNum) printf("\nThe number must be smaller than %d",AdapterNum); + } while (Open>AdapterNum); + + + + + lpAdapter = PacketOpenAdapter(AdapterList[Open-1]); + + if (!lpAdapter || (lpAdapter->hFile == INVALID_HANDLE_VALUE)) + { + dwErrorCode=GetLastError(); + printf("Unable to open the driver, Error Code : %lx\n",dwErrorCode); + + return(-1); + } + + } + else{ + + lpAdapter = PacketOpenAdapter(AdapterName); + + if (!lpAdapter || (lpAdapter->hFile == INVALID_HANDLE_VALUE)) + { + dwErrorCode=GetLastError(); + printf("Unable to open the driver, Error Code : %lx\n",dwErrorCode); + + return(-1); + } + + } + + if((lpPacket = PacketAllocatePacket())==NULL){ + printf("\nError:failed to allocate the LPPACKET structure."); + return (-1); + } + + packetbuff[0]=1; + packetbuff[1]=1; + packetbuff[2]=1; + packetbuff[3]=1; + packetbuff[4]=1; + packetbuff[5]=1; + + packetbuff[6]=2; + packetbuff[7]=2; + packetbuff[8]=2; + packetbuff[9]=2; + packetbuff[10]=2; + packetbuff[11]=2; + + for(i=12;i<1514;i++){ + packetbuff[i]= (char)i; + } + + PacketInitPacket(lpPacket,packetbuff,Snaplen); + // capture the packet + + + if(PacketSetNumWrites(lpAdapter,npacks)==FALSE){ + printf("warning: Unable to send more than one packet in a single write!\n"); + } + + printf("\n\nGenerating %d packets...",npacks); + + cpu_time = (float)clock (); + + if(PacketSendPacket(lpAdapter,lpPacket,TRUE)==FALSE){ + printf("Error sending the packets!\n"); + return -1; + } + + cpu_time = (clock() - cpu_time)/CLK_TCK; + + printf ("\n\nElapsed time: %5.3f\n", cpu_time); + printf ("\nTotal packets generated = %d", npacks); + printf ("\nTotal bytes generated = %d", (Snaplen+24)*npacks); + printf ("\nTotal bits generated = %d", (Snaplen+24)*npacks*8); + printf ("\nAverage packets per second = %d", (int)((double)npacks/cpu_time)); + printf ("\nAverage bytes per second = %d", (int)((double)((Snaplen+24)*npacks)/cpu_time)); + printf ("\nAverage bits per second = %d", (int)((double)((Snaplen+24)*npacks*8)/cpu_time)); + printf ("\n"); + + PacketFreePacket(lpPacket); + + // close the adapter and exit + + PacketCloseAdapter(lpAdapter); + return (0); +} diff --git a/libs/WinPcap-413-173-b4/Examples-remote/PacketDriver/TestPacketSend/TestPacketSend.dsp b/libs/WpdPack_4_1_2/Examples-remote/PacketDriver/TestPacketSend/TestPacketSend.dsp similarity index 97% rename from libs/WinPcap-413-173-b4/Examples-remote/PacketDriver/TestPacketSend/TestPacketSend.dsp rename to libs/WpdPack_4_1_2/Examples-remote/PacketDriver/TestPacketSend/TestPacketSend.dsp index 7228a8de..ee2c6f4b 100644 --- a/libs/WinPcap-413-173-b4/Examples-remote/PacketDriver/TestPacketSend/TestPacketSend.dsp +++ b/libs/WpdPack_4_1_2/Examples-remote/PacketDriver/TestPacketSend/TestPacketSend.dsp @@ -1,107 +1,107 @@ -# Microsoft Developer Studio Project File - Name="TestPacketSend" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=TestPacketSend - Win32 Release -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "TestPacketSend.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "TestPacketSend.mak" CFG="TestPacketSend - Win32 Release" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "TestPacketSend - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "TestPacketSend - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "TestPacketSend - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x410 /d "NDEBUG" -# ADD RSC /l 0x410 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:"Release/TestPacketSend.exe" /machine:I386 -# SUBTRACT LINK32 /pdb:none - -!ELSEIF "$(CFG)" == "TestPacketSend - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x410 /d "_DEBUG" -# ADD RSC /l 0x410 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "TestPacketSend - Win32 Release" -# Name "TestPacketSend - Win32 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\TestPacketSend.c -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# Begin Source File - -SOURCE=..\..\..\lib\Packet.lib -# End Source File -# End Target -# End Project +# Microsoft Developer Studio Project File - Name="TestPacketSend" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Console Application" 0x0103 + +CFG=TestPacketSend - Win32 Release +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "TestPacketSend.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "TestPacketSend.mak" CFG="TestPacketSend - Win32 Release" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "TestPacketSend - Win32 Release" (based on "Win32 (x86) Console Application") +!MESSAGE "TestPacketSend - Win32 Debug" (based on "Win32 (x86) Console Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "TestPacketSend - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD BASE RSC /l 0x410 /d "NDEBUG" +# ADD RSC /l 0x410 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:"Release/TestPacketSend.exe" /machine:I386 +# SUBTRACT LINK32 /pdb:none + +!ELSEIF "$(CFG)" == "TestPacketSend - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c +# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c +# ADD BASE RSC /l 0x410 /d "_DEBUG" +# ADD RSC /l 0x410 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept + +!ENDIF + +# Begin Target + +# Name "TestPacketSend - Win32 Release" +# Name "TestPacketSend - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\TestPacketSend.c +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# End Group +# Begin Source File + +SOURCE=..\..\..\lib\Packet.lib +# End Source File +# End Target +# End Project diff --git a/libs/WinPcap-413-173-b4/Examples-remote/PacketDriver/TestPacketSend/TestPacketSend.vcproj b/libs/WpdPack_4_1_2/Examples-remote/PacketDriver/TestPacketSend/TestPacketSend.vcproj similarity index 95% rename from libs/WinPcap-413-173-b4/Examples-remote/PacketDriver/TestPacketSend/TestPacketSend.vcproj rename to libs/WpdPack_4_1_2/Examples-remote/PacketDriver/TestPacketSend/TestPacketSend.vcproj index 1eb9ddfb..35feca2f 100644 --- a/libs/WinPcap-413-173-b4/Examples-remote/PacketDriver/TestPacketSend/TestPacketSend.vcproj +++ b/libs/WpdPack_4_1_2/Examples-remote/PacketDriver/TestPacketSend/TestPacketSend.vcproj @@ -1,364 +1,364 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/libs/WinPcap-413-173-b4/Examples-remote/PacketDriver/readme.txt b/libs/WpdPack_4_1_2/Examples-remote/PacketDriver/readme.txt similarity index 98% rename from libs/WinPcap-413-173-b4/Examples-remote/PacketDriver/readme.txt rename to libs/WpdPack_4_1_2/Examples-remote/PacketDriver/readme.txt index 8937c434..e64371ea 100644 --- a/libs/WinPcap-413-173-b4/Examples-remote/PacketDriver/readme.txt +++ b/libs/WpdPack_4_1_2/Examples-remote/PacketDriver/readme.txt @@ -1,2 +1,2 @@ -These files use the packet.dll API instead of wpcap.dll. -The use of packet.dll API is strongly discouraged. +These files use the packet.dll API instead of wpcap.dll. +The use of packet.dll API is strongly discouraged. diff --git a/libs/WinPcap-413-173-b4/Examples-remote/UDPdump/UDPdump.dsp b/libs/WpdPack_4_1_2/Examples-remote/UDPdump/UDPdump.dsp similarity index 97% rename from libs/WinPcap-413-173-b4/Examples-remote/UDPdump/UDPdump.dsp rename to libs/WpdPack_4_1_2/Examples-remote/UDPdump/UDPdump.dsp index 40e38063..b9553123 100644 --- a/libs/WinPcap-413-173-b4/Examples-remote/UDPdump/UDPdump.dsp +++ b/libs/WpdPack_4_1_2/Examples-remote/UDPdump/UDPdump.dsp @@ -1,110 +1,110 @@ -# Microsoft Developer Studio Project File - Name="UDPdump" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=UDPdump - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "UDPdump.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "UDPdump.mak" CFG="UDPdump - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "UDPdump - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "UDPdump - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "UDPdump - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "../" /I "../bpf/" /I "../lbl/" /I "../../Include/" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_UNICODE" /D "WPCAP" /D "HAVE_REMOTE" /YX /FD /c -# ADD BASE RSC /l 0x410 /d "NDEBUG" -# ADD RSC /l 0x410 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib ws2_32.lib Iphlpapi.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "UDPdump - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../" /I "../bpf/" /I "../lbl/" /I "../../Include/" /I "D:/Program Files/Microsoft Platform SDK/include" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_UNICODE" /D "WPCAP" /D "HAVE_REMOTE" /YX /FD /GZ /c -# ADD BASE RSC /l 0x410 /d "_DEBUG" -# ADD RSC /l 0x410 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib ws2_32.lib Iphlpapi.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "UDPdump - Win32 Release" -# Name "UDPdump - Win32 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\udpdump.c -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# Begin Source File - -SOURCE=..\..\include\pcap.h -# End Source File -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# Begin Source File - -SOURCE=..\..\lib\Wpcap.lib -# End Source File -# End Target -# End Project +# Microsoft Developer Studio Project File - Name="UDPdump" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Console Application" 0x0103 + +CFG=UDPdump - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "UDPdump.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "UDPdump.mak" CFG="UDPdump - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "UDPdump - Win32 Release" (based on "Win32 (x86) Console Application") +!MESSAGE "UDPdump - Win32 Debug" (based on "Win32 (x86) Console Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "UDPdump - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /I "../" /I "../bpf/" /I "../lbl/" /I "../../Include/" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_UNICODE" /D "WPCAP" /D "HAVE_REMOTE" /YX /FD /c +# ADD BASE RSC /l 0x410 /d "NDEBUG" +# ADD RSC /l 0x410 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib ws2_32.lib Iphlpapi.lib /nologo /subsystem:console /machine:I386 + +!ELSEIF "$(CFG)" == "UDPdump - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c +# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../" /I "../bpf/" /I "../lbl/" /I "../../Include/" /I "D:/Program Files/Microsoft Platform SDK/include" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_UNICODE" /D "WPCAP" /D "HAVE_REMOTE" /YX /FD /GZ /c +# ADD BASE RSC /l 0x410 /d "_DEBUG" +# ADD RSC /l 0x410 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib ws2_32.lib Iphlpapi.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept + +!ENDIF + +# Begin Target + +# Name "UDPdump - Win32 Release" +# Name "UDPdump - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\udpdump.c +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# Begin Source File + +SOURCE=..\..\include\pcap.h +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# End Group +# Begin Source File + +SOURCE=..\..\lib\Wpcap.lib +# End Source File +# End Target +# End Project diff --git a/libs/WinPcap-413-173-b4/Examples-pcap/UDPdump/UDPdump.dsw b/libs/WpdPack_4_1_2/Examples-remote/UDPdump/UDPdump.dsw similarity index 94% rename from libs/WinPcap-413-173-b4/Examples-pcap/UDPdump/UDPdump.dsw rename to libs/WpdPack_4_1_2/Examples-remote/UDPdump/UDPdump.dsw index 0def7090..8981cf43 100644 --- a/libs/WinPcap-413-173-b4/Examples-pcap/UDPdump/UDPdump.dsw +++ b/libs/WpdPack_4_1_2/Examples-remote/UDPdump/UDPdump.dsw @@ -1,29 +1,29 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "UDPdump"=.\UDPdump.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "UDPdump"=.\UDPdump.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/libs/WinPcap-413-173-b4/Examples-remote/UDPdump/UDPdump.vcproj b/libs/WpdPack_4_1_2/Examples-remote/UDPdump/UDPdump.vcproj similarity index 95% rename from libs/WinPcap-413-173-b4/Examples-remote/UDPdump/UDPdump.vcproj rename to libs/WpdPack_4_1_2/Examples-remote/UDPdump/UDPdump.vcproj index 09b44594..4b12a25d 100644 --- a/libs/WinPcap-413-173-b4/Examples-remote/UDPdump/UDPdump.vcproj +++ b/libs/WpdPack_4_1_2/Examples-remote/UDPdump/UDPdump.vcproj @@ -1,364 +1,364 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/libs/WinPcap-413-173-b4/Examples-remote/UDPdump/udpdump.c b/libs/WpdPack_4_1_2/Examples-remote/UDPdump/udpdump.c similarity index 96% rename from libs/WinPcap-413-173-b4/Examples-remote/UDPdump/udpdump.c rename to libs/WpdPack_4_1_2/Examples-remote/UDPdump/udpdump.c index bccd3aec..f6479ead 100644 --- a/libs/WinPcap-413-173-b4/Examples-remote/UDPdump/udpdump.c +++ b/libs/WpdPack_4_1_2/Examples-remote/UDPdump/udpdump.c @@ -1,230 +1,230 @@ -/* - * Copyright (c) 1999 - 2005 NetGroup, Politecnico di Torino (Italy) - * Copyright (c) 2005 - 2006 CACE Technologies, Davis (California) - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the Politecnico di Torino, CACE Technologies - * nor the names of its contributors may be used to endorse or promote - * products derived from this software without specific prior written - * permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ - -#include "pcap.h" - -/* 4 bytes IP address */ -typedef struct ip_address{ - u_char byte1; - u_char byte2; - u_char byte3; - u_char byte4; -}ip_address; - -/* IPv4 header */ -typedef struct ip_header{ - u_char ver_ihl; // Version (4 bits) + Internet header length (4 bits) - u_char tos; // Type of service - u_short tlen; // Total length - u_short identification; // Identification - u_short flags_fo; // Flags (3 bits) + Fragment offset (13 bits) - u_char ttl; // Time to live - u_char proto; // Protocol - u_short crc; // Header checksum - ip_address saddr; // Source address - ip_address daddr; // Destination address - u_int op_pad; // Option + Padding -}ip_header; - -/* UDP header*/ -typedef struct udp_header{ - u_short sport; // Source port - u_short dport; // Destination port - u_short len; // Datagram length - u_short crc; // Checksum -}udp_header; - -/* prototype of the packet handler */ -void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data); - - -int main() -{ -pcap_if_t *alldevs; -pcap_if_t *d; -int inum; -int i=0; -pcap_t *adhandle; -char errbuf[PCAP_ERRBUF_SIZE]; -u_int netmask; -char packet_filter[] = "ip and udp"; -struct bpf_program fcode; - - /* Retrieve the device list */ - if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL, &alldevs, errbuf) == -1) - { - fprintf(stderr,"Error in pcap_findalldevs: %s\n", errbuf); - exit(1); - } - - /* Print the list */ - for(d=alldevs; d; d=d->next) - { - printf("%d. %s", ++i, d->name); - if (d->description) - printf(" (%s)\n", d->description); - else - printf(" (No description available)\n"); - } - - if(i==0) - { - printf("\nNo interfaces found! Make sure WinPcap is installed.\n"); - return -1; - } - - printf("Enter the interface number (1-%d):",i); - scanf_s("%d", &inum); - - if(inum < 1 || inum > i) - { - printf("\nInterface number out of range.\n"); - /* Free the device list */ - pcap_freealldevs(alldevs); - return -1; - } - - /* Jump to the selected adapter */ - for(d=alldevs, i=0; i< inum-1 ;d=d->next, i++); - - /* Open the adapter */ - if ( (adhandle= pcap_open(d->name, // name of the device - 65536, // portion of the packet to capture. - // 65536 grants that the whole packet will be captured on all the MACs. - PCAP_OPENFLAG_PROMISCUOUS, // promiscuous mode - 1000, // read timeout - NULL, // remote authentication - errbuf // error buffer - ) ) == NULL) - { - fprintf(stderr,"\nUnable to open the adapter. %s is not supported by WinPcap\n"); - /* Free the device list */ - pcap_freealldevs(alldevs); - return -1; - } - - /* Check the link layer. We support only Ethernet for simplicity. */ - if(pcap_datalink(adhandle) != DLT_EN10MB) - { - fprintf(stderr,"\nThis program works only on Ethernet networks.\n"); - /* Free the device list */ - pcap_freealldevs(alldevs); - return -1; - } - - if(d->addresses != NULL) - /* Retrieve the mask of the first address of the interface */ - netmask=((struct sockaddr_in *)(d->addresses->netmask))->sin_addr.S_un.S_addr; - else - /* If the interface is without addresses we suppose to be in a C class network */ - netmask=0xffffff; - - - //compile the filter - if (pcap_compile(adhandle, &fcode, packet_filter, 1, netmask) <0 ) - { - fprintf(stderr,"\nUnable to compile the packet filter. Check the syntax.\n"); - /* Free the device list */ - pcap_freealldevs(alldevs); - return -1; - } - - //set the filter - if (pcap_setfilter(adhandle, &fcode)<0) - { - fprintf(stderr,"\nError setting the filter.\n"); - /* Free the device list */ - pcap_freealldevs(alldevs); - return -1; - } - - printf("\nlistening on %s...\n", d->description); - - /* At this point, we don't need any more the device list. Free it */ - pcap_freealldevs(alldevs); - - /* start the capture */ - pcap_loop(adhandle, 0, packet_handler, NULL); - - return 0; -} - -/* Callback function invoked by libpcap for every incoming packet */ -void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data) -{ - struct tm ltime; - char timestr[16]; - ip_header *ih; - udp_header *uh; - u_int ip_len; - u_short sport,dport; - time_t local_tv_sec; - - /* - * Unused variable - */ - (VOID)(param); - - /* convert the timestamp to readable format */ - local_tv_sec = header->ts.tv_sec; - localtime_s(<ime, &local_tv_sec); - strftime( timestr, sizeof timestr, "%H:%M:%S", <ime); - - /* print timestamp and length of the packet */ - printf("%s.%.6d len:%d ", timestr, header->ts.tv_usec, header->len); - - /* retireve the position of the ip header */ - ih = (ip_header *) (pkt_data + - 14); //length of ethernet header - - /* retireve the position of the udp header */ - ip_len = (ih->ver_ihl & 0xf) * 4; - uh = (udp_header *) ((u_char*)ih + ip_len); - - /* convert from network byte order to host byte order */ - sport = ntohs( uh->sport ); - dport = ntohs( uh->dport ); - - /* print ip addresses and udp ports */ - printf("%d.%d.%d.%d.%d -> %d.%d.%d.%d.%d\n", - ih->saddr.byte1, - ih->saddr.byte2, - ih->saddr.byte3, - ih->saddr.byte4, - sport, - ih->daddr.byte1, - ih->daddr.byte2, - ih->daddr.byte3, - ih->daddr.byte4, - dport); +/* + * Copyright (c) 1999 - 2005 NetGroup, Politecnico di Torino (Italy) + * Copyright (c) 2005 - 2006 CACE Technologies, Davis (California) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Politecnico di Torino, CACE Technologies + * nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written + * permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#include "pcap.h" + +/* 4 bytes IP address */ +typedef struct ip_address{ + u_char byte1; + u_char byte2; + u_char byte3; + u_char byte4; +}ip_address; + +/* IPv4 header */ +typedef struct ip_header{ + u_char ver_ihl; // Version (4 bits) + Internet header length (4 bits) + u_char tos; // Type of service + u_short tlen; // Total length + u_short identification; // Identification + u_short flags_fo; // Flags (3 bits) + Fragment offset (13 bits) + u_char ttl; // Time to live + u_char proto; // Protocol + u_short crc; // Header checksum + ip_address saddr; // Source address + ip_address daddr; // Destination address + u_int op_pad; // Option + Padding +}ip_header; + +/* UDP header*/ +typedef struct udp_header{ + u_short sport; // Source port + u_short dport; // Destination port + u_short len; // Datagram length + u_short crc; // Checksum +}udp_header; + +/* prototype of the packet handler */ +void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data); + + +int main() +{ +pcap_if_t *alldevs; +pcap_if_t *d; +int inum; +int i=0; +pcap_t *adhandle; +char errbuf[PCAP_ERRBUF_SIZE]; +u_int netmask; +char packet_filter[] = "ip and udp"; +struct bpf_program fcode; + + /* Retrieve the device list */ + if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL, &alldevs, errbuf) == -1) + { + fprintf(stderr,"Error in pcap_findalldevs: %s\n", errbuf); + exit(1); + } + + /* Print the list */ + for(d=alldevs; d; d=d->next) + { + printf("%d. %s", ++i, d->name); + if (d->description) + printf(" (%s)\n", d->description); + else + printf(" (No description available)\n"); + } + + if(i==0) + { + printf("\nNo interfaces found! Make sure WinPcap is installed.\n"); + return -1; + } + + printf("Enter the interface number (1-%d):",i); + scanf_s("%d", &inum); + + if(inum < 1 || inum > i) + { + printf("\nInterface number out of range.\n"); + /* Free the device list */ + pcap_freealldevs(alldevs); + return -1; + } + + /* Jump to the selected adapter */ + for(d=alldevs, i=0; i< inum-1 ;d=d->next, i++); + + /* Open the adapter */ + if ( (adhandle= pcap_open(d->name, // name of the device + 65536, // portion of the packet to capture. + // 65536 grants that the whole packet will be captured on all the MACs. + PCAP_OPENFLAG_PROMISCUOUS, // promiscuous mode + 1000, // read timeout + NULL, // remote authentication + errbuf // error buffer + ) ) == NULL) + { + fprintf(stderr,"\nUnable to open the adapter. %s is not supported by WinPcap\n"); + /* Free the device list */ + pcap_freealldevs(alldevs); + return -1; + } + + /* Check the link layer. We support only Ethernet for simplicity. */ + if(pcap_datalink(adhandle) != DLT_EN10MB) + { + fprintf(stderr,"\nThis program works only on Ethernet networks.\n"); + /* Free the device list */ + pcap_freealldevs(alldevs); + return -1; + } + + if(d->addresses != NULL) + /* Retrieve the mask of the first address of the interface */ + netmask=((struct sockaddr_in *)(d->addresses->netmask))->sin_addr.S_un.S_addr; + else + /* If the interface is without addresses we suppose to be in a C class network */ + netmask=0xffffff; + + + //compile the filter + if (pcap_compile(adhandle, &fcode, packet_filter, 1, netmask) <0 ) + { + fprintf(stderr,"\nUnable to compile the packet filter. Check the syntax.\n"); + /* Free the device list */ + pcap_freealldevs(alldevs); + return -1; + } + + //set the filter + if (pcap_setfilter(adhandle, &fcode)<0) + { + fprintf(stderr,"\nError setting the filter.\n"); + /* Free the device list */ + pcap_freealldevs(alldevs); + return -1; + } + + printf("\nlistening on %s...\n", d->description); + + /* At this point, we don't need any more the device list. Free it */ + pcap_freealldevs(alldevs); + + /* start the capture */ + pcap_loop(adhandle, 0, packet_handler, NULL); + + return 0; +} + +/* Callback function invoked by libpcap for every incoming packet */ +void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data) +{ + struct tm ltime; + char timestr[16]; + ip_header *ih; + udp_header *uh; + u_int ip_len; + u_short sport,dport; + time_t local_tv_sec; + + /* + * Unused variable + */ + (VOID)(param); + + /* convert the timestamp to readable format */ + local_tv_sec = header->ts.tv_sec; + localtime_s(<ime, &local_tv_sec); + strftime( timestr, sizeof timestr, "%H:%M:%S", <ime); + + /* print timestamp and length of the packet */ + printf("%s.%.6d len:%d ", timestr, header->ts.tv_usec, header->len); + + /* retireve the position of the ip header */ + ih = (ip_header *) (pkt_data + + 14); //length of ethernet header + + /* retireve the position of the udp header */ + ip_len = (ih->ver_ihl & 0xf) * 4; + uh = (udp_header *) ((u_char*)ih + ip_len); + + /* convert from network byte order to host byte order */ + sport = ntohs( uh->sport ); + dport = ntohs( uh->dport ); + + /* print ip addresses and udp ports */ + printf("%d.%d.%d.%d.%d -> %d.%d.%d.%d.%d\n", + ih->saddr.byte1, + ih->saddr.byte2, + ih->saddr.byte3, + ih->saddr.byte4, + sport, + ih->daddr.byte1, + ih->daddr.byte2, + ih->daddr.byte3, + ih->daddr.byte4, + dport); } \ No newline at end of file diff --git a/libs/WinPcap-413-173-b4/Examples-remote/UserLevelBridge/UserBridge.c b/libs/WpdPack_4_1_2/Examples-remote/UserLevelBridge/UserBridge.c similarity index 96% rename from libs/WinPcap-413-173-b4/Examples-remote/UserLevelBridge/UserBridge.c rename to libs/WpdPack_4_1_2/Examples-remote/UserLevelBridge/UserBridge.c index f7a372ef..471f8503 100644 --- a/libs/WinPcap-413-173-b4/Examples-remote/UserLevelBridge/UserBridge.c +++ b/libs/WpdPack_4_1_2/Examples-remote/UserLevelBridge/UserBridge.c @@ -1,467 +1,467 @@ -/* - * Copyright (c) 2005 - 2006 - * CACE Technologies, Davis, CA - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of CACE Technologies nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ - -/* - * This simple program implements a user-level bridge. - * It opens two adapters specified by the user and starts two threads. - * The first thread receives packets from adapter 1 and sends them down to - * adapter 2. The second thread does the same, but in the opposite - * direction. - */ - -#include -#include "pcap.h" - -/* Storage data structure used to pass parameters to the threads */ -typedef struct _in_out_adapters -{ - unsigned int state; /* Some simple state information */ - pcap_t *input_adapter; - pcap_t *output_adapter; -}in_out_adapters; - -/* Prototypes */ -DWORD WINAPI CaptureAndForwardThread(LPVOID lpParameter); -void ctrlc_handler(int sig); - -/* This prevents the two threads to mess-up when they do printfs */ -CRITICAL_SECTION print_cs; - -/* Thread handlers. Global because we wait on the threads from the CTRL+C handler */ -HANDLE threads[2]; - -/* This global variable tells the forwarder threads they must terminate */ -volatile int kill_forwaders = 0; - - -/*******************************************************************/ - -int main() -{ - pcap_if_t *alldevs; - pcap_if_t *d; - int inum1, inum2; - int i=0; - pcap_t *adhandle1, *adhandle2; - char errbuf[PCAP_ERRBUF_SIZE]; - u_int netmask1, netmask2; - char packet_filter[256]; - struct bpf_program fcode; - in_out_adapters couple0, couple1; - - /* - * Retrieve the device list - */ - - if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL, &alldevs, errbuf) == -1) - { - fprintf(stderr,"Error in pcap_findalldevs: %s\n", errbuf); - exit(1); - } - - /* Print the list */ - for(d=alldevs; d; d=d->next) - { - printf("%d. ", ++i); - if (d->description) - printf("%s\n", d->description); - else - printf("\n"); - } - - if(i==0) - { - printf("\nNo interfaces found! Make sure WinPcap is installed.\n"); - return -1; - } - - - /* - * Get input from the user - */ - - /* Get the filter*/ - printf("\nSpecify filter (hit return for no filter):"); - - fgets(packet_filter, sizeof(packet_filter), stdin); - - /* Get the first interface number*/ - printf("\nEnter the number of the first interface to use (1-%d):",i); - scanf_s("%d", &inum1); - - if(inum1 < 1 || inum1 > i) - { - printf("\nInterface number out of range.\n"); - /* Free the device list */ - pcap_freealldevs(alldevs); - return -1; - } - - /* Get the second interface number*/ - printf("Enter the number of the first interface to use (1-%d):",i); - scanf_s("%d", &inum2); - - if(inum2 < 1 || inum2 > i) - { - printf("\nInterface number out of range.\n"); - /* Free the device list */ - pcap_freealldevs(alldevs); - return -1; - } - - if(inum1 == inum2 ) - { - printf("\nCannot bridge packets on the same interface.\n"); - /* Free the device list */ - pcap_freealldevs(alldevs); - return -1; - } - - - /* - * Open the specified couple of adapters - */ - - /* Jump to the first selected adapter */ - for(d = alldevs, i = 0; i< inum1 - 1 ;d = d->next, i++); - - /* - * Open the first adapter. - * *NOTICE* the flags we are using, they are important for the behavior of the prgram: - * - PCAP_OPENFLAG_PROMISCUOUS: tells the adapter to go in promiscuous mode. - * This means that we are capturing all the traffic, not only the one to or from - * this machine. - * - PCAP_OPENFLAG_NOCAPTURE_LOCAL: prevents the adapter from capturing again the packets - * transmitted by itself. This avoids annoying loops. - * - PCAP_OPENFLAG_MAX_RESPONSIVENESS: configures the adapter to provide minimum latency, - * at the cost of higher CPU usage. - */ - if((adhandle1 = pcap_open(d->name, // name of the device - 65536, // portion of the packet to capture. - // 65536 grants that the whole packet will be captured on every link layer. - PCAP_OPENFLAG_PROMISCUOUS | // flags. We specify that we don't want to capture loopback packets, and that the driver should deliver us the packets as fast as possible - PCAP_OPENFLAG_NOCAPTURE_LOCAL | - PCAP_OPENFLAG_MAX_RESPONSIVENESS, - 500, // read timeout - NULL, // remote authentication - errbuf // error buffer - )) == NULL) - { - fprintf(stderr,"\nUnable to open the adapter. %s is not supported by WinPcap\n", d->description); - /* Free the device list */ - pcap_freealldevs(alldevs); - return -1; - } - - if(d->addresses != NULL) - { - /* Retrieve the mask of the first address of the interface */ - netmask1 = ((struct sockaddr_in *)(d->addresses->netmask))->sin_addr.S_un.S_addr; - } - else - { - /* If the interface is without addresses we suppose to be in a C class network */ - netmask1 = 0xffffff; - } - - /* Jump to the second selected adapter */ - for(d = alldevs, i = 0; i< inum2 - 1 ;d = d->next, i++); - - /* Open the second adapter */ - if((adhandle2 = pcap_open(d->name, // name of the device - 65536, // portion of the packet to capture. - // 65536 grants that the whole packet will be captured on every link layer. - PCAP_OPENFLAG_PROMISCUOUS | // flags. We specify that we don't want to capture loopback packets, and that the driver should deliver us the packets as fast as possible - PCAP_OPENFLAG_NOCAPTURE_LOCAL | - PCAP_OPENFLAG_MAX_RESPONSIVENESS, - 500, // read timeout - NULL, // remote authentication - errbuf // error buffer - )) == NULL) - { - fprintf(stderr,"\nUnable to open the adapter. %s is not supported by WinPcap\n", d->description); - /* Free the device list */ - pcap_freealldevs(alldevs); - return -1; - } - - if(d->addresses != NULL) - { - /* Retrieve the mask of the first address of the interface */ - netmask2 = ((struct sockaddr_in *)(d->addresses->netmask))->sin_addr.S_un.S_addr; - } - else - { - /* If the interface is without addresses we suppose to be in a C class network */ - netmask2 = 0xffffff; - } - - - /* - * Compile and set the filters - */ - - /* compile the filter for the first adapter */ - if (pcap_compile(adhandle1, &fcode, packet_filter, 1, netmask1) <0 ) - { - fprintf(stderr,"\nUnable to compile the packet filter. Check the syntax.\n"); - - /* Close the adapters */ - pcap_close(adhandle1); - pcap_close(adhandle2); - - /* Free the device list */ - pcap_freealldevs(alldevs); - return -1; - } - - /* set the filter for the first adapter*/ - if (pcap_setfilter(adhandle1, &fcode)<0) - { - fprintf(stderr,"\nError setting the filter.\n"); - - /* Close the adapters */ - pcap_close(adhandle1); - pcap_close(adhandle2); - - /* Free the device list */ - pcap_freealldevs(alldevs); - return -1; - } - - /* compile the filter for the second adapter */ - if (pcap_compile(adhandle2, &fcode, packet_filter, 1, netmask2) <0 ) - { - fprintf(stderr,"\nUnable to compile the packet filter. Check the syntax.\n"); - - /* Close the adapters */ - pcap_close(adhandle1); - pcap_close(adhandle2); - - /* Free the device list */ - pcap_freealldevs(alldevs); - return -1; - } - - /* set the filter for the second adapter*/ - if (pcap_setfilter(adhandle2, &fcode)<0) - { - fprintf(stderr,"\nError setting the filter.\n"); - - /* Close the adapters */ - pcap_close(adhandle1); - pcap_close(adhandle2); - - /* Free the device list */ - pcap_freealldevs(alldevs); - return -1; - } - - /* At this point, we don't need the device list any more. Free it */ - pcap_freealldevs(alldevs); - - /* - * Start the threads that will forward the packets - */ - - /* Initialize the critical section that will be used by the threads for console output */ - InitializeCriticalSection(&print_cs); - - /* Init input parameters of the threads */ - couple0.state = 0; - couple0.input_adapter = adhandle1; - couple0.output_adapter = adhandle2; - couple1.state = 1; - couple1.input_adapter = adhandle2; - couple1.output_adapter = adhandle1; - - /* Start first thread */ - if((threads[0] = CreateThread( - NULL, - 0, - CaptureAndForwardThread, - &couple0, - 0, - NULL)) == NULL) - { - fprintf(stderr, "error creating the first forward thread"); - - /* Close the adapters */ - pcap_close(adhandle1); - pcap_close(adhandle2); - - /* Free the device list */ - pcap_freealldevs(alldevs); - return -1; - } - - /* Start second thread */ - if((threads[1] = CreateThread( - NULL, - 0, - CaptureAndForwardThread, - &couple1, - 0, - NULL)) == NULL) - { - fprintf(stderr, "error creating the second forward thread"); - - /* Kill the first thread. Not very gentle at all...*/ - TerminateThread(threads[0], 0); - - /* Close the adapters */ - pcap_close(adhandle1); - pcap_close(adhandle2); - - /* Free the device list */ - pcap_freealldevs(alldevs); - return -1; - } - - /* - * Install a CTRL+C handler that will do the cleanups on exit - */ - signal(SIGINT, ctrlc_handler); - - /* - * Done! - * Wait for the Greek calends... - */ - printf("\nStart bridging the two adapters...\n", d->description); - Sleep(INFINITE); - return 0; -} - -/******************************************************************* - * Forwarding thread. - * Gets the packets from the input adapter and sends them to the output one. - *******************************************************************/ -DWORD WINAPI CaptureAndForwardThread(LPVOID lpParameter) -{ - struct pcap_pkthdr *header; - const u_char *pkt_data; - int res = 0; - in_out_adapters* ad_couple = lpParameter; - unsigned int n_fwd = 0; - - /* - * Loop receiving packets from the first input adapter - */ - - while((!kill_forwaders) && (res = pcap_next_ex(ad_couple->input_adapter, &header, &pkt_data)) >= 0) - { - if(res != 0) /* Note: res=0 means "read timeout elapsed"*/ - { - /* - * Print something, just to show when we have activity. - * BEWARE: acquiring a critical section and printing strings with printf - * is something inefficient that you seriously want to avoid in your packet loop! - * However, since this is a *sample program*, we privilege visual output to efficiency. - */ - EnterCriticalSection(&print_cs); - - if(ad_couple->state == 0) - printf(">> Len: %u\n", header->caplen); - else - printf("<< Len: %u\n", header->caplen); - - LeaveCriticalSection(&print_cs); - - /* - * Send the just received packet to the output adaper - */ - if(pcap_sendpacket(ad_couple->output_adapter, pkt_data, header->caplen) != 0) - { - EnterCriticalSection(&print_cs); - - printf("Error sending a %u bytes packets on interface %u: %s\n", - header->caplen, - ad_couple->state, - pcap_geterr(ad_couple->output_adapter)); - - LeaveCriticalSection(&print_cs); - } - else - { - n_fwd++; - } - } - } - - /* - * We're out of the main loop. Check the reason. - */ - if(res < 0) - { - EnterCriticalSection(&print_cs); - - printf("Error capturing the packets: %s\n", pcap_geterr(ad_couple->input_adapter)); - fflush(stdout); - - LeaveCriticalSection(&print_cs); - } - else - { - EnterCriticalSection(&print_cs); - - printf("End of bridging on interface %u. Forwarded packets:%u\n", - ad_couple->state, - n_fwd); - fflush(stdout); - - LeaveCriticalSection(&print_cs); - } - - return 0; -} - -/******************************************************************* - * CTRL+C hanlder. - * We order the threads to die and then we patiently wait for their - * suicide. - *******************************************************************/ -void ctrlc_handler(int sig) -{ - /* - * unused variable - */ - (VOID)(sig); - - kill_forwaders = 1; - - WaitForMultipleObjects(2, - threads, - TRUE, /* Wait for all the handles */ - 5000); /* Timeout */ - - exit(0); +/* + * Copyright (c) 2005 - 2006 + * CACE Technologies, Davis, CA + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of CACE Technologies nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +/* + * This simple program implements a user-level bridge. + * It opens two adapters specified by the user and starts two threads. + * The first thread receives packets from adapter 1 and sends them down to + * adapter 2. The second thread does the same, but in the opposite + * direction. + */ + +#include +#include "pcap.h" + +/* Storage data structure used to pass parameters to the threads */ +typedef struct _in_out_adapters +{ + unsigned int state; /* Some simple state information */ + pcap_t *input_adapter; + pcap_t *output_adapter; +}in_out_adapters; + +/* Prototypes */ +DWORD WINAPI CaptureAndForwardThread(LPVOID lpParameter); +void ctrlc_handler(int sig); + +/* This prevents the two threads to mess-up when they do printfs */ +CRITICAL_SECTION print_cs; + +/* Thread handlers. Global because we wait on the threads from the CTRL+C handler */ +HANDLE threads[2]; + +/* This global variable tells the forwarder threads they must terminate */ +volatile int kill_forwaders = 0; + + +/*******************************************************************/ + +int main() +{ + pcap_if_t *alldevs; + pcap_if_t *d; + int inum1, inum2; + int i=0; + pcap_t *adhandle1, *adhandle2; + char errbuf[PCAP_ERRBUF_SIZE]; + u_int netmask1, netmask2; + char packet_filter[256]; + struct bpf_program fcode; + in_out_adapters couple0, couple1; + + /* + * Retrieve the device list + */ + + if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL, &alldevs, errbuf) == -1) + { + fprintf(stderr,"Error in pcap_findalldevs: %s\n", errbuf); + exit(1); + } + + /* Print the list */ + for(d=alldevs; d; d=d->next) + { + printf("%d. ", ++i); + if (d->description) + printf("%s\n", d->description); + else + printf("\n"); + } + + if(i==0) + { + printf("\nNo interfaces found! Make sure WinPcap is installed.\n"); + return -1; + } + + + /* + * Get input from the user + */ + + /* Get the filter*/ + printf("\nSpecify filter (hit return for no filter):"); + + fgets(packet_filter, sizeof(packet_filter), stdin); + + /* Get the first interface number*/ + printf("\nEnter the number of the first interface to use (1-%d):",i); + scanf_s("%d", &inum1); + + if(inum1 < 1 || inum1 > i) + { + printf("\nInterface number out of range.\n"); + /* Free the device list */ + pcap_freealldevs(alldevs); + return -1; + } + + /* Get the second interface number*/ + printf("Enter the number of the first interface to use (1-%d):",i); + scanf_s("%d", &inum2); + + if(inum2 < 1 || inum2 > i) + { + printf("\nInterface number out of range.\n"); + /* Free the device list */ + pcap_freealldevs(alldevs); + return -1; + } + + if(inum1 == inum2 ) + { + printf("\nCannot bridge packets on the same interface.\n"); + /* Free the device list */ + pcap_freealldevs(alldevs); + return -1; + } + + + /* + * Open the specified couple of adapters + */ + + /* Jump to the first selected adapter */ + for(d = alldevs, i = 0; i< inum1 - 1 ;d = d->next, i++); + + /* + * Open the first adapter. + * *NOTICE* the flags we are using, they are important for the behavior of the prgram: + * - PCAP_OPENFLAG_PROMISCUOUS: tells the adapter to go in promiscuous mode. + * This means that we are capturing all the traffic, not only the one to or from + * this machine. + * - PCAP_OPENFLAG_NOCAPTURE_LOCAL: prevents the adapter from capturing again the packets + * transmitted by itself. This avoids annoying loops. + * - PCAP_OPENFLAG_MAX_RESPONSIVENESS: configures the adapter to provide minimum latency, + * at the cost of higher CPU usage. + */ + if((adhandle1 = pcap_open(d->name, // name of the device + 65536, // portion of the packet to capture. + // 65536 grants that the whole packet will be captured on every link layer. + PCAP_OPENFLAG_PROMISCUOUS | // flags. We specify that we don't want to capture loopback packets, and that the driver should deliver us the packets as fast as possible + PCAP_OPENFLAG_NOCAPTURE_LOCAL | + PCAP_OPENFLAG_MAX_RESPONSIVENESS, + 500, // read timeout + NULL, // remote authentication + errbuf // error buffer + )) == NULL) + { + fprintf(stderr,"\nUnable to open the adapter. %s is not supported by WinPcap\n", d->description); + /* Free the device list */ + pcap_freealldevs(alldevs); + return -1; + } + + if(d->addresses != NULL) + { + /* Retrieve the mask of the first address of the interface */ + netmask1 = ((struct sockaddr_in *)(d->addresses->netmask))->sin_addr.S_un.S_addr; + } + else + { + /* If the interface is without addresses we suppose to be in a C class network */ + netmask1 = 0xffffff; + } + + /* Jump to the second selected adapter */ + for(d = alldevs, i = 0; i< inum2 - 1 ;d = d->next, i++); + + /* Open the second adapter */ + if((adhandle2 = pcap_open(d->name, // name of the device + 65536, // portion of the packet to capture. + // 65536 grants that the whole packet will be captured on every link layer. + PCAP_OPENFLAG_PROMISCUOUS | // flags. We specify that we don't want to capture loopback packets, and that the driver should deliver us the packets as fast as possible + PCAP_OPENFLAG_NOCAPTURE_LOCAL | + PCAP_OPENFLAG_MAX_RESPONSIVENESS, + 500, // read timeout + NULL, // remote authentication + errbuf // error buffer + )) == NULL) + { + fprintf(stderr,"\nUnable to open the adapter. %s is not supported by WinPcap\n", d->description); + /* Free the device list */ + pcap_freealldevs(alldevs); + return -1; + } + + if(d->addresses != NULL) + { + /* Retrieve the mask of the first address of the interface */ + netmask2 = ((struct sockaddr_in *)(d->addresses->netmask))->sin_addr.S_un.S_addr; + } + else + { + /* If the interface is without addresses we suppose to be in a C class network */ + netmask2 = 0xffffff; + } + + + /* + * Compile and set the filters + */ + + /* compile the filter for the first adapter */ + if (pcap_compile(adhandle1, &fcode, packet_filter, 1, netmask1) <0 ) + { + fprintf(stderr,"\nUnable to compile the packet filter. Check the syntax.\n"); + + /* Close the adapters */ + pcap_close(adhandle1); + pcap_close(adhandle2); + + /* Free the device list */ + pcap_freealldevs(alldevs); + return -1; + } + + /* set the filter for the first adapter*/ + if (pcap_setfilter(adhandle1, &fcode)<0) + { + fprintf(stderr,"\nError setting the filter.\n"); + + /* Close the adapters */ + pcap_close(adhandle1); + pcap_close(adhandle2); + + /* Free the device list */ + pcap_freealldevs(alldevs); + return -1; + } + + /* compile the filter for the second adapter */ + if (pcap_compile(adhandle2, &fcode, packet_filter, 1, netmask2) <0 ) + { + fprintf(stderr,"\nUnable to compile the packet filter. Check the syntax.\n"); + + /* Close the adapters */ + pcap_close(adhandle1); + pcap_close(adhandle2); + + /* Free the device list */ + pcap_freealldevs(alldevs); + return -1; + } + + /* set the filter for the second adapter*/ + if (pcap_setfilter(adhandle2, &fcode)<0) + { + fprintf(stderr,"\nError setting the filter.\n"); + + /* Close the adapters */ + pcap_close(adhandle1); + pcap_close(adhandle2); + + /* Free the device list */ + pcap_freealldevs(alldevs); + return -1; + } + + /* At this point, we don't need the device list any more. Free it */ + pcap_freealldevs(alldevs); + + /* + * Start the threads that will forward the packets + */ + + /* Initialize the critical section that will be used by the threads for console output */ + InitializeCriticalSection(&print_cs); + + /* Init input parameters of the threads */ + couple0.state = 0; + couple0.input_adapter = adhandle1; + couple0.output_adapter = adhandle2; + couple1.state = 1; + couple1.input_adapter = adhandle2; + couple1.output_adapter = adhandle1; + + /* Start first thread */ + if((threads[0] = CreateThread( + NULL, + 0, + CaptureAndForwardThread, + &couple0, + 0, + NULL)) == NULL) + { + fprintf(stderr, "error creating the first forward thread"); + + /* Close the adapters */ + pcap_close(adhandle1); + pcap_close(adhandle2); + + /* Free the device list */ + pcap_freealldevs(alldevs); + return -1; + } + + /* Start second thread */ + if((threads[1] = CreateThread( + NULL, + 0, + CaptureAndForwardThread, + &couple1, + 0, + NULL)) == NULL) + { + fprintf(stderr, "error creating the second forward thread"); + + /* Kill the first thread. Not very gentle at all...*/ + TerminateThread(threads[0], 0); + + /* Close the adapters */ + pcap_close(adhandle1); + pcap_close(adhandle2); + + /* Free the device list */ + pcap_freealldevs(alldevs); + return -1; + } + + /* + * Install a CTRL+C handler that will do the cleanups on exit + */ + signal(SIGINT, ctrlc_handler); + + /* + * Done! + * Wait for the Greek calends... + */ + printf("\nStart bridging the two adapters...\n", d->description); + Sleep(INFINITE); + return 0; +} + +/******************************************************************* + * Forwarding thread. + * Gets the packets from the input adapter and sends them to the output one. + *******************************************************************/ +DWORD WINAPI CaptureAndForwardThread(LPVOID lpParameter) +{ + struct pcap_pkthdr *header; + const u_char *pkt_data; + int res = 0; + in_out_adapters* ad_couple = lpParameter; + unsigned int n_fwd = 0; + + /* + * Loop receiving packets from the first input adapter + */ + + while((!kill_forwaders) && (res = pcap_next_ex(ad_couple->input_adapter, &header, &pkt_data)) >= 0) + { + if(res != 0) /* Note: res=0 means "read timeout elapsed"*/ + { + /* + * Print something, just to show when we have activity. + * BEWARE: acquiring a critical section and printing strings with printf + * is something inefficient that you seriously want to avoid in your packet loop! + * However, since this is a *sample program*, we privilege visual output to efficiency. + */ + EnterCriticalSection(&print_cs); + + if(ad_couple->state == 0) + printf(">> Len: %u\n", header->caplen); + else + printf("<< Len: %u\n", header->caplen); + + LeaveCriticalSection(&print_cs); + + /* + * Send the just received packet to the output adaper + */ + if(pcap_sendpacket(ad_couple->output_adapter, pkt_data, header->caplen) != 0) + { + EnterCriticalSection(&print_cs); + + printf("Error sending a %u bytes packets on interface %u: %s\n", + header->caplen, + ad_couple->state, + pcap_geterr(ad_couple->output_adapter)); + + LeaveCriticalSection(&print_cs); + } + else + { + n_fwd++; + } + } + } + + /* + * We're out of the main loop. Check the reason. + */ + if(res < 0) + { + EnterCriticalSection(&print_cs); + + printf("Error capturing the packets: %s\n", pcap_geterr(ad_couple->input_adapter)); + fflush(stdout); + + LeaveCriticalSection(&print_cs); + } + else + { + EnterCriticalSection(&print_cs); + + printf("End of bridging on interface %u. Forwarded packets:%u\n", + ad_couple->state, + n_fwd); + fflush(stdout); + + LeaveCriticalSection(&print_cs); + } + + return 0; +} + +/******************************************************************* + * CTRL+C hanlder. + * We order the threads to die and then we patiently wait for their + * suicide. + *******************************************************************/ +void ctrlc_handler(int sig) +{ + /* + * unused variable + */ + (VOID)(sig); + + kill_forwaders = 1; + + WaitForMultipleObjects(2, + threads, + TRUE, /* Wait for all the handles */ + 5000); /* Timeout */ + + exit(0); } \ No newline at end of file diff --git a/libs/WinPcap-413-173-b4/Examples-remote/UserLevelBridge/UserBridge.dsp b/libs/WpdPack_4_1_2/Examples-remote/UserLevelBridge/UserBridge.dsp similarity index 97% rename from libs/WinPcap-413-173-b4/Examples-remote/UserLevelBridge/UserBridge.dsp rename to libs/WpdPack_4_1_2/Examples-remote/UserLevelBridge/UserBridge.dsp index da652d7b..f8ef34a5 100644 --- a/libs/WinPcap-413-173-b4/Examples-remote/UserLevelBridge/UserBridge.dsp +++ b/libs/WpdPack_4_1_2/Examples-remote/UserLevelBridge/UserBridge.dsp @@ -1,106 +1,106 @@ -# Microsoft Developer Studio Project File - Name="UserBridge" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=UserBridge - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "UserBridge.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "UserBridge.mak" CFG="UserBridge - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "UserBridge - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "UserBridge - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "UserBridge - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /MT /W3 /GX /O2 /I "../" /I "../bpf/" /I "../lbl/" /I "../../Include/" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_UNICODE" /D "WPCAP" /D "HAVE_REMOTE" /YX /FD /c -# ADD BASE RSC /l 0x410 /d "NDEBUG" -# ADD RSC /l 0x410 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib ws2_32.lib Iphlpapi.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "UserBridge - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "../" /I "../bpf/" /I "../lbl/" /I "../../Include/" /I "D:/Program Files/Microsoft Platform SDK/include" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_UNICODE" /D "WPCAP" /D "HAVE_REMOTE" /YX /FD /GZ /c -# ADD BASE RSC /l 0x410 /d "_DEBUG" -# ADD RSC /l 0x410 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib ws2_32.lib Iphlpapi.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "UserBridge - Win32 Release" -# Name "UserBridge - Win32 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\UserBridge.c -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# Begin Source File - -SOURCE=..\..\lib\Wpcap.lib -# End Source File -# End Target -# End Project +# Microsoft Developer Studio Project File - Name="UserBridge" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Console Application" 0x0103 + +CFG=UserBridge - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "UserBridge.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "UserBridge.mak" CFG="UserBridge - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "UserBridge - Win32 Release" (based on "Win32 (x86) Console Application") +!MESSAGE "UserBridge - Win32 Debug" (based on "Win32 (x86) Console Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "UserBridge - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD CPP /nologo /MT /W3 /GX /O2 /I "../" /I "../bpf/" /I "../lbl/" /I "../../Include/" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_UNICODE" /D "WPCAP" /D "HAVE_REMOTE" /YX /FD /c +# ADD BASE RSC /l 0x410 /d "NDEBUG" +# ADD RSC /l 0x410 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib ws2_32.lib Iphlpapi.lib /nologo /subsystem:console /machine:I386 + +!ELSEIF "$(CFG)" == "UserBridge - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c +# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "../" /I "../bpf/" /I "../lbl/" /I "../../Include/" /I "D:/Program Files/Microsoft Platform SDK/include" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_UNICODE" /D "WPCAP" /D "HAVE_REMOTE" /YX /FD /GZ /c +# ADD BASE RSC /l 0x410 /d "_DEBUG" +# ADD RSC /l 0x410 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib ws2_32.lib Iphlpapi.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept + +!ENDIF + +# Begin Target + +# Name "UserBridge - Win32 Release" +# Name "UserBridge - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\UserBridge.c +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# End Group +# Begin Source File + +SOURCE=..\..\lib\Wpcap.lib +# End Source File +# End Target +# End Project diff --git a/libs/WinPcap-413-173-b4/Examples-remote/UserLevelBridge/UserBridge.dsw b/libs/WpdPack_4_1_2/Examples-remote/UserLevelBridge/UserBridge.dsw similarity index 94% rename from libs/WinPcap-413-173-b4/Examples-remote/UserLevelBridge/UserBridge.dsw rename to libs/WpdPack_4_1_2/Examples-remote/UserLevelBridge/UserBridge.dsw index d656a867..7104a543 100644 --- a/libs/WinPcap-413-173-b4/Examples-remote/UserLevelBridge/UserBridge.dsw +++ b/libs/WpdPack_4_1_2/Examples-remote/UserLevelBridge/UserBridge.dsw @@ -1,29 +1,29 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "UserBridge"=.\UserBridge.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "UserBridge"=.\UserBridge.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/libs/WinPcap-413-173-b4/Examples-remote/UserLevelBridge/UserBridge.vcproj b/libs/WpdPack_4_1_2/Examples-remote/UserLevelBridge/UserBridge.vcproj similarity index 95% rename from libs/WinPcap-413-173-b4/Examples-remote/UserLevelBridge/UserBridge.vcproj rename to libs/WpdPack_4_1_2/Examples-remote/UserLevelBridge/UserBridge.vcproj index 6b5e2492..06e00b2a 100644 --- a/libs/WinPcap-413-173-b4/Examples-remote/UserLevelBridge/UserBridge.vcproj +++ b/libs/WpdPack_4_1_2/Examples-remote/UserLevelBridge/UserBridge.vcproj @@ -1,364 +1,364 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/libs/WinPcap-413-173-b4/Examples-remote/iflist/iflist.c b/libs/WpdPack_4_1_2/Examples-remote/iflist/iflist.c similarity index 73% rename from libs/WinPcap-413-173-b4/Examples-remote/iflist/iflist.c rename to libs/WpdPack_4_1_2/Examples-remote/iflist/iflist.c index 755c1104..391dda17 100644 --- a/libs/WinPcap-413-173-b4/Examples-remote/iflist/iflist.c +++ b/libs/WpdPack_4_1_2/Examples-remote/iflist/iflist.c @@ -1,176 +1,176 @@ -/* - * Copyright (c) 1999 - 2005 NetGroup, Politecnico di Torino (Italy) - * Copyright (c) 2005 - 2006 CACE Technologies, Davis (California) - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the Politecnico di Torino, CACE Technologies - * nor the names of its contributors may be used to endorse or promote - * products derived from this software without specific prior written - * permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ - -#include - -#include "pcap.h" - -#ifndef _WIN32 - #include - #include -#else - #include -#endif - - -// Function prototypes -void ifprint(pcap_if_t *d); -char *iptos(u_long in); -char* ip6tos(struct sockaddr *sockaddr, char *address, int addrlen); - - -int main() -{ - pcap_if_t *alldevs; - pcap_if_t *d; - char errbuf[PCAP_ERRBUF_SIZE+1]; - char source[PCAP_ERRBUF_SIZE+1]; - - printf("Enter the device you want to list:\n" - "rpcap:// ==> lists interfaces in the local machine\n" - "rpcap://hostname:port ==> lists interfaces in a remote machine\n" - " (rpcapd daemon must be up and running\n" - " and it must accept 'null' authentication)\n" - "file://foldername ==> lists all pcap files in the give folder\n\n" - "Enter your choice: "); - - fgets(source, PCAP_ERRBUF_SIZE, stdin); - source[PCAP_ERRBUF_SIZE] = '\0'; - - /* Retrieve the interfaces list */ - if (pcap_findalldevs_ex(source, NULL, &alldevs, errbuf) == -1) - { - fprintf(stderr,"Error in pcap_findalldevs: %s\n",errbuf); - exit(1); - } - - /* Scan the list printing every entry */ - for(d=alldevs;d;d=d->next) - { - ifprint(d); - } - - pcap_freealldevs(alldevs); - - return 1; -} - - - -/* Print all the available information on the given interface */ -void ifprint(pcap_if_t *d) -{ - pcap_addr_t *a; - char ip6str[128]; - - /* Name */ - printf("%s\n",d->name); - - /* Description */ - if (d->description) - printf("\tDescription: %s\n",d->description); - - /* Loopback Address*/ - printf("\tLoopback: %s\n",(d->flags & PCAP_IF_LOOPBACK)?"yes":"no"); - - /* IP addresses */ - for(a=d->addresses;a;a=a->next) { - printf("\tAddress Family: #%d\n",a->addr->sa_family); - - switch(a->addr->sa_family) - { - case AF_INET: - printf("\tAddress Family Name: AF_INET\n"); - if (a->addr) - printf("\tAddress: %s\n",iptos(((struct sockaddr_in *)a->addr)->sin_addr.s_addr)); - if (a->netmask) - printf("\tNetmask: %s\n",iptos(((struct sockaddr_in *)a->netmask)->sin_addr.s_addr)); - if (a->broadaddr) - printf("\tBroadcast Address: %s\n",iptos(((struct sockaddr_in *)a->broadaddr)->sin_addr.s_addr)); - if (a->dstaddr) - printf("\tDestination Address: %s\n",iptos(((struct sockaddr_in *)a->dstaddr)->sin_addr.s_addr)); - break; - - case AF_INET6: - printf("\tAddress Family Name: AF_INET6\n"); - if (a->addr) - printf("\tAddress: %s\n", ip6tos(a->addr, ip6str, sizeof(ip6str))); - break; - - default: - printf("\tAddress Family Name: Unknown\n"); - break; - } - } - printf("\n"); -} - - - -/* From tcptraceroute, convert a numeric IP address to a string */ -#define IPTOSBUFFERS 12 -char *iptos(u_long in) -{ - static char output[IPTOSBUFFERS][3*4+3+1]; - static short which; - u_char *p; - - p = (u_char *)∈ - which = (which + 1 == IPTOSBUFFERS ? 0 : which + 1); - _snprintf_s(output[which], sizeof(output[which]), sizeof(output[which]),"%d.%d.%d.%d", p[0], p[1], p[2], p[3]); - return output[which]; -} - -char* ip6tos(struct sockaddr *sockaddr, char *address, int addrlen) -{ - socklen_t sockaddrlen; - - #ifdef _WIN32 - sockaddrlen = sizeof(struct sockaddr_in6); - #else - sockaddrlen = sizeof(struct sockaddr_storage); - #endif - - - if(getnameinfo(sockaddr, - sockaddrlen, - address, - addrlen, - NULL, - 0, - NI_NUMERICHOST) != 0) address = NULL; - - return address; -} - - +/* + * Copyright (c) 1999 - 2005 NetGroup, Politecnico di Torino (Italy) + * Copyright (c) 2005 - 2006 CACE Technologies, Davis (California) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Politecnico di Torino, CACE Technologies + * nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written + * permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#include + +#include "pcap.h" + +#ifndef WIN32 + #include + #include +#else + #include +#endif + + +// Function prototypes +void ifprint(pcap_if_t *d); +char *iptos(u_long in); +char* ip6tos(struct sockaddr *sockaddr, char *address, int addrlen); + + +int main() +{ + pcap_if_t *alldevs; + pcap_if_t *d; + char errbuf[PCAP_ERRBUF_SIZE+1]; + char source[PCAP_ERRBUF_SIZE+1]; + + printf("Enter the device you want to list:\n" + "rpcap:// ==> lists interfaces in the local machine\n" + "rpcap://hostname:port ==> lists interfaces in a remote machine\n" + " (rpcapd daemon must be up and running\n" + " and it must accept 'null' authentication)\n" + "file://foldername ==> lists all pcap files in the give folder\n\n" + "Enter your choice: "); + + fgets(source, PCAP_ERRBUF_SIZE, stdin); + source[PCAP_ERRBUF_SIZE] = '\0'; + + /* Retrieve the interfaces list */ + if (pcap_findalldevs_ex(source, NULL, &alldevs, errbuf) == -1) + { + fprintf(stderr,"Error in pcap_findalldevs: %s\n",errbuf); + exit(1); + } + + /* Scan the list printing every entry */ + for(d=alldevs;d;d=d->next) + { + ifprint(d); + } + + pcap_freealldevs(alldevs); + + return 1; +} + + + +/* Print all the available information on the given interface */ +void ifprint(pcap_if_t *d) +{ + pcap_addr_t *a; + char ip6str[128]; + + /* Name */ + printf("%s\n",d->name); + + /* Description */ + if (d->description) + printf("\tDescription: %s\n",d->description); + + /* Loopback Address*/ + printf("\tLoopback: %s\n",(d->flags & PCAP_IF_LOOPBACK)?"yes":"no"); + + /* IP addresses */ + for(a=d->addresses;a;a=a->next) { + printf("\tAddress Family: #%d\n",a->addr->sa_family); + + switch(a->addr->sa_family) + { + case AF_INET: + printf("\tAddress Family Name: AF_INET\n"); + if (a->addr) + printf("\tAddress: %s\n",iptos(((struct sockaddr_in *)a->addr)->sin_addr.s_addr)); + if (a->netmask) + printf("\tNetmask: %s\n",iptos(((struct sockaddr_in *)a->netmask)->sin_addr.s_addr)); + if (a->broadaddr) + printf("\tBroadcast Address: %s\n",iptos(((struct sockaddr_in *)a->broadaddr)->sin_addr.s_addr)); + if (a->dstaddr) + printf("\tDestination Address: %s\n",iptos(((struct sockaddr_in *)a->dstaddr)->sin_addr.s_addr)); + break; + + case AF_INET6: + printf("\tAddress Family Name: AF_INET6\n"); + if (a->addr) + printf("\tAddress: %s\n", ip6tos(a->addr, ip6str, sizeof(ip6str))); + break; + + default: + printf("\tAddress Family Name: Unknown\n"); + break; + } + } + printf("\n"); +} + + + +/* From tcptraceroute, convert a numeric IP address to a string */ +#define IPTOSBUFFERS 12 +char *iptos(u_long in) +{ + static char output[IPTOSBUFFERS][3*4+3+1]; + static short which; + u_char *p; + + p = (u_char *)∈ + which = (which + 1 == IPTOSBUFFERS ? 0 : which + 1); + _snprintf_s(output[which], sizeof(output[which]), sizeof(output[which]),"%d.%d.%d.%d", p[0], p[1], p[2], p[3]); + return output[which]; +} + +char* ip6tos(struct sockaddr *sockaddr, char *address, int addrlen) +{ + socklen_t sockaddrlen; + + #ifdef WIN32 + sockaddrlen = sizeof(struct sockaddr_in6); + #else + sockaddrlen = sizeof(struct sockaddr_storage); + #endif + + + if(getnameinfo(sockaddr, + sockaddrlen, + address, + addrlen, + NULL, + 0, + NI_NUMERICHOST) != 0) address = NULL; + + return address; +} + + diff --git a/libs/WinPcap-413-173-b4/Examples-remote/iflist/iflist.dsp b/libs/WpdPack_4_1_2/Examples-remote/iflist/iflist.dsp similarity index 97% rename from libs/WinPcap-413-173-b4/Examples-remote/iflist/iflist.dsp rename to libs/WpdPack_4_1_2/Examples-remote/iflist/iflist.dsp index b1a8c8c3..41823644 100644 --- a/libs/WinPcap-413-173-b4/Examples-remote/iflist/iflist.dsp +++ b/libs/WpdPack_4_1_2/Examples-remote/iflist/iflist.dsp @@ -1,110 +1,110 @@ -# Microsoft Developer Studio Project File - Name="iflist" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=iflist - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "iflist.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "iflist.mak" CFG="iflist - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "iflist - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "iflist - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "iflist - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "../" /I "../bpf/" /I "../lbl/" /I "../../Include/" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_UNICODE" /D "WPCAP" /D "HAVE_REMOTE" /YX /FD /c -# ADD BASE RSC /l 0x410 /d "NDEBUG" -# ADD RSC /l 0x410 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib ws2_32.lib Iphlpapi.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "iflist - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../" /I "../bpf/" /I "../lbl/" /I "../../Include/" /I "D:/Program Files/Microsoft Platform SDK/include" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_UNICODE" /D "WPCAP" /D "HAVE_REMOTE" /YX /FD /GZ /c -# ADD BASE RSC /l 0x410 /d "_DEBUG" -# ADD RSC /l 0x410 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib ws2_32.lib Iphlpapi.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "iflist - Win32 Release" -# Name "iflist - Win32 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\iflist.c -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# Begin Source File - -SOURCE=..\..\include\pcap.h -# End Source File -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# Begin Source File - -SOURCE=..\..\lib\Wpcap.lib -# End Source File -# End Target -# End Project +# Microsoft Developer Studio Project File - Name="iflist" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Console Application" 0x0103 + +CFG=iflist - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "iflist.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "iflist.mak" CFG="iflist - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "iflist - Win32 Release" (based on "Win32 (x86) Console Application") +!MESSAGE "iflist - Win32 Debug" (based on "Win32 (x86) Console Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "iflist - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /I "../" /I "../bpf/" /I "../lbl/" /I "../../Include/" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_UNICODE" /D "WPCAP" /D "HAVE_REMOTE" /YX /FD /c +# ADD BASE RSC /l 0x410 /d "NDEBUG" +# ADD RSC /l 0x410 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib ws2_32.lib Iphlpapi.lib /nologo /subsystem:console /machine:I386 + +!ELSEIF "$(CFG)" == "iflist - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c +# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../" /I "../bpf/" /I "../lbl/" /I "../../Include/" /I "D:/Program Files/Microsoft Platform SDK/include" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_UNICODE" /D "WPCAP" /D "HAVE_REMOTE" /YX /FD /GZ /c +# ADD BASE RSC /l 0x410 /d "_DEBUG" +# ADD RSC /l 0x410 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib ws2_32.lib Iphlpapi.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept + +!ENDIF + +# Begin Target + +# Name "iflist - Win32 Release" +# Name "iflist - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\iflist.c +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# Begin Source File + +SOURCE=..\..\include\pcap.h +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# End Group +# Begin Source File + +SOURCE=..\..\lib\Wpcap.lib +# End Source File +# End Target +# End Project diff --git a/libs/WinPcap-413-173-b4/Examples-remote/iflist/iflist.dsw b/libs/WpdPack_4_1_2/Examples-remote/iflist/iflist.dsw similarity index 94% rename from libs/WinPcap-413-173-b4/Examples-remote/iflist/iflist.dsw rename to libs/WpdPack_4_1_2/Examples-remote/iflist/iflist.dsw index 6bd686d0..1425db24 100644 --- a/libs/WinPcap-413-173-b4/Examples-remote/iflist/iflist.dsw +++ b/libs/WpdPack_4_1_2/Examples-remote/iflist/iflist.dsw @@ -1,29 +1,29 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "iflist"=.\iflist.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "iflist"=.\iflist.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/libs/WinPcap-413-173-b4/Examples-remote/iflist/iflist.vcproj b/libs/WpdPack_4_1_2/Examples-remote/iflist/iflist.vcproj similarity index 95% rename from libs/WinPcap-413-173-b4/Examples-remote/iflist/iflist.vcproj rename to libs/WpdPack_4_1_2/Examples-remote/iflist/iflist.vcproj index 2b60f453..2b41203f 100644 --- a/libs/WinPcap-413-173-b4/Examples-remote/iflist/iflist.vcproj +++ b/libs/WpdPack_4_1_2/Examples-remote/iflist/iflist.vcproj @@ -1,364 +1,364 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/libs/WinPcap-413-173-b4/Examples-remote/misc/MakeAll.sln b/libs/WpdPack_4_1_2/Examples-remote/misc/MakeAll.sln similarity index 98% rename from libs/WinPcap-413-173-b4/Examples-remote/misc/MakeAll.sln rename to libs/WpdPack_4_1_2/Examples-remote/misc/MakeAll.sln index 284d1b3e..8984e0fe 100644 --- a/libs/WinPcap-413-173-b4/Examples-remote/misc/MakeAll.sln +++ b/libs/WpdPack_4_1_2/Examples-remote/misc/MakeAll.sln @@ -1,76 +1,76 @@ - -Microsoft Visual Studio Solution File, Format Version 9.00 -# Visual Studio 2005 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "basic_dump", "basic_dump.vcproj", "{66297062-96A0-4F0E-B147-3C8384031232}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "basic_dump_ex", "basic_dump_ex.vcproj", "{92849630-6B09-409C-A7AD-E91E682558B1}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "readfile", "readfile.vcproj", "{161E7606-F4CD-4A04-AB6B-5837F7818EE1}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "readfile_ex", "readfile_ex.vcproj", "{3071DFB6-68F8-41EF-A56C-0C7A71B6967C}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "savedump", "savedump.vcproj", "{1B8791CB-DD15-46BF-B0A2-879892085538}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sendpack", "sendpack.vcproj", "{1C376689-5F61-48E7-AE83-0DED9EE9E458}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {66297062-96A0-4F0E-B147-3C8384031232}.Debug|Win32.ActiveCfg = Debug|Win32 - {66297062-96A0-4F0E-B147-3C8384031232}.Debug|Win32.Build.0 = Debug|Win32 - {66297062-96A0-4F0E-B147-3C8384031232}.Debug|x64.ActiveCfg = Debug|x64 - {66297062-96A0-4F0E-B147-3C8384031232}.Debug|x64.Build.0 = Debug|x64 - {66297062-96A0-4F0E-B147-3C8384031232}.Release|Win32.ActiveCfg = Release|Win32 - {66297062-96A0-4F0E-B147-3C8384031232}.Release|Win32.Build.0 = Release|Win32 - {66297062-96A0-4F0E-B147-3C8384031232}.Release|x64.ActiveCfg = Release|x64 - {66297062-96A0-4F0E-B147-3C8384031232}.Release|x64.Build.0 = Release|x64 - {92849630-6B09-409C-A7AD-E91E682558B1}.Debug|Win32.ActiveCfg = Debug|Win32 - {92849630-6B09-409C-A7AD-E91E682558B1}.Debug|Win32.Build.0 = Debug|Win32 - {92849630-6B09-409C-A7AD-E91E682558B1}.Debug|x64.ActiveCfg = Debug|x64 - {92849630-6B09-409C-A7AD-E91E682558B1}.Debug|x64.Build.0 = Debug|x64 - {92849630-6B09-409C-A7AD-E91E682558B1}.Release|Win32.ActiveCfg = Release|Win32 - {92849630-6B09-409C-A7AD-E91E682558B1}.Release|Win32.Build.0 = Release|Win32 - {92849630-6B09-409C-A7AD-E91E682558B1}.Release|x64.ActiveCfg = Release|x64 - {92849630-6B09-409C-A7AD-E91E682558B1}.Release|x64.Build.0 = Release|x64 - {161E7606-F4CD-4A04-AB6B-5837F7818EE1}.Debug|Win32.ActiveCfg = Debug|Win32 - {161E7606-F4CD-4A04-AB6B-5837F7818EE1}.Debug|Win32.Build.0 = Debug|Win32 - {161E7606-F4CD-4A04-AB6B-5837F7818EE1}.Debug|x64.ActiveCfg = Debug|x64 - {161E7606-F4CD-4A04-AB6B-5837F7818EE1}.Debug|x64.Build.0 = Debug|x64 - {161E7606-F4CD-4A04-AB6B-5837F7818EE1}.Release|Win32.ActiveCfg = Release|Win32 - {161E7606-F4CD-4A04-AB6B-5837F7818EE1}.Release|Win32.Build.0 = Release|Win32 - {161E7606-F4CD-4A04-AB6B-5837F7818EE1}.Release|x64.ActiveCfg = Release|x64 - {161E7606-F4CD-4A04-AB6B-5837F7818EE1}.Release|x64.Build.0 = Release|x64 - {3071DFB6-68F8-41EF-A56C-0C7A71B6967C}.Debug|Win32.ActiveCfg = Debug|Win32 - {3071DFB6-68F8-41EF-A56C-0C7A71B6967C}.Debug|Win32.Build.0 = Debug|Win32 - {3071DFB6-68F8-41EF-A56C-0C7A71B6967C}.Debug|x64.ActiveCfg = Debug|x64 - {3071DFB6-68F8-41EF-A56C-0C7A71B6967C}.Debug|x64.Build.0 = Debug|x64 - {3071DFB6-68F8-41EF-A56C-0C7A71B6967C}.Release|Win32.ActiveCfg = Release|Win32 - {3071DFB6-68F8-41EF-A56C-0C7A71B6967C}.Release|Win32.Build.0 = Release|Win32 - {3071DFB6-68F8-41EF-A56C-0C7A71B6967C}.Release|x64.ActiveCfg = Release|x64 - {3071DFB6-68F8-41EF-A56C-0C7A71B6967C}.Release|x64.Build.0 = Release|x64 - {1B8791CB-DD15-46BF-B0A2-879892085538}.Debug|Win32.ActiveCfg = Debug|Win32 - {1B8791CB-DD15-46BF-B0A2-879892085538}.Debug|Win32.Build.0 = Debug|Win32 - {1B8791CB-DD15-46BF-B0A2-879892085538}.Debug|x64.ActiveCfg = Debug|x64 - {1B8791CB-DD15-46BF-B0A2-879892085538}.Debug|x64.Build.0 = Debug|x64 - {1B8791CB-DD15-46BF-B0A2-879892085538}.Release|Win32.ActiveCfg = Release|Win32 - {1B8791CB-DD15-46BF-B0A2-879892085538}.Release|Win32.Build.0 = Release|Win32 - {1B8791CB-DD15-46BF-B0A2-879892085538}.Release|x64.ActiveCfg = Release|x64 - {1B8791CB-DD15-46BF-B0A2-879892085538}.Release|x64.Build.0 = Release|x64 - {1C376689-5F61-48E7-AE83-0DED9EE9E458}.Debug|Win32.ActiveCfg = Debug|Win32 - {1C376689-5F61-48E7-AE83-0DED9EE9E458}.Debug|Win32.Build.0 = Debug|Win32 - {1C376689-5F61-48E7-AE83-0DED9EE9E458}.Debug|x64.ActiveCfg = Debug|x64 - {1C376689-5F61-48E7-AE83-0DED9EE9E458}.Debug|x64.Build.0 = Debug|x64 - {1C376689-5F61-48E7-AE83-0DED9EE9E458}.Release|Win32.ActiveCfg = Release|Win32 - {1C376689-5F61-48E7-AE83-0DED9EE9E458}.Release|Win32.Build.0 = Release|Win32 - {1C376689-5F61-48E7-AE83-0DED9EE9E458}.Release|x64.ActiveCfg = Release|x64 - {1C376689-5F61-48E7-AE83-0DED9EE9E458}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "basic_dump", "basic_dump.vcproj", "{66297062-96A0-4F0E-B147-3C8384031232}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "basic_dump_ex", "basic_dump_ex.vcproj", "{92849630-6B09-409C-A7AD-E91E682558B1}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "readfile", "readfile.vcproj", "{161E7606-F4CD-4A04-AB6B-5837F7818EE1}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "readfile_ex", "readfile_ex.vcproj", "{3071DFB6-68F8-41EF-A56C-0C7A71B6967C}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "savedump", "savedump.vcproj", "{1B8791CB-DD15-46BF-B0A2-879892085538}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sendpack", "sendpack.vcproj", "{1C376689-5F61-48E7-AE83-0DED9EE9E458}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {66297062-96A0-4F0E-B147-3C8384031232}.Debug|Win32.ActiveCfg = Debug|Win32 + {66297062-96A0-4F0E-B147-3C8384031232}.Debug|Win32.Build.0 = Debug|Win32 + {66297062-96A0-4F0E-B147-3C8384031232}.Debug|x64.ActiveCfg = Debug|x64 + {66297062-96A0-4F0E-B147-3C8384031232}.Debug|x64.Build.0 = Debug|x64 + {66297062-96A0-4F0E-B147-3C8384031232}.Release|Win32.ActiveCfg = Release|Win32 + {66297062-96A0-4F0E-B147-3C8384031232}.Release|Win32.Build.0 = Release|Win32 + {66297062-96A0-4F0E-B147-3C8384031232}.Release|x64.ActiveCfg = Release|x64 + {66297062-96A0-4F0E-B147-3C8384031232}.Release|x64.Build.0 = Release|x64 + {92849630-6B09-409C-A7AD-E91E682558B1}.Debug|Win32.ActiveCfg = Debug|Win32 + {92849630-6B09-409C-A7AD-E91E682558B1}.Debug|Win32.Build.0 = Debug|Win32 + {92849630-6B09-409C-A7AD-E91E682558B1}.Debug|x64.ActiveCfg = Debug|x64 + {92849630-6B09-409C-A7AD-E91E682558B1}.Debug|x64.Build.0 = Debug|x64 + {92849630-6B09-409C-A7AD-E91E682558B1}.Release|Win32.ActiveCfg = Release|Win32 + {92849630-6B09-409C-A7AD-E91E682558B1}.Release|Win32.Build.0 = Release|Win32 + {92849630-6B09-409C-A7AD-E91E682558B1}.Release|x64.ActiveCfg = Release|x64 + {92849630-6B09-409C-A7AD-E91E682558B1}.Release|x64.Build.0 = Release|x64 + {161E7606-F4CD-4A04-AB6B-5837F7818EE1}.Debug|Win32.ActiveCfg = Debug|Win32 + {161E7606-F4CD-4A04-AB6B-5837F7818EE1}.Debug|Win32.Build.0 = Debug|Win32 + {161E7606-F4CD-4A04-AB6B-5837F7818EE1}.Debug|x64.ActiveCfg = Debug|x64 + {161E7606-F4CD-4A04-AB6B-5837F7818EE1}.Debug|x64.Build.0 = Debug|x64 + {161E7606-F4CD-4A04-AB6B-5837F7818EE1}.Release|Win32.ActiveCfg = Release|Win32 + {161E7606-F4CD-4A04-AB6B-5837F7818EE1}.Release|Win32.Build.0 = Release|Win32 + {161E7606-F4CD-4A04-AB6B-5837F7818EE1}.Release|x64.ActiveCfg = Release|x64 + {161E7606-F4CD-4A04-AB6B-5837F7818EE1}.Release|x64.Build.0 = Release|x64 + {3071DFB6-68F8-41EF-A56C-0C7A71B6967C}.Debug|Win32.ActiveCfg = Debug|Win32 + {3071DFB6-68F8-41EF-A56C-0C7A71B6967C}.Debug|Win32.Build.0 = Debug|Win32 + {3071DFB6-68F8-41EF-A56C-0C7A71B6967C}.Debug|x64.ActiveCfg = Debug|x64 + {3071DFB6-68F8-41EF-A56C-0C7A71B6967C}.Debug|x64.Build.0 = Debug|x64 + {3071DFB6-68F8-41EF-A56C-0C7A71B6967C}.Release|Win32.ActiveCfg = Release|Win32 + {3071DFB6-68F8-41EF-A56C-0C7A71B6967C}.Release|Win32.Build.0 = Release|Win32 + {3071DFB6-68F8-41EF-A56C-0C7A71B6967C}.Release|x64.ActiveCfg = Release|x64 + {3071DFB6-68F8-41EF-A56C-0C7A71B6967C}.Release|x64.Build.0 = Release|x64 + {1B8791CB-DD15-46BF-B0A2-879892085538}.Debug|Win32.ActiveCfg = Debug|Win32 + {1B8791CB-DD15-46BF-B0A2-879892085538}.Debug|Win32.Build.0 = Debug|Win32 + {1B8791CB-DD15-46BF-B0A2-879892085538}.Debug|x64.ActiveCfg = Debug|x64 + {1B8791CB-DD15-46BF-B0A2-879892085538}.Debug|x64.Build.0 = Debug|x64 + {1B8791CB-DD15-46BF-B0A2-879892085538}.Release|Win32.ActiveCfg = Release|Win32 + {1B8791CB-DD15-46BF-B0A2-879892085538}.Release|Win32.Build.0 = Release|Win32 + {1B8791CB-DD15-46BF-B0A2-879892085538}.Release|x64.ActiveCfg = Release|x64 + {1B8791CB-DD15-46BF-B0A2-879892085538}.Release|x64.Build.0 = Release|x64 + {1C376689-5F61-48E7-AE83-0DED9EE9E458}.Debug|Win32.ActiveCfg = Debug|Win32 + {1C376689-5F61-48E7-AE83-0DED9EE9E458}.Debug|Win32.Build.0 = Debug|Win32 + {1C376689-5F61-48E7-AE83-0DED9EE9E458}.Debug|x64.ActiveCfg = Debug|x64 + {1C376689-5F61-48E7-AE83-0DED9EE9E458}.Debug|x64.Build.0 = Debug|x64 + {1C376689-5F61-48E7-AE83-0DED9EE9E458}.Release|Win32.ActiveCfg = Release|Win32 + {1C376689-5F61-48E7-AE83-0DED9EE9E458}.Release|Win32.Build.0 = Release|Win32 + {1C376689-5F61-48E7-AE83-0DED9EE9E458}.Release|x64.ActiveCfg = Release|x64 + {1C376689-5F61-48E7-AE83-0DED9EE9E458}.Release|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/libs/WinPcap-413-173-b4/Examples-remote/misc/MakeaAll.dsw b/libs/WpdPack_4_1_2/Examples-remote/misc/MakeaAll.dsw similarity index 94% rename from libs/WinPcap-413-173-b4/Examples-remote/misc/MakeaAll.dsw rename to libs/WpdPack_4_1_2/Examples-remote/misc/MakeaAll.dsw index 6f06f47e..8223f54d 100644 --- a/libs/WinPcap-413-173-b4/Examples-remote/misc/MakeaAll.dsw +++ b/libs/WpdPack_4_1_2/Examples-remote/misc/MakeaAll.dsw @@ -1,89 +1,89 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "basic_dump"=.\basic_dump.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "basic_dump_ex"=.\basic_dump_ex.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "readfile"=.\readfile.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "readfile_ex"=.\readfile_ex.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "savedump"=.\savedump.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "sendpack"=.\sendpack.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "basic_dump"=.\basic_dump.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "basic_dump_ex"=.\basic_dump_ex.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "readfile"=.\readfile.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "readfile_ex"=.\readfile_ex.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "savedump"=.\savedump.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "sendpack"=.\sendpack.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/libs/WinPcap-413-173-b4/Examples-remote/misc/basic_dump.c b/libs/WpdPack_4_1_2/Examples-remote/misc/basic_dump.c similarity index 96% rename from libs/WinPcap-413-173-b4/Examples-remote/misc/basic_dump.c rename to libs/WpdPack_4_1_2/Examples-remote/misc/basic_dump.c index e5a18e54..8c660f3e 100644 --- a/libs/WinPcap-413-173-b4/Examples-remote/misc/basic_dump.c +++ b/libs/WpdPack_4_1_2/Examples-remote/misc/basic_dump.c @@ -1,100 +1,100 @@ -#include "pcap.h" - -/* prototype of the packet handler */ -void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data); - -int main() -{ -pcap_if_t *alldevs; -pcap_if_t *d; -int inum; -int i=0; -pcap_t *adhandle; -char errbuf[PCAP_ERRBUF_SIZE]; - - /* Retrieve the device list on the local machine */ - if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL, &alldevs, errbuf) == -1) - { - fprintf(stderr,"Error in pcap_findalldevs: %s\n", errbuf); - exit(1); - } - - /* Print the list */ - for(d=alldevs; d; d=d->next) - { - printf("%d. %s", ++i, d->name); - if (d->description) - printf(" (%s)\n", d->description); - else - printf(" (No description available)\n"); - } - - if(i==0) - { - printf("\nNo interfaces found! Make sure WinPcap is installed.\n"); - return -1; - } - - printf("Enter the interface number (1-%d):",i); - scanf_s("%d", &inum); - - if(inum < 1 || inum > i) - { - printf("\nInterface number out of range.\n"); - /* Free the device list */ - pcap_freealldevs(alldevs); - return -1; - } - - /* Jump to the selected adapter */ - for(d=alldevs, i=0; i< inum-1 ;d=d->next, i++); - - /* Open the device */ - if ( (adhandle= pcap_open(d->name, // name of the device - 65536, // portion of the packet to capture - // 65536 guarantees that the whole packet will be captured on all the link layers - PCAP_OPENFLAG_PROMISCUOUS, // promiscuous mode - 1000, // read timeout - NULL, // authentication on the remote machine - errbuf // error buffer - ) ) == NULL) - { - fprintf(stderr,"\nUnable to open the adapter. %s is not supported by WinPcap\n", d->name); - /* Free the device list */ - pcap_freealldevs(alldevs); - return -1; - } - - printf("\nlistening on %s...\n", d->description); - - /* At this point, we don't need any more the device list. Free it */ - pcap_freealldevs(alldevs); - - /* start the capture */ - pcap_loop(adhandle, 0, packet_handler, NULL); - - return 0; -} - - -/* Callback function invoked by libpcap for every incoming packet */ -void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data) -{ - struct tm ltime; - char timestr[16]; - time_t local_tv_sec; - - /* - * unused variables - */ - (VOID)(param); - (VOID)(pkt_data); - - /* convert the timestamp to readable format */ - local_tv_sec = header->ts.tv_sec; - localtime_s(<ime, &local_tv_sec); - strftime( timestr, sizeof timestr, "%H:%M:%S", <ime); - - printf("%s,%.6d len:%d\n", timestr, header->ts.tv_usec, header->len); - -} +#include "pcap.h" + +/* prototype of the packet handler */ +void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data); + +int main() +{ +pcap_if_t *alldevs; +pcap_if_t *d; +int inum; +int i=0; +pcap_t *adhandle; +char errbuf[PCAP_ERRBUF_SIZE]; + + /* Retrieve the device list on the local machine */ + if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL, &alldevs, errbuf) == -1) + { + fprintf(stderr,"Error in pcap_findalldevs: %s\n", errbuf); + exit(1); + } + + /* Print the list */ + for(d=alldevs; d; d=d->next) + { + printf("%d. %s", ++i, d->name); + if (d->description) + printf(" (%s)\n", d->description); + else + printf(" (No description available)\n"); + } + + if(i==0) + { + printf("\nNo interfaces found! Make sure WinPcap is installed.\n"); + return -1; + } + + printf("Enter the interface number (1-%d):",i); + scanf_s("%d", &inum); + + if(inum < 1 || inum > i) + { + printf("\nInterface number out of range.\n"); + /* Free the device list */ + pcap_freealldevs(alldevs); + return -1; + } + + /* Jump to the selected adapter */ + for(d=alldevs, i=0; i< inum-1 ;d=d->next, i++); + + /* Open the device */ + if ( (adhandle= pcap_open(d->name, // name of the device + 65536, // portion of the packet to capture + // 65536 guarantees that the whole packet will be captured on all the link layers + PCAP_OPENFLAG_PROMISCUOUS, // promiscuous mode + 1000, // read timeout + NULL, // authentication on the remote machine + errbuf // error buffer + ) ) == NULL) + { + fprintf(stderr,"\nUnable to open the adapter. %s is not supported by WinPcap\n", d->name); + /* Free the device list */ + pcap_freealldevs(alldevs); + return -1; + } + + printf("\nlistening on %s...\n", d->description); + + /* At this point, we don't need any more the device list. Free it */ + pcap_freealldevs(alldevs); + + /* start the capture */ + pcap_loop(adhandle, 0, packet_handler, NULL); + + return 0; +} + + +/* Callback function invoked by libpcap for every incoming packet */ +void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data) +{ + struct tm ltime; + char timestr[16]; + time_t local_tv_sec; + + /* + * unused variables + */ + (VOID)(param); + (VOID)(pkt_data); + + /* convert the timestamp to readable format */ + local_tv_sec = header->ts.tv_sec; + localtime_s(<ime, &local_tv_sec); + strftime( timestr, sizeof timestr, "%H:%M:%S", <ime); + + printf("%s,%.6d len:%d\n", timestr, header->ts.tv_usec, header->len); + +} diff --git a/libs/WinPcap-413-173-b4/Examples-pcap/basic_dump/basic_dump.dsp b/libs/WpdPack_4_1_2/Examples-remote/misc/basic_dump.dsp similarity index 97% rename from libs/WinPcap-413-173-b4/Examples-pcap/basic_dump/basic_dump.dsp rename to libs/WpdPack_4_1_2/Examples-remote/misc/basic_dump.dsp index 3e8bc029..7e74aaa0 100644 --- a/libs/WinPcap-413-173-b4/Examples-pcap/basic_dump/basic_dump.dsp +++ b/libs/WpdPack_4_1_2/Examples-remote/misc/basic_dump.dsp @@ -1,110 +1,110 @@ -# Microsoft Developer Studio Project File - Name="basic_dump" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=basic_dump - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "basic_dump.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "basic_dump.mak" CFG="basic_dump - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "basic_dump - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "basic_dump - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "basic_dump - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "../" /I "../bpf/" /I "../lbl/" /I "../../Include/" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_UNICODE" /D "WPCAP" /D "HAVE_REMOTE" /YX /FD /c -# ADD BASE RSC /l 0x410 /d "NDEBUG" -# ADD RSC /l 0x410 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib ws2_32.lib Iphlpapi.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "basic_dump - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../" /I "../bpf/" /I "../lbl/" /I "../../Include/" /I "D:/Program Files/Microsoft Platform SDK/include" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_UNICODE" /D "WPCAP" /D "HAVE_REMOTE" /YX /FD /GZ /c -# ADD BASE RSC /l 0x410 /d "_DEBUG" -# ADD RSC /l 0x410 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib ws2_32.lib Iphlpapi.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "basic_dump - Win32 Release" -# Name "basic_dump - Win32 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\basic_dump.c -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# Begin Source File - -SOURCE=..\..\include\pcap.h -# End Source File -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# Begin Source File - -SOURCE=..\..\lib\Wpcap.lib -# End Source File -# End Target -# End Project +# Microsoft Developer Studio Project File - Name="basic_dump" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Console Application" 0x0103 + +CFG=basic_dump - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "basic_dump.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "basic_dump.mak" CFG="basic_dump - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "basic_dump - Win32 Release" (based on "Win32 (x86) Console Application") +!MESSAGE "basic_dump - Win32 Debug" (based on "Win32 (x86) Console Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "basic_dump - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /I "../" /I "../bpf/" /I "../lbl/" /I "../../Include/" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_UNICODE" /D "WPCAP" /D "HAVE_REMOTE" /YX /FD /c +# ADD BASE RSC /l 0x410 /d "NDEBUG" +# ADD RSC /l 0x410 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib ws2_32.lib Iphlpapi.lib /nologo /subsystem:console /machine:I386 + +!ELSEIF "$(CFG)" == "basic_dump - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c +# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../" /I "../bpf/" /I "../lbl/" /I "../../Include/" /I "D:/Program Files/Microsoft Platform SDK/include" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_UNICODE" /D "WPCAP" /D "HAVE_REMOTE" /YX /FD /GZ /c +# ADD BASE RSC /l 0x410 /d "_DEBUG" +# ADD RSC /l 0x410 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib ws2_32.lib Iphlpapi.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept + +!ENDIF + +# Begin Target + +# Name "basic_dump - Win32 Release" +# Name "basic_dump - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\basic_dump.c +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# Begin Source File + +SOURCE=..\..\include\pcap.h +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# End Group +# Begin Source File + +SOURCE=..\..\lib\Wpcap.lib +# End Source File +# End Target +# End Project diff --git a/libs/WinPcap-413-173-b4/Examples-remote/misc/basic_dump.vcproj b/libs/WpdPack_4_1_2/Examples-remote/misc/basic_dump.vcproj similarity index 95% rename from libs/WinPcap-413-173-b4/Examples-remote/misc/basic_dump.vcproj rename to libs/WpdPack_4_1_2/Examples-remote/misc/basic_dump.vcproj index fc6a36af..6fb00fe2 100644 --- a/libs/WinPcap-413-173-b4/Examples-remote/misc/basic_dump.vcproj +++ b/libs/WpdPack_4_1_2/Examples-remote/misc/basic_dump.vcproj @@ -1,364 +1,364 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/libs/WinPcap-413-173-b4/Examples-remote/misc/basic_dump_ex.c b/libs/WpdPack_4_1_2/Examples-remote/misc/basic_dump_ex.c similarity index 96% rename from libs/WinPcap-413-173-b4/Examples-remote/misc/basic_dump_ex.c rename to libs/WpdPack_4_1_2/Examples-remote/misc/basic_dump_ex.c index 2a90d61e..ec047b3b 100644 --- a/libs/WinPcap-413-173-b4/Examples-remote/misc/basic_dump_ex.c +++ b/libs/WpdPack_4_1_2/Examples-remote/misc/basic_dump_ex.c @@ -1,99 +1,99 @@ -#include "pcap.h" - - -int main() -{ -pcap_if_t *alldevs; -pcap_if_t *d; -int inum; -int i=0; -pcap_t *adhandle; -int res; -char errbuf[PCAP_ERRBUF_SIZE]; -struct tm ltime; -char timestr[16]; -struct pcap_pkthdr *header; -const u_char *pkt_data; -time_t local_tv_sec; - - - /* Retrieve the device list on the local machine */ - if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL, &alldevs, errbuf) == -1) - { - fprintf(stderr,"Error in pcap_findalldevs: %s\n", errbuf); - exit(1); - } - - /* Print the list */ - for(d=alldevs; d; d=d->next) - { - printf("%d. %s", ++i, d->name); - if (d->description) - printf(" (%s)\n", d->description); - else - printf(" (No description available)\n"); - } - - if(i==0) - { - printf("\nNo interfaces found! Make sure WinPcap is installed.\n"); - return -1; - } - - printf("Enter the interface number (1-%d):",i); - scanf_s("%d", &inum); - - if(inum < 1 || inum > i) - { - printf("\nInterface number out of range.\n"); - /* Free the device list */ - pcap_freealldevs(alldevs); - return -1; - } - - /* Jump to the selected adapter */ - for(d=alldevs, i=0; i< inum-1 ;d=d->next, i++); - - /* Open the device */ - if ( (adhandle= pcap_open(d->name, // name of the device - 65536, // portion of the packet to capture. - // 65536 guarantees that the whole packet will be captured on all the link layers - PCAP_OPENFLAG_PROMISCUOUS, // promiscuous mode - 1000, // read timeout - NULL, // authentication on the remote machine - errbuf // error buffer - ) ) == NULL) - { - fprintf(stderr,"\nUnable to open the adapter. %s is not supported by WinPcap\n", d->name); - /* Free the device list */ - pcap_freealldevs(alldevs); - return -1; - } - - printf("\nlistening on %s...\n", d->description); - - /* At this point, we don't need any more the device list. Free it */ - pcap_freealldevs(alldevs); - - /* Retrieve the packets */ - while((res = pcap_next_ex( adhandle, &header, &pkt_data)) >= 0){ - - if(res == 0) - /* Timeout elapsed */ - continue; - - /* convert the timestamp to readable format */ - local_tv_sec = header->ts.tv_sec; - localtime_s(<ime, &local_tv_sec); - strftime( timestr, sizeof timestr, "%H:%M:%S", <ime); - - printf("%s,%.6d len:%d\n", timestr, header->ts.tv_usec, header->len); - } - - if(res == -1){ - printf("Error reading the packets: %s\n", pcap_geterr(adhandle)); - return -1; - } - - return 0; +#include "pcap.h" + + +int main() +{ +pcap_if_t *alldevs; +pcap_if_t *d; +int inum; +int i=0; +pcap_t *adhandle; +int res; +char errbuf[PCAP_ERRBUF_SIZE]; +struct tm ltime; +char timestr[16]; +struct pcap_pkthdr *header; +const u_char *pkt_data; +time_t local_tv_sec; + + + /* Retrieve the device list on the local machine */ + if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL, &alldevs, errbuf) == -1) + { + fprintf(stderr,"Error in pcap_findalldevs: %s\n", errbuf); + exit(1); + } + + /* Print the list */ + for(d=alldevs; d; d=d->next) + { + printf("%d. %s", ++i, d->name); + if (d->description) + printf(" (%s)\n", d->description); + else + printf(" (No description available)\n"); + } + + if(i==0) + { + printf("\nNo interfaces found! Make sure WinPcap is installed.\n"); + return -1; + } + + printf("Enter the interface number (1-%d):",i); + scanf_s("%d", &inum); + + if(inum < 1 || inum > i) + { + printf("\nInterface number out of range.\n"); + /* Free the device list */ + pcap_freealldevs(alldevs); + return -1; + } + + /* Jump to the selected adapter */ + for(d=alldevs, i=0; i< inum-1 ;d=d->next, i++); + + /* Open the device */ + if ( (adhandle= pcap_open(d->name, // name of the device + 65536, // portion of the packet to capture. + // 65536 guarantees that the whole packet will be captured on all the link layers + PCAP_OPENFLAG_PROMISCUOUS, // promiscuous mode + 1000, // read timeout + NULL, // authentication on the remote machine + errbuf // error buffer + ) ) == NULL) + { + fprintf(stderr,"\nUnable to open the adapter. %s is not supported by WinPcap\n", d->name); + /* Free the device list */ + pcap_freealldevs(alldevs); + return -1; + } + + printf("\nlistening on %s...\n", d->description); + + /* At this point, we don't need any more the device list. Free it */ + pcap_freealldevs(alldevs); + + /* Retrieve the packets */ + while((res = pcap_next_ex( adhandle, &header, &pkt_data)) >= 0){ + + if(res == 0) + /* Timeout elapsed */ + continue; + + /* convert the timestamp to readable format */ + local_tv_sec = header->ts.tv_sec; + localtime_s(<ime, &local_tv_sec); + strftime( timestr, sizeof timestr, "%H:%M:%S", <ime); + + printf("%s,%.6d len:%d\n", timestr, header->ts.tv_usec, header->len); + } + + if(res == -1){ + printf("Error reading the packets: %s\n", pcap_geterr(adhandle)); + return -1; + } + + return 0; } \ No newline at end of file diff --git a/libs/WinPcap-413-173-b4/Examples-remote/misc/basic_dump_ex.dsp b/libs/WpdPack_4_1_2/Examples-remote/misc/basic_dump_ex.dsp similarity index 97% rename from libs/WinPcap-413-173-b4/Examples-remote/misc/basic_dump_ex.dsp rename to libs/WpdPack_4_1_2/Examples-remote/misc/basic_dump_ex.dsp index e798f636..0405d292 100644 --- a/libs/WinPcap-413-173-b4/Examples-remote/misc/basic_dump_ex.dsp +++ b/libs/WpdPack_4_1_2/Examples-remote/misc/basic_dump_ex.dsp @@ -1,110 +1,110 @@ -# Microsoft Developer Studio Project File - Name="basic_dump_ex" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=basic_dump_ex - Win32 Release -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "basic_dump_ex.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "basic_dump_ex.mak" CFG="basic_dump_ex - Win32 Release" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "basic_dump_ex - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "basic_dump_ex - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "basic_dump_ex - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "../" /I "../bpf/" /I "../lbl/" /I "../../Include/" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_UNICODE" /D "WPCAP" /D "HAVE_REMOTE" /YX /FD /c -# ADD BASE RSC /l 0x410 /d "NDEBUG" -# ADD RSC /l 0x410 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib ws2_32.lib Iphlpapi.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "basic_dump_ex - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../" /I "../bpf/" /I "../lbl/" /I "../../Include/" /I "D:/Program Files/Microsoft Platform SDK/include" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_UNICODE" /D "WPCAP" /D "HAVE_REMOTE" /YX /FD /GZ /c -# ADD BASE RSC /l 0x410 /d "_DEBUG" -# ADD RSC /l 0x410 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib ws2_32.lib Iphlpapi.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "basic_dump_ex - Win32 Release" -# Name "basic_dump_ex - Win32 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\basic_dump_ex.c -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# Begin Source File - -SOURCE=..\..\include\pcap.h -# End Source File -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# Begin Source File - -SOURCE=..\..\lib\Wpcap.lib -# End Source File -# End Target -# End Project +# Microsoft Developer Studio Project File - Name="basic_dump_ex" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Console Application" 0x0103 + +CFG=basic_dump_ex - Win32 Release +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "basic_dump_ex.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "basic_dump_ex.mak" CFG="basic_dump_ex - Win32 Release" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "basic_dump_ex - Win32 Release" (based on "Win32 (x86) Console Application") +!MESSAGE "basic_dump_ex - Win32 Debug" (based on "Win32 (x86) Console Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "basic_dump_ex - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /I "../" /I "../bpf/" /I "../lbl/" /I "../../Include/" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_UNICODE" /D "WPCAP" /D "HAVE_REMOTE" /YX /FD /c +# ADD BASE RSC /l 0x410 /d "NDEBUG" +# ADD RSC /l 0x410 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib ws2_32.lib Iphlpapi.lib /nologo /subsystem:console /machine:I386 + +!ELSEIF "$(CFG)" == "basic_dump_ex - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c +# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../" /I "../bpf/" /I "../lbl/" /I "../../Include/" /I "D:/Program Files/Microsoft Platform SDK/include" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_UNICODE" /D "WPCAP" /D "HAVE_REMOTE" /YX /FD /GZ /c +# ADD BASE RSC /l 0x410 /d "_DEBUG" +# ADD RSC /l 0x410 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib ws2_32.lib Iphlpapi.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept + +!ENDIF + +# Begin Target + +# Name "basic_dump_ex - Win32 Release" +# Name "basic_dump_ex - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\basic_dump_ex.c +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# Begin Source File + +SOURCE=..\..\include\pcap.h +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# End Group +# Begin Source File + +SOURCE=..\..\lib\Wpcap.lib +# End Source File +# End Target +# End Project diff --git a/libs/WinPcap-413-173-b4/Examples-remote/misc/basic_dump_ex.vcproj b/libs/WpdPack_4_1_2/Examples-remote/misc/basic_dump_ex.vcproj similarity index 95% rename from libs/WinPcap-413-173-b4/Examples-remote/misc/basic_dump_ex.vcproj rename to libs/WpdPack_4_1_2/Examples-remote/misc/basic_dump_ex.vcproj index 18ae092a..58152036 100644 --- a/libs/WinPcap-413-173-b4/Examples-remote/misc/basic_dump_ex.vcproj +++ b/libs/WpdPack_4_1_2/Examples-remote/misc/basic_dump_ex.vcproj @@ -1,364 +1,364 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/libs/WinPcap-413-173-b4/Examples-remote/misc/readfile.c b/libs/WpdPack_4_1_2/Examples-remote/misc/readfile.c similarity index 95% rename from libs/WinPcap-413-173-b4/Examples-remote/misc/readfile.c rename to libs/WpdPack_4_1_2/Examples-remote/misc/readfile.c index 50f8767f..7db43b43 100644 --- a/libs/WinPcap-413-173-b4/Examples-remote/misc/readfile.c +++ b/libs/WpdPack_4_1_2/Examples-remote/misc/readfile.c @@ -1,78 +1,78 @@ -#include -#include - -#define LINE_LEN 16 - -void dispatcher_handler(u_char *, const struct pcap_pkthdr *, const u_char *); - -int main(int argc, char **argv) -{ -pcap_t *fp; -char errbuf[PCAP_ERRBUF_SIZE]; -char source[PCAP_BUF_SIZE]; - - if(argc != 2){ - - printf("usage: %s filename", argv[0]); - return -1; - - } - - /* Create the source string according to the new WinPcap syntax */ - if ( pcap_createsrcstr( source, // variable that will keep the source string - PCAP_SRC_FILE, // we want to open a file - NULL, // remote host - NULL, // port on the remote host - argv[1], // name of the file we want to open - errbuf // error buffer - ) != 0) - { - fprintf(stderr,"\nError creating a source string\n"); - return -1; - } - - /* Open the capture file */ - if ( (fp= pcap_open(source, // name of the device - 65536, // portion of the packet to capture - // 65536 guarantees that the whole packet will be captured on all the link layers - PCAP_OPENFLAG_PROMISCUOUS, // promiscuous mode - 1000, // read timeout - NULL, // authentication on the remote machine - errbuf // error buffer - ) ) == NULL) - { - fprintf(stderr,"\nUnable to open the file %s.\n", source); - return -1; - } - - // read and dispatch packets until EOF is reached - pcap_loop(fp, 0, dispatcher_handler, NULL); - - return 0; -} - - - -void dispatcher_handler(u_char *temp1, - const struct pcap_pkthdr *header, const u_char *pkt_data) -{ - u_int i=0; - - /* - * Unused variable - */ - (VOID)temp1; - - /* print pkt timestamp and pkt len */ - printf("%ld:%ld (%ld)\n", header->ts.tv_sec, header->ts.tv_usec, header->len); - - /* Print the packet */ - for (i=1; (i < header->caplen + 1 ) ; i++) - { - printf("%.2x ", pkt_data[i-1]); - if ( (i % LINE_LEN) == 0) printf("\n"); - } - - printf("\n\n"); - -} +#include +#include + +#define LINE_LEN 16 + +void dispatcher_handler(u_char *, const struct pcap_pkthdr *, const u_char *); + +int main(int argc, char **argv) +{ +pcap_t *fp; +char errbuf[PCAP_ERRBUF_SIZE]; +char source[PCAP_BUF_SIZE]; + + if(argc != 2){ + + printf("usage: %s filename", argv[0]); + return -1; + + } + + /* Create the source string according to the new WinPcap syntax */ + if ( pcap_createsrcstr( source, // variable that will keep the source string + PCAP_SRC_FILE, // we want to open a file + NULL, // remote host + NULL, // port on the remote host + argv[1], // name of the file we want to open + errbuf // error buffer + ) != 0) + { + fprintf(stderr,"\nError creating a source string\n"); + return -1; + } + + /* Open the capture file */ + if ( (fp= pcap_open(source, // name of the device + 65536, // portion of the packet to capture + // 65536 guarantees that the whole packet will be captured on all the link layers + PCAP_OPENFLAG_PROMISCUOUS, // promiscuous mode + 1000, // read timeout + NULL, // authentication on the remote machine + errbuf // error buffer + ) ) == NULL) + { + fprintf(stderr,"\nUnable to open the file %s.\n", source); + return -1; + } + + // read and dispatch packets until EOF is reached + pcap_loop(fp, 0, dispatcher_handler, NULL); + + return 0; +} + + + +void dispatcher_handler(u_char *temp1, + const struct pcap_pkthdr *header, const u_char *pkt_data) +{ + u_int i=0; + + /* + * Unused variable + */ + (VOID)temp1; + + /* print pkt timestamp and pkt len */ + printf("%ld:%ld (%ld)\n", header->ts.tv_sec, header->ts.tv_usec, header->len); + + /* Print the packet */ + for (i=1; (i < header->caplen + 1 ) ; i++) + { + printf("%.2x ", pkt_data[i-1]); + if ( (i % LINE_LEN) == 0) printf("\n"); + } + + printf("\n\n"); + +} diff --git a/libs/WinPcap-413-173-b4/Examples-pcap/readfile/readfile.dsp b/libs/WpdPack_4_1_2/Examples-remote/misc/readfile.dsp similarity index 97% rename from libs/WinPcap-413-173-b4/Examples-pcap/readfile/readfile.dsp rename to libs/WpdPack_4_1_2/Examples-remote/misc/readfile.dsp index 88972bb5..5d45bde1 100644 --- a/libs/WinPcap-413-173-b4/Examples-pcap/readfile/readfile.dsp +++ b/libs/WpdPack_4_1_2/Examples-remote/misc/readfile.dsp @@ -1,110 +1,110 @@ -# Microsoft Developer Studio Project File - Name="readfile" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=readfile - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "readfile.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "readfile.mak" CFG="readfile - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "readfile - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "readfile - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "readfile - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "../" /I "../bpf/" /I "../lbl/" /I "../../Include/" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_UNICODE" /D "WPCAP" /D "HAVE_REMOTE" /YX /FD /c -# ADD BASE RSC /l 0x410 /d "NDEBUG" -# ADD RSC /l 0x410 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib ws2_32.lib Iphlpapi.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "readfile - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../" /I "../bpf/" /I "../lbl/" /I "../../Include/" /I "D:/Program Files/Microsoft Platform SDK/include" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_UNICODE" /D "WPCAP" /D "HAVE_REMOTE" /YX /FD /GZ /c -# ADD BASE RSC /l 0x410 /d "_DEBUG" -# ADD RSC /l 0x410 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib ws2_32.lib Iphlpapi.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "readfile - Win32 Release" -# Name "readfile - Win32 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\readfile.c -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# Begin Source File - -SOURCE=..\..\include\pcap.h -# End Source File -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# Begin Source File - -SOURCE=..\..\lib\Wpcap.lib -# End Source File -# End Target -# End Project +# Microsoft Developer Studio Project File - Name="readfile" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Console Application" 0x0103 + +CFG=readfile - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "readfile.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "readfile.mak" CFG="readfile - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "readfile - Win32 Release" (based on "Win32 (x86) Console Application") +!MESSAGE "readfile - Win32 Debug" (based on "Win32 (x86) Console Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "readfile - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /I "../" /I "../bpf/" /I "../lbl/" /I "../../Include/" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_UNICODE" /D "WPCAP" /D "HAVE_REMOTE" /YX /FD /c +# ADD BASE RSC /l 0x410 /d "NDEBUG" +# ADD RSC /l 0x410 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib ws2_32.lib Iphlpapi.lib /nologo /subsystem:console /machine:I386 + +!ELSEIF "$(CFG)" == "readfile - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c +# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../" /I "../bpf/" /I "../lbl/" /I "../../Include/" /I "D:/Program Files/Microsoft Platform SDK/include" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_UNICODE" /D "WPCAP" /D "HAVE_REMOTE" /YX /FD /GZ /c +# ADD BASE RSC /l 0x410 /d "_DEBUG" +# ADD RSC /l 0x410 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib ws2_32.lib Iphlpapi.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept + +!ENDIF + +# Begin Target + +# Name "readfile - Win32 Release" +# Name "readfile - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\readfile.c +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# Begin Source File + +SOURCE=..\..\include\pcap.h +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# End Group +# Begin Source File + +SOURCE=..\..\lib\Wpcap.lib +# End Source File +# End Target +# End Project diff --git a/libs/WinPcap-413-173-b4/Examples-remote/misc/readfile.vcproj b/libs/WpdPack_4_1_2/Examples-remote/misc/readfile.vcproj similarity index 95% rename from libs/WinPcap-413-173-b4/Examples-remote/misc/readfile.vcproj rename to libs/WpdPack_4_1_2/Examples-remote/misc/readfile.vcproj index 9644ca01..34f7c1af 100644 --- a/libs/WinPcap-413-173-b4/Examples-remote/misc/readfile.vcproj +++ b/libs/WpdPack_4_1_2/Examples-remote/misc/readfile.vcproj @@ -1,364 +1,364 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/libs/WinPcap-413-173-b4/Examples-remote/misc/readfile_ex.c b/libs/WpdPack_4_1_2/Examples-remote/misc/readfile_ex.c similarity index 96% rename from libs/WinPcap-413-173-b4/Examples-remote/misc/readfile_ex.c rename to libs/WpdPack_4_1_2/Examples-remote/misc/readfile_ex.c index 2ac24923..622bc9e7 100644 --- a/libs/WinPcap-413-173-b4/Examples-remote/misc/readfile_ex.c +++ b/libs/WpdPack_4_1_2/Examples-remote/misc/readfile_ex.c @@ -1,73 +1,73 @@ -#include -#include - -#define LINE_LEN 16 - -int main(int argc, char **argv) -{ -pcap_t *fp; -char errbuf[PCAP_ERRBUF_SIZE]; -char source[PCAP_BUF_SIZE]; -struct pcap_pkthdr *header; -const u_char *pkt_data; -u_int i=0; -int res; - - if(argc != 2) - { - printf("usage: %s filename", argv[0]); - return -1; - } - - /* Create the source string according to the new WinPcap syntax */ - if ( pcap_createsrcstr( source, // variable that will keep the source string - PCAP_SRC_FILE, // we want to open a file - NULL, // remote host - NULL, // port on the remote host - argv[1], // name of the file we want to open - errbuf // error buffer - ) != 0) - { - fprintf(stderr,"\nError creating a source string\n"); - return -1; - } - - /* Open the capture file */ - if ( (fp= pcap_open(source, // name of the device - 65536, // portion of the packet to capture - // 65536 guarantees that the whole packet will be captured on all the link layers - PCAP_OPENFLAG_PROMISCUOUS, // promiscuous mode - 1000, // read timeout - NULL, // authentication on the remote machine - errbuf // error buffer - ) ) == NULL) - { - fprintf(stderr,"\nUnable to open the file %s.\n", source); - return -1; - } - - /* Retrieve the packets from the file */ - while((res = pcap_next_ex( fp, &header, &pkt_data)) >= 0) - { - /* print pkt timestamp and pkt len */ - printf("%ld:%ld (%ld)\n", header->ts.tv_sec, header->ts.tv_usec, header->len); - - /* Print the packet */ - for (i=1; (i < header->caplen + 1 ) ; i++) - { - printf("%.2x ", pkt_data[i-1]); - if ( (i % LINE_LEN) == 0) printf("\n"); - } - - printf("\n\n"); - } - - - if (res == -1) - { - printf("Error reading the packets: %s\n", pcap_geterr(fp)); - } - - return 0; -} - +#include +#include + +#define LINE_LEN 16 + +int main(int argc, char **argv) +{ +pcap_t *fp; +char errbuf[PCAP_ERRBUF_SIZE]; +char source[PCAP_BUF_SIZE]; +struct pcap_pkthdr *header; +const u_char *pkt_data; +u_int i=0; +int res; + + if(argc != 2) + { + printf("usage: %s filename", argv[0]); + return -1; + } + + /* Create the source string according to the new WinPcap syntax */ + if ( pcap_createsrcstr( source, // variable that will keep the source string + PCAP_SRC_FILE, // we want to open a file + NULL, // remote host + NULL, // port on the remote host + argv[1], // name of the file we want to open + errbuf // error buffer + ) != 0) + { + fprintf(stderr,"\nError creating a source string\n"); + return -1; + } + + /* Open the capture file */ + if ( (fp= pcap_open(source, // name of the device + 65536, // portion of the packet to capture + // 65536 guarantees that the whole packet will be captured on all the link layers + PCAP_OPENFLAG_PROMISCUOUS, // promiscuous mode + 1000, // read timeout + NULL, // authentication on the remote machine + errbuf // error buffer + ) ) == NULL) + { + fprintf(stderr,"\nUnable to open the file %s.\n", source); + return -1; + } + + /* Retrieve the packets from the file */ + while((res = pcap_next_ex( fp, &header, &pkt_data)) >= 0) + { + /* print pkt timestamp and pkt len */ + printf("%ld:%ld (%ld)\n", header->ts.tv_sec, header->ts.tv_usec, header->len); + + /* Print the packet */ + for (i=1; (i < header->caplen + 1 ) ; i++) + { + printf("%.2x ", pkt_data[i-1]); + if ( (i % LINE_LEN) == 0) printf("\n"); + } + + printf("\n\n"); + } + + + if (res == -1) + { + printf("Error reading the packets: %s\n", pcap_geterr(fp)); + } + + return 0; +} + diff --git a/libs/WinPcap-413-173-b4/Examples-pcap/readfile_ex/readfile_ex.dsp b/libs/WpdPack_4_1_2/Examples-remote/misc/readfile_ex.dsp similarity index 97% rename from libs/WinPcap-413-173-b4/Examples-pcap/readfile_ex/readfile_ex.dsp rename to libs/WpdPack_4_1_2/Examples-remote/misc/readfile_ex.dsp index 2c1b4889..07dcf9ff 100644 --- a/libs/WinPcap-413-173-b4/Examples-pcap/readfile_ex/readfile_ex.dsp +++ b/libs/WpdPack_4_1_2/Examples-remote/misc/readfile_ex.dsp @@ -1,110 +1,110 @@ -# Microsoft Developer Studio Project File - Name="readfile_ex" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=readfile_ex - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "readfile_ex.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "readfile_ex.mak" CFG="readfile_ex - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "readfile_ex - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "readfile_ex - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "readfile_ex - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "../" /I "../bpf/" /I "../lbl/" /I "../../Include/" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_UNICODE" /D "WPCAP" /D "HAVE_REMOTE" /YX /FD /c -# ADD BASE RSC /l 0x410 /d "NDEBUG" -# ADD RSC /l 0x410 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib ws2_32.lib Iphlpapi.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "readfile_ex - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../" /I "../bpf/" /I "../lbl/" /I "../../Include/" /I "D:/Program Files/Microsoft Platform SDK/include" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_UNICODE" /D "WPCAP" /D "HAVE_REMOTE" /YX /FD /GZ /c -# ADD BASE RSC /l 0x410 /d "_DEBUG" -# ADD RSC /l 0x410 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib ws2_32.lib Iphlpapi.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "readfile_ex - Win32 Release" -# Name "readfile_ex - Win32 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\readfile_ex.c -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# Begin Source File - -SOURCE=..\..\include\pcap.h -# End Source File -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# Begin Source File - -SOURCE=..\..\lib\Wpcap.lib -# End Source File -# End Target -# End Project +# Microsoft Developer Studio Project File - Name="readfile_ex" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Console Application" 0x0103 + +CFG=readfile_ex - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "readfile_ex.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "readfile_ex.mak" CFG="readfile_ex - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "readfile_ex - Win32 Release" (based on "Win32 (x86) Console Application") +!MESSAGE "readfile_ex - Win32 Debug" (based on "Win32 (x86) Console Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "readfile_ex - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /I "../" /I "../bpf/" /I "../lbl/" /I "../../Include/" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_UNICODE" /D "WPCAP" /D "HAVE_REMOTE" /YX /FD /c +# ADD BASE RSC /l 0x410 /d "NDEBUG" +# ADD RSC /l 0x410 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib ws2_32.lib Iphlpapi.lib /nologo /subsystem:console /machine:I386 + +!ELSEIF "$(CFG)" == "readfile_ex - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c +# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../" /I "../bpf/" /I "../lbl/" /I "../../Include/" /I "D:/Program Files/Microsoft Platform SDK/include" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_UNICODE" /D "WPCAP" /D "HAVE_REMOTE" /YX /FD /GZ /c +# ADD BASE RSC /l 0x410 /d "_DEBUG" +# ADD RSC /l 0x410 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib ws2_32.lib Iphlpapi.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept + +!ENDIF + +# Begin Target + +# Name "readfile_ex - Win32 Release" +# Name "readfile_ex - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\readfile_ex.c +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# Begin Source File + +SOURCE=..\..\include\pcap.h +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# End Group +# Begin Source File + +SOURCE=..\..\lib\Wpcap.lib +# End Source File +# End Target +# End Project diff --git a/libs/WinPcap-413-173-b4/Examples-remote/misc/readfile_ex.vcproj b/libs/WpdPack_4_1_2/Examples-remote/misc/readfile_ex.vcproj similarity index 95% rename from libs/WinPcap-413-173-b4/Examples-remote/misc/readfile_ex.vcproj rename to libs/WpdPack_4_1_2/Examples-remote/misc/readfile_ex.vcproj index 78a7fc7e..b194a625 100644 --- a/libs/WinPcap-413-173-b4/Examples-remote/misc/readfile_ex.vcproj +++ b/libs/WpdPack_4_1_2/Examples-remote/misc/readfile_ex.vcproj @@ -1,364 +1,364 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/libs/WinPcap-413-173-b4/Examples-remote/misc/savedump.c b/libs/WpdPack_4_1_2/Examples-remote/misc/savedump.c similarity index 96% rename from libs/WinPcap-413-173-b4/Examples-remote/misc/savedump.c rename to libs/WpdPack_4_1_2/Examples-remote/misc/savedump.c index 3bbb3de2..6316939b 100644 --- a/libs/WinPcap-413-173-b4/Examples-remote/misc/savedump.c +++ b/libs/WpdPack_4_1_2/Examples-remote/misc/savedump.c @@ -1,104 +1,104 @@ -#include "pcap.h" - -/* prototype of the packet handler */ -void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data); - -int main(int argc, char **argv) -{ -pcap_if_t *alldevs; -pcap_if_t *d; -int inum; -int i=0; -pcap_t *adhandle; -char errbuf[PCAP_ERRBUF_SIZE]; -pcap_dumper_t *dumpfile; - - - - /* Check command line */ - if(argc != 2) - { - printf("usage: %s filename", argv[0]); - return -1; - } - - /* Retrieve the device list on the local machine */ - if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL, &alldevs, errbuf) == -1) - { - fprintf(stderr,"Error in pcap_findalldevs: %s\n", errbuf); - exit(1); - } - - /* Print the list */ - for(d=alldevs; d; d=d->next) - { - printf("%d. %s", ++i, d->name); - if (d->description) - printf(" (%s)\n", d->description); - else - printf(" (No description available)\n"); - } - - if(i==0) - { - printf("\nNo interfaces found! Make sure WinPcap is installed.\n"); - return -1; - } - - printf("Enter the interface number (1-%d):",i); - scanf_s("%d", &inum); - - if(inum < 1 || inum > i) - { - printf("\nInterface number out of range.\n"); - /* Free the device list */ - pcap_freealldevs(alldevs); - return -1; - } - - /* Jump to the selected adapter */ - for(d=alldevs, i=0; i< inum-1 ;d=d->next, i++); - - - /* Open the device */ - if ( (adhandle= pcap_open(d->name, // name of the device - 65536, // portion of the packet to capture - // 65536 guarantees that the whole packet will be captured on all the link layers - PCAP_OPENFLAG_PROMISCUOUS, // promiscuous mode - 1000, // read timeout - NULL, // authentication on the remote machine - errbuf // error buffer - ) ) == NULL) - { - fprintf(stderr,"\nUnable to open the adapter. %s is not supported by WinPcap\n", d->name); - /* Free the device list */ - pcap_freealldevs(alldevs); - return -1; - } - - /* Open the dump file */ - dumpfile = pcap_dump_open(adhandle, argv[1]); - - if(dumpfile==NULL) - { - fprintf(stderr,"\nError opening output file\n"); - return -1; - } - - printf("\nlistening on %s... Press Ctrl+C to stop...\n", d->description); - - /* At this point, we no longer need the device list. Free it */ - pcap_freealldevs(alldevs); - - /* start the capture */ - pcap_loop(adhandle, 0, packet_handler, (unsigned char *)dumpfile); - - return 0; -} - -/* Callback function invoked by libpcap for every incoming packet */ -void packet_handler(u_char *dumpfile, const struct pcap_pkthdr *header, const u_char *pkt_data) -{ - /* save the packet on the dump file */ - pcap_dump(dumpfile, header, pkt_data); -} +#include "pcap.h" + +/* prototype of the packet handler */ +void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data); + +int main(int argc, char **argv) +{ +pcap_if_t *alldevs; +pcap_if_t *d; +int inum; +int i=0; +pcap_t *adhandle; +char errbuf[PCAP_ERRBUF_SIZE]; +pcap_dumper_t *dumpfile; + + + + /* Check command line */ + if(argc != 2) + { + printf("usage: %s filename", argv[0]); + return -1; + } + + /* Retrieve the device list on the local machine */ + if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL, &alldevs, errbuf) == -1) + { + fprintf(stderr,"Error in pcap_findalldevs: %s\n", errbuf); + exit(1); + } + + /* Print the list */ + for(d=alldevs; d; d=d->next) + { + printf("%d. %s", ++i, d->name); + if (d->description) + printf(" (%s)\n", d->description); + else + printf(" (No description available)\n"); + } + + if(i==0) + { + printf("\nNo interfaces found! Make sure WinPcap is installed.\n"); + return -1; + } + + printf("Enter the interface number (1-%d):",i); + scanf_s("%d", &inum); + + if(inum < 1 || inum > i) + { + printf("\nInterface number out of range.\n"); + /* Free the device list */ + pcap_freealldevs(alldevs); + return -1; + } + + /* Jump to the selected adapter */ + for(d=alldevs, i=0; i< inum-1 ;d=d->next, i++); + + + /* Open the device */ + if ( (adhandle= pcap_open(d->name, // name of the device + 65536, // portion of the packet to capture + // 65536 guarantees that the whole packet will be captured on all the link layers + PCAP_OPENFLAG_PROMISCUOUS, // promiscuous mode + 1000, // read timeout + NULL, // authentication on the remote machine + errbuf // error buffer + ) ) == NULL) + { + fprintf(stderr,"\nUnable to open the adapter. %s is not supported by WinPcap\n", d->name); + /* Free the device list */ + pcap_freealldevs(alldevs); + return -1; + } + + /* Open the dump file */ + dumpfile = pcap_dump_open(adhandle, argv[1]); + + if(dumpfile==NULL) + { + fprintf(stderr,"\nError opening output file\n"); + return -1; + } + + printf("\nlistening on %s... Press Ctrl+C to stop...\n", d->description); + + /* At this point, we no longer need the device list. Free it */ + pcap_freealldevs(alldevs); + + /* start the capture */ + pcap_loop(adhandle, 0, packet_handler, (unsigned char *)dumpfile); + + return 0; +} + +/* Callback function invoked by libpcap for every incoming packet */ +void packet_handler(u_char *dumpfile, const struct pcap_pkthdr *header, const u_char *pkt_data) +{ + /* save the packet on the dump file */ + pcap_dump(dumpfile, header, pkt_data); +} diff --git a/libs/WinPcap-413-173-b4/Examples-pcap/savedump/savedump.dsp b/libs/WpdPack_4_1_2/Examples-remote/misc/savedump.dsp similarity index 97% rename from libs/WinPcap-413-173-b4/Examples-pcap/savedump/savedump.dsp rename to libs/WpdPack_4_1_2/Examples-remote/misc/savedump.dsp index 7d2e366b..22d5d399 100644 --- a/libs/WinPcap-413-173-b4/Examples-pcap/savedump/savedump.dsp +++ b/libs/WpdPack_4_1_2/Examples-remote/misc/savedump.dsp @@ -1,110 +1,110 @@ -# Microsoft Developer Studio Project File - Name="savedump" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=savedump - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "savedump.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "savedump.mak" CFG="savedump - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "savedump - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "savedump - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "savedump - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "../" /I "../bpf/" /I "../lbl/" /I "../../Include/" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_UNICODE" /D "WPCAP" /D "HAVE_REMOTE" /YX /FD /c -# ADD BASE RSC /l 0x410 /d "NDEBUG" -# ADD RSC /l 0x410 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib ws2_32.lib Iphlpapi.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "savedump - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../" /I "../bpf/" /I "../lbl/" /I "../../Include/" /I "D:/Program Files/Microsoft Platform SDK/include" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_UNICODE" /D "WPCAP" /D "HAVE_REMOTE" /YX /FD /GZ /c -# ADD BASE RSC /l 0x410 /d "_DEBUG" -# ADD RSC /l 0x410 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib ws2_32.lib Iphlpapi.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "savedump - Win32 Release" -# Name "savedump - Win32 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\savedump.c -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# Begin Source File - -SOURCE=..\..\include\pcap.h -# End Source File -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# Begin Source File - -SOURCE=..\..\lib\Wpcap.lib -# End Source File -# End Target -# End Project +# Microsoft Developer Studio Project File - Name="savedump" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Console Application" 0x0103 + +CFG=savedump - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "savedump.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "savedump.mak" CFG="savedump - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "savedump - Win32 Release" (based on "Win32 (x86) Console Application") +!MESSAGE "savedump - Win32 Debug" (based on "Win32 (x86) Console Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "savedump - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /I "../" /I "../bpf/" /I "../lbl/" /I "../../Include/" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_UNICODE" /D "WPCAP" /D "HAVE_REMOTE" /YX /FD /c +# ADD BASE RSC /l 0x410 /d "NDEBUG" +# ADD RSC /l 0x410 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib ws2_32.lib Iphlpapi.lib /nologo /subsystem:console /machine:I386 + +!ELSEIF "$(CFG)" == "savedump - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c +# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../" /I "../bpf/" /I "../lbl/" /I "../../Include/" /I "D:/Program Files/Microsoft Platform SDK/include" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_UNICODE" /D "WPCAP" /D "HAVE_REMOTE" /YX /FD /GZ /c +# ADD BASE RSC /l 0x410 /d "_DEBUG" +# ADD RSC /l 0x410 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib ws2_32.lib Iphlpapi.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept + +!ENDIF + +# Begin Target + +# Name "savedump - Win32 Release" +# Name "savedump - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\savedump.c +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# Begin Source File + +SOURCE=..\..\include\pcap.h +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# End Group +# Begin Source File + +SOURCE=..\..\lib\Wpcap.lib +# End Source File +# End Target +# End Project diff --git a/libs/WinPcap-413-173-b4/Examples-remote/misc/savedump.vcproj b/libs/WpdPack_4_1_2/Examples-remote/misc/savedump.vcproj similarity index 95% rename from libs/WinPcap-413-173-b4/Examples-remote/misc/savedump.vcproj rename to libs/WpdPack_4_1_2/Examples-remote/misc/savedump.vcproj index 5a05aada..fd4c12a8 100644 --- a/libs/WinPcap-413-173-b4/Examples-remote/misc/savedump.vcproj +++ b/libs/WpdPack_4_1_2/Examples-remote/misc/savedump.vcproj @@ -1,364 +1,364 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/libs/WinPcap-413-173-b4/Examples-remote/misc/sendpack.c b/libs/WpdPack_4_1_2/Examples-remote/misc/sendpack.c similarity index 95% rename from libs/WinPcap-413-173-b4/Examples-remote/misc/sendpack.c rename to libs/WpdPack_4_1_2/Examples-remote/misc/sendpack.c index 3a95a355..55b1a5b3 100644 --- a/libs/WinPcap-413-173-b4/Examples-remote/misc/sendpack.c +++ b/libs/WpdPack_4_1_2/Examples-remote/misc/sendpack.c @@ -1,64 +1,64 @@ -#include -#include - -#include - - -void main(int argc, char **argv) -{ -pcap_t *fp; -char errbuf[PCAP_ERRBUF_SIZE]; -u_char packet[100]; -int i; - - /* Check the validity of the command line */ - if (argc != 2) - { - printf("usage: %s interface (e.g. 'rpcap://eth0')", argv[0]); - return; - } - - /* Open the output device */ - if ( (fp= pcap_open(argv[1], // name of the device - 100, // portion of the packet to capture (only the first 100 bytes) - PCAP_OPENFLAG_PROMISCUOUS, // promiscuous mode - 1000, // read timeout - NULL, // authentication on the remote machine - errbuf // error buffer - ) ) == NULL) - { - fprintf(stderr,"\nUnable to open the adapter. %s is not supported by WinPcap\n", argv[1]); - return; - } - - /* Supposing to be on ethernet, set mac destination to 1:1:1:1:1:1 */ - packet[0]=1; - packet[1]=1; - packet[2]=1; - packet[3]=1; - packet[4]=1; - packet[5]=1; - - /* set mac source to 2:2:2:2:2:2 */ - packet[6]=2; - packet[7]=2; - packet[8]=2; - packet[9]=2; - packet[10]=2; - packet[11]=2; - - /* Fill the rest of the packet */ - for(i=12;i<100;i++) - { - packet[i]=(u_char)i; - } - - /* Send down the packet */ - if (pcap_sendpacket(fp, packet, 100 /* size */) != 0) - { - fprintf(stderr,"\nError sending the packet: %s\n", pcap_geterr(fp)); - return; - } - - return; -} +#include +#include + +#include + + +void main(int argc, char **argv) +{ +pcap_t *fp; +char errbuf[PCAP_ERRBUF_SIZE]; +u_char packet[100]; +int i; + + /* Check the validity of the command line */ + if (argc != 2) + { + printf("usage: %s interface (e.g. 'rpcap://eth0')", argv[0]); + return; + } + + /* Open the output device */ + if ( (fp= pcap_open(argv[1], // name of the device + 100, // portion of the packet to capture (only the first 100 bytes) + PCAP_OPENFLAG_PROMISCUOUS, // promiscuous mode + 1000, // read timeout + NULL, // authentication on the remote machine + errbuf // error buffer + ) ) == NULL) + { + fprintf(stderr,"\nUnable to open the adapter. %s is not supported by WinPcap\n", argv[1]); + return; + } + + /* Supposing to be on ethernet, set mac destination to 1:1:1:1:1:1 */ + packet[0]=1; + packet[1]=1; + packet[2]=1; + packet[3]=1; + packet[4]=1; + packet[5]=1; + + /* set mac source to 2:2:2:2:2:2 */ + packet[6]=2; + packet[7]=2; + packet[8]=2; + packet[9]=2; + packet[10]=2; + packet[11]=2; + + /* Fill the rest of the packet */ + for(i=12;i<100;i++) + { + packet[i]=(u_char)i; + } + + /* Send down the packet */ + if (pcap_sendpacket(fp, packet, 100 /* size */) != 0) + { + fprintf(stderr,"\nError sending the packet: %s\n", pcap_geterr(fp)); + return; + } + + return; +} diff --git a/libs/WinPcap-413-173-b4/Examples-pcap/sendpack/sendpack.dsp b/libs/WpdPack_4_1_2/Examples-remote/misc/sendpack.dsp similarity index 97% rename from libs/WinPcap-413-173-b4/Examples-pcap/sendpack/sendpack.dsp rename to libs/WpdPack_4_1_2/Examples-remote/misc/sendpack.dsp index 982ce670..95022e37 100644 --- a/libs/WinPcap-413-173-b4/Examples-pcap/sendpack/sendpack.dsp +++ b/libs/WpdPack_4_1_2/Examples-remote/misc/sendpack.dsp @@ -1,110 +1,110 @@ -# Microsoft Developer Studio Project File - Name="sendpack" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=sendpack - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "sendpack.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "sendpack.mak" CFG="sendpack - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "sendpack - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "sendpack - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "sendpack - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "../" /I "../bpf/" /I "../lbl/" /I "../../Include/" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_UNICODE" /D "WPCAP" /D "HAVE_REMOTE" /YX /FD /c -# ADD BASE RSC /l 0x410 /d "NDEBUG" -# ADD RSC /l 0x410 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib ws2_32.lib Iphlpapi.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "sendpack - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../" /I "../bpf/" /I "../lbl/" /I "../../Include/" /I "D:/Program Files/Microsoft Platform SDK/include" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_UNICODE" /D "WPCAP" /D "HAVE_REMOTE" /YX /FD /GZ /c -# ADD BASE RSC /l 0x410 /d "_DEBUG" -# ADD RSC /l 0x410 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib ws2_32.lib Iphlpapi.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "sendpack - Win32 Release" -# Name "sendpack - Win32 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\sendpack.c -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# Begin Source File - -SOURCE=..\..\include\pcap.h -# End Source File -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# Begin Source File - -SOURCE=..\..\lib\Wpcap.lib -# End Source File -# End Target -# End Project +# Microsoft Developer Studio Project File - Name="sendpack" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Console Application" 0x0103 + +CFG=sendpack - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "sendpack.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "sendpack.mak" CFG="sendpack - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "sendpack - Win32 Release" (based on "Win32 (x86) Console Application") +!MESSAGE "sendpack - Win32 Debug" (based on "Win32 (x86) Console Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "sendpack - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /I "../" /I "../bpf/" /I "../lbl/" /I "../../Include/" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_UNICODE" /D "WPCAP" /D "HAVE_REMOTE" /YX /FD /c +# ADD BASE RSC /l 0x410 /d "NDEBUG" +# ADD RSC /l 0x410 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib ws2_32.lib Iphlpapi.lib /nologo /subsystem:console /machine:I386 + +!ELSEIF "$(CFG)" == "sendpack - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c +# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../" /I "../bpf/" /I "../lbl/" /I "../../Include/" /I "D:/Program Files/Microsoft Platform SDK/include" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_UNICODE" /D "WPCAP" /D "HAVE_REMOTE" /YX /FD /GZ /c +# ADD BASE RSC /l 0x410 /d "_DEBUG" +# ADD RSC /l 0x410 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib ws2_32.lib Iphlpapi.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept + +!ENDIF + +# Begin Target + +# Name "sendpack - Win32 Release" +# Name "sendpack - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\sendpack.c +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# Begin Source File + +SOURCE=..\..\include\pcap.h +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# End Group +# Begin Source File + +SOURCE=..\..\lib\Wpcap.lib +# End Source File +# End Target +# End Project diff --git a/libs/WinPcap-413-173-b4/Examples-remote/misc/sendpack.vcproj b/libs/WpdPack_4_1_2/Examples-remote/misc/sendpack.vcproj similarity index 95% rename from libs/WinPcap-413-173-b4/Examples-remote/misc/sendpack.vcproj rename to libs/WpdPack_4_1_2/Examples-remote/misc/sendpack.vcproj index 04a99b17..ee5d3ae7 100644 --- a/libs/WinPcap-413-173-b4/Examples-remote/misc/sendpack.vcproj +++ b/libs/WpdPack_4_1_2/Examples-remote/misc/sendpack.vcproj @@ -1,364 +1,364 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/libs/WinPcap-413-173-b4/Examples-remote/pcap_filter/pcap_filter.c b/libs/WpdPack_4_1_2/Examples-remote/pcap_filter/pcap_filter.c similarity index 95% rename from libs/WinPcap-413-173-b4/Examples-remote/pcap_filter/pcap_filter.c rename to libs/WpdPack_4_1_2/Examples-remote/pcap_filter/pcap_filter.c index 9c1c3f69..ad83a16e 100644 --- a/libs/WinPcap-413-173-b4/Examples-remote/pcap_filter/pcap_filter.c +++ b/libs/WpdPack_4_1_2/Examples-remote/pcap_filter/pcap_filter.c @@ -1,169 +1,169 @@ -/* - * Copyright (c) 1999 - 2005 NetGroup, Politecnico di Torino (Italy) - * Copyright (c) 2005 - 2006 CACE Technologies, Davis (California) - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the Politecnico di Torino, CACE Technologies - * nor the names of its contributors may be used to endorse or promote - * products derived from this software without specific prior written - * permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ - - -#include -#include - -#include - -#define MAX_PRINT 80 -#define MAX_LINE 16 - - -void usage(); - - -void main(int argc, char **argv) -{ -pcap_t *fp; -char errbuf[PCAP_ERRBUF_SIZE]; -char *source=NULL; -char *ofilename=NULL; -char *filter=NULL; -int i; -pcap_dumper_t *dumpfile; -struct bpf_program fcode; -bpf_u_int32 NetMask; -int res; -struct pcap_pkthdr *header; -const u_char *pkt_data; - - if (argc == 1) - { - usage(); - return; - } - - for(i=1;i < argc; i+= 2) - { - - switch (argv[i] [1]) - { - case 's': - { - source=argv[i+1]; - }; - break; - - case 'o': - { - ofilename=argv[i+1]; - }; - break; - - case 'f': - { - filter=argv[i+1]; - }; - break; - } - } - - // open a capture from the network - if (source != NULL) - { - if ( (fp= pcap_open(source, - 1514 /*snaplen*/, - PCAP_OPENFLAG_PROMISCUOUS /*flags*/, - 20 /*read timeout*/, - NULL /* remote authentication */, - errbuf) - ) == NULL) - { - fprintf(stderr,"\nUnable to open the adapter.\n"); - return; - } - } - - else usage(); - - if (filter != NULL) - { - // We should loop through the adapters returned by the pcap_findalldevs_ex() - // in order to locate the correct one. - // - // Let's do things simpler: we suppose to be in a C class network ;-) - NetMask=0xffffff; - - //compile the filter - if(pcap_compile(fp, &fcode, filter, 1, NetMask) < 0) - { - fprintf(stderr,"\nError compiling filter: wrong syntax.\n"); - return; - } - - //set the filter - if(pcap_setfilter(fp, &fcode)<0) - { - fprintf(stderr,"\nError setting the filter\n"); - return; - } - - } - - //open the dump file - if (ofilename != NULL) - { - dumpfile= pcap_dump_open(fp, ofilename); - - if (dumpfile == NULL) - { - fprintf(stderr,"\nError opening output file\n"); - return; - } - } - else usage(); - - //start the capture - while((res = pcap_next_ex( fp, &header, &pkt_data)) >= 0) - { - - if(res == 0) - /* Timeout elapsed */ - continue; - - //save the packet on the dump file - pcap_dump((unsigned char *) dumpfile, header, pkt_data); - - } -} - - -void usage() -{ - - printf("\npf - Generic Packet Filter.\n"); - printf("\nUsage:\npf -s source -o output_file_name [-f filter_string]\n\n"); - exit(0); +/* + * Copyright (c) 1999 - 2005 NetGroup, Politecnico di Torino (Italy) + * Copyright (c) 2005 - 2006 CACE Technologies, Davis (California) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Politecnico di Torino, CACE Technologies + * nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written + * permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + + +#include +#include + +#include + +#define MAX_PRINT 80 +#define MAX_LINE 16 + + +void usage(); + + +void main(int argc, char **argv) +{ +pcap_t *fp; +char errbuf[PCAP_ERRBUF_SIZE]; +char *source=NULL; +char *ofilename=NULL; +char *filter=NULL; +int i; +pcap_dumper_t *dumpfile; +struct bpf_program fcode; +bpf_u_int32 NetMask; +int res; +struct pcap_pkthdr *header; +const u_char *pkt_data; + + if (argc == 1) + { + usage(); + return; + } + + for(i=1;i < argc; i+= 2) + { + + switch (argv[i] [1]) + { + case 's': + { + source=argv[i+1]; + }; + break; + + case 'o': + { + ofilename=argv[i+1]; + }; + break; + + case 'f': + { + filter=argv[i+1]; + }; + break; + } + } + + // open a capture from the network + if (source != NULL) + { + if ( (fp= pcap_open(source, + 1514 /*snaplen*/, + PCAP_OPENFLAG_PROMISCUOUS /*flags*/, + 20 /*read timeout*/, + NULL /* remote authentication */, + errbuf) + ) == NULL) + { + fprintf(stderr,"\nUnable to open the adapter.\n"); + return; + } + } + + else usage(); + + if (filter != NULL) + { + // We should loop through the adapters returned by the pcap_findalldevs_ex() + // in order to locate the correct one. + // + // Let's do things simpler: we suppose to be in a C class network ;-) + NetMask=0xffffff; + + //compile the filter + if(pcap_compile(fp, &fcode, filter, 1, NetMask) < 0) + { + fprintf(stderr,"\nError compiling filter: wrong syntax.\n"); + return; + } + + //set the filter + if(pcap_setfilter(fp, &fcode)<0) + { + fprintf(stderr,"\nError setting the filter\n"); + return; + } + + } + + //open the dump file + if (ofilename != NULL) + { + dumpfile= pcap_dump_open(fp, ofilename); + + if (dumpfile == NULL) + { + fprintf(stderr,"\nError opening output file\n"); + return; + } + } + else usage(); + + //start the capture + while((res = pcap_next_ex( fp, &header, &pkt_data)) >= 0) + { + + if(res == 0) + /* Timeout elapsed */ + continue; + + //save the packet on the dump file + pcap_dump((unsigned char *) dumpfile, header, pkt_data); + + } +} + + +void usage() +{ + + printf("\npf - Generic Packet Filter.\n"); + printf("\nUsage:\npf -s source -o output_file_name [-f filter_string]\n\n"); + exit(0); } \ No newline at end of file diff --git a/libs/WinPcap-413-173-b4/Examples-pcap/pcap_filter/pcap_filter.dsp b/libs/WpdPack_4_1_2/Examples-remote/pcap_filter/pcap_filter.dsp similarity index 97% rename from libs/WinPcap-413-173-b4/Examples-pcap/pcap_filter/pcap_filter.dsp rename to libs/WpdPack_4_1_2/Examples-remote/pcap_filter/pcap_filter.dsp index 5bd65b5b..c01d2e7e 100644 --- a/libs/WinPcap-413-173-b4/Examples-pcap/pcap_filter/pcap_filter.dsp +++ b/libs/WpdPack_4_1_2/Examples-remote/pcap_filter/pcap_filter.dsp @@ -1,110 +1,110 @@ -# Microsoft Developer Studio Project File - Name="pcap_filter" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=pcap_filter - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "pcap_filter.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "pcap_filter.mak" CFG="pcap_filter - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "pcap_filter - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "pcap_filter - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "pcap_filter - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "../" /I "../bpf/" /I "../lbl/" /I "../../Include/" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_UNICODE" /D "WPCAP" /D "HAVE_REMOTE" /YX /FD /c -# ADD BASE RSC /l 0x410 /d "NDEBUG" -# ADD RSC /l 0x410 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib /nologo /subsystem:console /machine:I386 /out:"Release/pf.exe" - -!ELSEIF "$(CFG)" == "pcap_filter - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../" /I "../bpf/" /I "../lbl/" /I "../../Include/" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_UNICODE" /D "WPCAP" /D "HAVE_REMOTE" /YX /FD /GZ /c -# ADD BASE RSC /l 0x410 /d "_DEBUG" -# ADD RSC /l 0x410 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib /nologo /subsystem:console /debug /machine:I386 /out:"Debug/pf.exe" /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "pcap_filter - Win32 Release" -# Name "pcap_filter - Win32 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\pcap_filter.c -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# Begin Source File - -SOURCE=..\..\include\pcap.h -# End Source File -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# Begin Source File - -SOURCE=..\..\lib\Wpcap.lib -# End Source File -# End Target -# End Project +# Microsoft Developer Studio Project File - Name="pcap_filter" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Console Application" 0x0103 + +CFG=pcap_filter - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "pcap_filter.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "pcap_filter.mak" CFG="pcap_filter - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "pcap_filter - Win32 Release" (based on "Win32 (x86) Console Application") +!MESSAGE "pcap_filter - Win32 Debug" (based on "Win32 (x86) Console Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "pcap_filter - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /I "../" /I "../bpf/" /I "../lbl/" /I "../../Include/" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_UNICODE" /D "WPCAP" /D "HAVE_REMOTE" /YX /FD /c +# ADD BASE RSC /l 0x410 /d "NDEBUG" +# ADD RSC /l 0x410 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib /nologo /subsystem:console /machine:I386 /out:"Release/pf.exe" + +!ELSEIF "$(CFG)" == "pcap_filter - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c +# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../" /I "../bpf/" /I "../lbl/" /I "../../Include/" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_UNICODE" /D "WPCAP" /D "HAVE_REMOTE" /YX /FD /GZ /c +# ADD BASE RSC /l 0x410 /d "_DEBUG" +# ADD RSC /l 0x410 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib /nologo /subsystem:console /debug /machine:I386 /out:"Debug/pf.exe" /pdbtype:sept + +!ENDIF + +# Begin Target + +# Name "pcap_filter - Win32 Release" +# Name "pcap_filter - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\pcap_filter.c +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# Begin Source File + +SOURCE=..\..\include\pcap.h +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# End Group +# Begin Source File + +SOURCE=..\..\lib\Wpcap.lib +# End Source File +# End Target +# End Project diff --git a/libs/WinPcap-413-173-b4/Examples-remote/pcap_filter/pcap_filter.dsw b/libs/WpdPack_4_1_2/Examples-remote/pcap_filter/pcap_filter.dsw similarity index 94% rename from libs/WinPcap-413-173-b4/Examples-remote/pcap_filter/pcap_filter.dsw rename to libs/WpdPack_4_1_2/Examples-remote/pcap_filter/pcap_filter.dsw index a9031834..1d39119b 100644 --- a/libs/WinPcap-413-173-b4/Examples-remote/pcap_filter/pcap_filter.dsw +++ b/libs/WpdPack_4_1_2/Examples-remote/pcap_filter/pcap_filter.dsw @@ -1,29 +1,29 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "pcap_filter"=.\pcap_filter.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "pcap_filter"=.\pcap_filter.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/libs/WinPcap-413-173-b4/Examples-remote/pcap_filter/pcap_filter.vcproj b/libs/WpdPack_4_1_2/Examples-remote/pcap_filter/pcap_filter.vcproj similarity index 95% rename from libs/WinPcap-413-173-b4/Examples-remote/pcap_filter/pcap_filter.vcproj rename to libs/WpdPack_4_1_2/Examples-remote/pcap_filter/pcap_filter.vcproj index c89a2980..ff322b54 100644 --- a/libs/WinPcap-413-173-b4/Examples-remote/pcap_filter/pcap_filter.vcproj +++ b/libs/WpdPack_4_1_2/Examples-remote/pcap_filter/pcap_filter.vcproj @@ -1,364 +1,364 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/libs/WinPcap-413-173-b4/Examples-remote/pcap_fopen/pcap_fopen.cpp b/libs/WpdPack_4_1_2/Examples-remote/pcap_fopen/pcap_fopen.cpp similarity index 97% rename from libs/WinPcap-413-173-b4/Examples-remote/pcap_fopen/pcap_fopen.cpp rename to libs/WpdPack_4_1_2/Examples-remote/pcap_fopen/pcap_fopen.cpp index 18785796..0476e40e 100644 --- a/libs/WinPcap-413-173-b4/Examples-remote/pcap_fopen/pcap_fopen.cpp +++ b/libs/WpdPack_4_1_2/Examples-remote/pcap_fopen/pcap_fopen.cpp @@ -1,94 +1,94 @@ -/* - * Copyright (c) 2008 CACE Technologies, Davis (California) - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of CACE Technologies nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * This sample was contributed by - * Marcin Okraszewski (Marcin.OkraszewskiATpl.compuware.com) - * - */ - -#include -#include -#include - -/** Prints packet timestaps regardless of format*/ -int _tmain(int argc, _TCHAR* argv[]) -{ - char errbuf[PCAP_ERRBUF_SIZE]; - wchar_t cmd[1024]; - wchar_t tshark_path[MAX_PATH]; - wchar_t file_path[MAX_PATH]; - - if ( argc != 3 ) { - wprintf(L"Prints packet timestaps regardless of format.\n"); - wprintf(L"Usage:\n\t%ls \n", argv[0]); - return 1; - } - - // conversion to short path name in case there are spaces - if ( ! GetShortPathNameW(argv[1], tshark_path, MAX_PATH) || - ! GetShortPathNameW(argv[2], file_path, MAX_PATH) ) - { - printf("Failed to convert paths to short form."); - return 1; - } - - // create tshark command, which will make the trace conversion and print in libpcap format to stdout - if ( swprintf_s(cmd, 1024, L"%ls -r %ls -w - -F libpcap", tshark_path, file_path) < 0 ) { - wprintf(L"Failed to create command\n"); - return 1; - } - - // start tshark - FILE *tshark_out = _wpopen(cmd, L"rb"); - if ( tshark_out == NULL ) { - strerror_s(errbuf, PCAP_ERRBUF_SIZE, errno); - printf("Failed run tshark: %s\n", errbuf); - wprintf(L"Command: %ls", cmd); - return 1; - } - - // open stdout from tshark - pcap_t *pcap = pcap_fopen_offline(tshark_out, errbuf); - if ( pcap == NULL ) { - printf("Error opening stream from tshark: %s\n", errbuf); - return 1; - } - - // print information about every packet int trace - struct pcap_pkthdr hdr; - while ( pcap_next(pcap, &hdr) ) { - printf("packet: ts: %u.%06u, len: %4u, caplen: %4u\n", hdr.ts.tv_sec, hdr.ts.tv_usec, hdr.len, hdr.caplen); - } - - // clean up - pcap_close(pcap); - _pclose(tshark_out); - return 0; -} - +/* + * Copyright (c) 2008 CACE Technologies, Davis (California) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of CACE Technologies nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * This sample was contributed by + * Marcin Okraszewski (Marcin.OkraszewskiATpl.compuware.com) + * + */ + +#include +#include +#include + +/** Prints packet timestaps regardless of format*/ +int _tmain(int argc, _TCHAR* argv[]) +{ + char errbuf[PCAP_ERRBUF_SIZE]; + wchar_t cmd[1024]; + wchar_t tshark_path[MAX_PATH]; + wchar_t file_path[MAX_PATH]; + + if ( argc != 3 ) { + wprintf(L"Prints packet timestaps regardless of format.\n"); + wprintf(L"Usage:\n\t%ls \n", argv[0]); + return 1; + } + + // conversion to short path name in case there are spaces + if ( ! GetShortPathNameW(argv[1], tshark_path, MAX_PATH) || + ! GetShortPathNameW(argv[2], file_path, MAX_PATH) ) + { + printf("Failed to convert paths to short form."); + return 1; + } + + // create tshark command, which will make the trace conversion and print in libpcap format to stdout + if ( swprintf_s(cmd, 1024, L"%ls -r %ls -w - -F libpcap", tshark_path, file_path) < 0 ) { + wprintf(L"Failed to create command\n"); + return 1; + } + + // start tshark + FILE *tshark_out = _wpopen(cmd, L"rb"); + if ( tshark_out == NULL ) { + strerror_s(errbuf, PCAP_ERRBUF_SIZE, errno); + printf("Failed run tshark: %s\n", errbuf); + wprintf(L"Command: %ls", cmd); + return 1; + } + + // open stdout from tshark + pcap_t *pcap = pcap_fopen_offline(tshark_out, errbuf); + if ( pcap == NULL ) { + printf("Error opening stream from tshark: %s\n", errbuf); + return 1; + } + + // print information about every packet int trace + struct pcap_pkthdr hdr; + while ( pcap_next(pcap, &hdr) ) { + printf("packet: ts: %u.%06u, len: %4u, caplen: %4u\n", hdr.ts.tv_sec, hdr.ts.tv_usec, hdr.len, hdr.caplen); + } + + // clean up + pcap_close(pcap); + _pclose(tshark_out); + return 0; +} + diff --git a/libs/WinPcap-413-173-b4/Examples-remote/pcap_fopen/pcap_fopen.vcproj b/libs/WpdPack_4_1_2/Examples-remote/pcap_fopen/pcap_fopen.vcproj similarity index 95% rename from libs/WinPcap-413-173-b4/Examples-remote/pcap_fopen/pcap_fopen.vcproj rename to libs/WpdPack_4_1_2/Examples-remote/pcap_fopen/pcap_fopen.vcproj index 7ac70a46..73f4c6e0 100644 --- a/libs/WinPcap-413-173-b4/Examples-remote/pcap_fopen/pcap_fopen.vcproj +++ b/libs/WpdPack_4_1_2/Examples-remote/pcap_fopen/pcap_fopen.vcproj @@ -1,364 +1,364 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/libs/WinPcap-413-173-b4/Examples-remote/pktdump_ex/pktdump_ex.c b/libs/WpdPack_4_1_2/Examples-remote/pktdump_ex/pktdump_ex.c similarity index 96% rename from libs/WinPcap-413-173-b4/Examples-remote/pktdump_ex/pktdump_ex.c rename to libs/WpdPack_4_1_2/Examples-remote/pktdump_ex/pktdump_ex.c index a68baa88..6198e7dd 100644 --- a/libs/WinPcap-413-173-b4/Examples-remote/pktdump_ex/pktdump_ex.c +++ b/libs/WpdPack_4_1_2/Examples-remote/pktdump_ex/pktdump_ex.c @@ -1,163 +1,163 @@ -/* - * Copyright (c) 1999 - 2005 NetGroup, Politecnico di Torino (Italy) - * Copyright (c) 2005 - 2006 CACE Technologies, Davis (California) - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the Politecnico di Torino, CACE Technologies - * nor the names of its contributors may be used to endorse or promote - * products derived from this software without specific prior written - * permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ - - -#include -#include - -// -// NOTE: remember to include WPCAP and HAVE_REMOTE among your -// preprocessor definitions. -// - -#include - -#define LINE_LEN 16 - -int main(int argc, char **argv) -{ -pcap_if_t *alldevs, *d; -pcap_t *fp; -u_int inum, i=0; -char errbuf[PCAP_ERRBUF_SIZE]; -int res; -struct pcap_pkthdr *header; -const u_char *pkt_data; - - printf("pktdump_ex: prints the packets of the network using WinPcap.\n"); - printf(" Usage: pktdump_ex [-s source]\n\n" - " Examples:\n" - " pktdump_ex -s file://c:/temp/file.acp\n" - " pktdump_ex -s rpcap://\\Device\\NPF_{C8736017-F3C3-4373-94AC-9A34B7DAD998}\n\n"); - - if(argc < 3) - { - - printf("\nNo adapter selected: printing the device list:\n"); - /* The user didn't provide a packet source: Retrieve the local device list */ - if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL, &alldevs, errbuf) == -1) - { - fprintf(stderr,"Error in pcap_findalldevs_ex: %s\n", errbuf); - return -1; - } - - /* Print the list */ - for(d=alldevs; d; d=d->next) - { - printf("%d. %s\n ", ++i, d->name); - - if (d->description) - printf(" (%s)\n", d->description); - else - printf(" (No description available)\n"); - } - - if (i==0) - { - fprintf(stderr,"No interfaces found! Exiting.\n"); - return -1; - } - - printf("Enter the interface number (1-%d):",i); - scanf_s("%d", &inum); - - if (inum < 1 || inum > i) - { - printf("\nInterface number out of range.\n"); - - /* Free the device list */ - pcap_freealldevs(alldevs); - return -1; - } - - /* Jump to the selected adapter */ - for (d=alldevs, i=0; i< inum-1 ;d=d->next, i++); - - /* Open the device */ - if ( (fp= pcap_open(d->name, - 100 /*snaplen*/, - PCAP_OPENFLAG_PROMISCUOUS /*flags*/, - 20 /*read timeout*/, - NULL /* remote authentication */, - errbuf) - ) == NULL) - { - fprintf(stderr,"\nError opening adapter\n"); - return -1; - } - } - else - { - // Do not check for the switch type ('-s') - if ( (fp= pcap_open(argv[2], - 100 /*snaplen*/, - PCAP_OPENFLAG_PROMISCUOUS /*flags*/, - 20 /*read timeout*/, - NULL /* remote authentication */, - errbuf) - ) == NULL) - { - fprintf(stderr,"\nError opening source: %s\n", errbuf); - return -1; - } - } - - /* Read the packets */ - while((res = pcap_next_ex( fp, &header, &pkt_data)) >= 0) - { - - if(res == 0) - /* Timeout elapsed */ - continue; - - /* print pkt timestamp and pkt len */ - printf("%ld:%ld (%ld)\n", header->ts.tv_sec, header->ts.tv_usec, header->len); - - /* Print the packet */ - for (i=1; (i < header->caplen + 1 ) ; i++) - { - printf("%.2x ", pkt_data[i-1]); - if ( (i % LINE_LEN) == 0) printf("\n"); - } - - printf("\n\n"); - } - - if(res == -1) - { - fprintf(stderr, "Error reading the packets: %s\n", pcap_geterr(fp)); - return -1; - } - - return 0; -} +/* + * Copyright (c) 1999 - 2005 NetGroup, Politecnico di Torino (Italy) + * Copyright (c) 2005 - 2006 CACE Technologies, Davis (California) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Politecnico di Torino, CACE Technologies + * nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written + * permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + + +#include +#include + +// +// NOTE: remember to include WPCAP and HAVE_REMOTE among your +// preprocessor definitions. +// + +#include + +#define LINE_LEN 16 + +int main(int argc, char **argv) +{ +pcap_if_t *alldevs, *d; +pcap_t *fp; +u_int inum, i=0; +char errbuf[PCAP_ERRBUF_SIZE]; +int res; +struct pcap_pkthdr *header; +const u_char *pkt_data; + + printf("pktdump_ex: prints the packets of the network using WinPcap.\n"); + printf(" Usage: pktdump_ex [-s source]\n\n" + " Examples:\n" + " pktdump_ex -s file://c:/temp/file.acp\n" + " pktdump_ex -s rpcap://\\Device\\NPF_{C8736017-F3C3-4373-94AC-9A34B7DAD998}\n\n"); + + if(argc < 3) + { + + printf("\nNo adapter selected: printing the device list:\n"); + /* The user didn't provide a packet source: Retrieve the local device list */ + if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL, &alldevs, errbuf) == -1) + { + fprintf(stderr,"Error in pcap_findalldevs_ex: %s\n", errbuf); + return -1; + } + + /* Print the list */ + for(d=alldevs; d; d=d->next) + { + printf("%d. %s\n ", ++i, d->name); + + if (d->description) + printf(" (%s)\n", d->description); + else + printf(" (No description available)\n"); + } + + if (i==0) + { + fprintf(stderr,"No interfaces found! Exiting.\n"); + return -1; + } + + printf("Enter the interface number (1-%d):",i); + scanf_s("%d", &inum); + + if (inum < 1 || inum > i) + { + printf("\nInterface number out of range.\n"); + + /* Free the device list */ + pcap_freealldevs(alldevs); + return -1; + } + + /* Jump to the selected adapter */ + for (d=alldevs, i=0; i< inum-1 ;d=d->next, i++); + + /* Open the device */ + if ( (fp= pcap_open(d->name, + 100 /*snaplen*/, + PCAP_OPENFLAG_PROMISCUOUS /*flags*/, + 20 /*read timeout*/, + NULL /* remote authentication */, + errbuf) + ) == NULL) + { + fprintf(stderr,"\nError opening adapter\n"); + return -1; + } + } + else + { + // Do not check for the switch type ('-s') + if ( (fp= pcap_open(argv[2], + 100 /*snaplen*/, + PCAP_OPENFLAG_PROMISCUOUS /*flags*/, + 20 /*read timeout*/, + NULL /* remote authentication */, + errbuf) + ) == NULL) + { + fprintf(stderr,"\nError opening source: %s\n", errbuf); + return -1; + } + } + + /* Read the packets */ + while((res = pcap_next_ex( fp, &header, &pkt_data)) >= 0) + { + + if(res == 0) + /* Timeout elapsed */ + continue; + + /* print pkt timestamp and pkt len */ + printf("%ld:%ld (%ld)\n", header->ts.tv_sec, header->ts.tv_usec, header->len); + + /* Print the packet */ + for (i=1; (i < header->caplen + 1 ) ; i++) + { + printf("%.2x ", pkt_data[i-1]); + if ( (i % LINE_LEN) == 0) printf("\n"); + } + + printf("\n\n"); + } + + if(res == -1) + { + fprintf(stderr, "Error reading the packets: %s\n", pcap_geterr(fp)); + return -1; + } + + return 0; +} diff --git a/libs/WinPcap-413-173-b4/Examples-remote/pktdump_ex/pktdump_ex.dsp b/libs/WpdPack_4_1_2/Examples-remote/pktdump_ex/pktdump_ex.dsp similarity index 97% rename from libs/WinPcap-413-173-b4/Examples-remote/pktdump_ex/pktdump_ex.dsp rename to libs/WpdPack_4_1_2/Examples-remote/pktdump_ex/pktdump_ex.dsp index 85c062da..a9800e6a 100644 --- a/libs/WinPcap-413-173-b4/Examples-remote/pktdump_ex/pktdump_ex.dsp +++ b/libs/WpdPack_4_1_2/Examples-remote/pktdump_ex/pktdump_ex.dsp @@ -1,110 +1,110 @@ -# Microsoft Developer Studio Project File - Name="pktdump_ex" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=pktdump_ex - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "pktdump_ex.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "pktdump_ex.mak" CFG="pktdump_ex - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "pktdump_ex - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "pktdump_ex - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "pktdump_ex - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "../" /I "../bpf/" /I "../lbl/" /I "../../Include/" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_UNICODE" /D "WPCAP" /D "HAVE_REMOTE" /YX /FD /c -# ADD BASE RSC /l 0x410 /d "NDEBUG" -# ADD RSC /l 0x410 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "pktdump_ex - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../" /I "../bpf/" /I "../lbl/" /I "../../Include/" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_UNICODE" /D "WPCAP" /D "HAVE_REMOTE" /YX /FD /GZ /c -# ADD BASE RSC /l 0x410 /d "_DEBUG" -# ADD RSC /l 0x410 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "pktdump_ex - Win32 Release" -# Name "pktdump_ex - Win32 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\pktdump_ex.c -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# Begin Source File - -SOURCE=..\..\include\pcap.h -# End Source File -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# Begin Source File - -SOURCE=..\..\lib\Wpcap.lib -# End Source File -# End Target -# End Project +# Microsoft Developer Studio Project File - Name="pktdump_ex" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Console Application" 0x0103 + +CFG=pktdump_ex - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "pktdump_ex.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "pktdump_ex.mak" CFG="pktdump_ex - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "pktdump_ex - Win32 Release" (based on "Win32 (x86) Console Application") +!MESSAGE "pktdump_ex - Win32 Debug" (based on "Win32 (x86) Console Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "pktdump_ex - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /I "../" /I "../bpf/" /I "../lbl/" /I "../../Include/" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_UNICODE" /D "WPCAP" /D "HAVE_REMOTE" /YX /FD /c +# ADD BASE RSC /l 0x410 /d "NDEBUG" +# ADD RSC /l 0x410 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib /nologo /subsystem:console /machine:I386 + +!ELSEIF "$(CFG)" == "pktdump_ex - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c +# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../" /I "../bpf/" /I "../lbl/" /I "../../Include/" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_UNICODE" /D "WPCAP" /D "HAVE_REMOTE" /YX /FD /GZ /c +# ADD BASE RSC /l 0x410 /d "_DEBUG" +# ADD RSC /l 0x410 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept + +!ENDIF + +# Begin Target + +# Name "pktdump_ex - Win32 Release" +# Name "pktdump_ex - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\pktdump_ex.c +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# Begin Source File + +SOURCE=..\..\include\pcap.h +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# End Group +# Begin Source File + +SOURCE=..\..\lib\Wpcap.lib +# End Source File +# End Target +# End Project diff --git a/libs/WinPcap-413-173-b4/Examples-pcap/pktdump_ex/pktdump_ex.dsw b/libs/WpdPack_4_1_2/Examples-remote/pktdump_ex/pktdump_ex.dsw similarity index 94% rename from libs/WinPcap-413-173-b4/Examples-pcap/pktdump_ex/pktdump_ex.dsw rename to libs/WpdPack_4_1_2/Examples-remote/pktdump_ex/pktdump_ex.dsw index b0f6812f..ec247333 100644 --- a/libs/WinPcap-413-173-b4/Examples-pcap/pktdump_ex/pktdump_ex.dsw +++ b/libs/WpdPack_4_1_2/Examples-remote/pktdump_ex/pktdump_ex.dsw @@ -1,29 +1,29 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "pktdump_ex"=.\pktdump_ex.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "pktdump_ex"=.\pktdump_ex.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/libs/WinPcap-413-173-b4/Examples-remote/pktdump_ex/pktdump_ex.vcproj b/libs/WpdPack_4_1_2/Examples-remote/pktdump_ex/pktdump_ex.vcproj similarity index 95% rename from libs/WinPcap-413-173-b4/Examples-remote/pktdump_ex/pktdump_ex.vcproj rename to libs/WpdPack_4_1_2/Examples-remote/pktdump_ex/pktdump_ex.vcproj index b1fa198a..d99862f4 100644 --- a/libs/WinPcap-413-173-b4/Examples-remote/pktdump_ex/pktdump_ex.vcproj +++ b/libs/WpdPack_4_1_2/Examples-remote/pktdump_ex/pktdump_ex.vcproj @@ -1,364 +1,364 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/libs/WinPcap-413-173-b4/Examples-remote/sendcap/sencap.dsw b/libs/WpdPack_4_1_2/Examples-remote/sendcap/sencap.dsw similarity index 94% rename from libs/WinPcap-413-173-b4/Examples-remote/sendcap/sencap.dsw rename to libs/WpdPack_4_1_2/Examples-remote/sendcap/sencap.dsw index 5c40d67a..eae0bc2c 100644 --- a/libs/WinPcap-413-173-b4/Examples-remote/sendcap/sencap.dsw +++ b/libs/WpdPack_4_1_2/Examples-remote/sendcap/sencap.dsw @@ -1,29 +1,29 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "sendcap"=.\sendcap.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "sendcap"=.\sendcap.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/libs/WinPcap-413-173-b4/Examples-remote/sendcap/sendcap.c b/libs/WpdPack_4_1_2/Examples-remote/sendcap/sendcap.c similarity index 96% rename from libs/WinPcap-413-173-b4/Examples-remote/sendcap/sendcap.c rename to libs/WpdPack_4_1_2/Examples-remote/sendcap/sendcap.c index aed5c146..876c6d80 100644 --- a/libs/WinPcap-413-173-b4/Examples-remote/sendcap/sendcap.c +++ b/libs/WpdPack_4_1_2/Examples-remote/sendcap/sendcap.c @@ -1,184 +1,184 @@ -/* - * Copyright (c) 1999 - 2005 NetGroup, Politecnico di Torino (Italy) - * Copyright (c) 2005 - 2006 CACE Technologies, Davis (California) - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the Politecnico di Torino, CACE Technologies - * nor the names of its contributors may be used to endorse or promote - * products derived from this software without specific prior written - * permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ - -#include -#include - -#include - -void usage(); - -void main(int argc, char **argv) -{ - pcap_t *indesc,*outdesc; - char errbuf[PCAP_ERRBUF_SIZE]; - char source[PCAP_BUF_SIZE]; - FILE *capfile; - int caplen, sync; - u_int res; - pcap_send_queue *squeue; - struct pcap_pkthdr *pktheader; - u_char *pktdata; - float cpu_time; - u_int npacks = 0; - errno_t fopen_error; - - /* Check the validity of the command line */ - if (argc <= 2 || argc >= 5) - { - usage(); - return; - } - - /* Retrieve the length of the capture file */ - fopen_error = fopen_s(&capfile, argv[1],"rb"); - if(fopen_error != 0){ - printf("Error opening the file, errno %d.\n", fopen_error); - return; - } - - fseek(capfile , 0, SEEK_END); - caplen= ftell(capfile)- sizeof(struct pcap_file_header); - fclose(capfile); - - /* Chek if the timestamps must be respected */ - if(argc == 4 && argv[3][0] == 's') - sync = TRUE; - else - sync = FALSE; - - /* Open the capture */ - /* Create the source string according to the new WinPcap syntax */ - if ( pcap_createsrcstr( source, // variable that will keep the source string - PCAP_SRC_FILE, // we want to open a file - NULL, // remote host - NULL, // port on the remote host - argv[1], // name of the file we want to open - errbuf // error buffer - ) != 0) - { - fprintf(stderr,"\nError creating a source string\n"); - return; - } - - /* Open the capture file */ - if ( (indesc= pcap_open(source, 65536, PCAP_OPENFLAG_PROMISCUOUS, 1000, NULL, errbuf) ) == NULL) - { - fprintf(stderr,"\nUnable to open the file %s.\n", source); - return; - } - - /* Open the output adapter */ - if ( (outdesc= pcap_open(argv[2], 100, PCAP_OPENFLAG_PROMISCUOUS, 1000, NULL, errbuf) ) == NULL) - { - fprintf(stderr,"\nUnable to open adapter %s.\n", source); - return; - } - - /* Check the MAC type */ - if (pcap_datalink(indesc) != pcap_datalink(outdesc)) - { - printf("Warning: the datalink of the capture differs from the one of the selected interface.\n"); - printf("Press a key to continue, or CTRL+C to stop.\n"); - getchar(); - } - - /* Allocate a send queue */ - squeue = pcap_sendqueue_alloc(caplen); - - /* Fill the queue with the packets from the file */ - while ((res = pcap_next_ex( indesc, &pktheader, &pktdata)) == 1) - { - if (pcap_sendqueue_queue(squeue, pktheader, pktdata) == -1) - { - printf("Warning: packet buffer too small, not all the packets will be sent.\n"); - break; - } - - npacks++; - } - - if (res == -1) - { - printf("Corrupted input file.\n"); - pcap_sendqueue_destroy(squeue); - return; - } - - /* Transmit the queue */ - - cpu_time = (float)clock (); - - if ((res = pcap_sendqueue_transmit(outdesc, squeue, sync)) < squeue->len) - { - printf("An error occurred sending the packets: %s. Only %d bytes were sent\n", pcap_geterr(outdesc), res); - } - - cpu_time = (clock() - cpu_time)/CLK_TCK; - - printf ("\n\nElapsed time: %5.3f\n", cpu_time); - printf ("\nTotal packets generated = %d", npacks); - printf ("\nAverage packets per second = %d", (int)((double)npacks/cpu_time)); - printf ("\n"); - - /* free the send queue */ - pcap_sendqueue_destroy(squeue); - - /* Close the input file */ - pcap_close(indesc); - - /* - * lose the output adapter - * IMPORTANT: remember to close the adapter, otherwise there will be no guarantee that all the - * packets will be sent! - */ - pcap_close(outdesc); - - - return; -} - - -void usage() -{ - - printf("\nSendcap, sends a libpcap/tcpdump capture file to the net. Copyright (C) 2002 Loris Degioanni.\n"); - printf("\nUsage:\n"); - printf("\t sendcap file_name adapter [s]\n"); - printf("\nParameters:\n"); - printf("\nfile_name: the name of the dump file that will be sent to the network\n"); - printf("\nadapter: the device to use. Use \"WinDump -D\" for a list of valid devices\n"); - printf("\ns: if present, forces the packets to be sent synchronously, i.e. respecting the timestamps in the dump file. This option will work only under Windows NTx.\n\n"); - - exit(0); +/* + * Copyright (c) 1999 - 2005 NetGroup, Politecnico di Torino (Italy) + * Copyright (c) 2005 - 2006 CACE Technologies, Davis (California) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Politecnico di Torino, CACE Technologies + * nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written + * permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#include +#include + +#include + +void usage(); + +void main(int argc, char **argv) +{ + pcap_t *indesc,*outdesc; + char errbuf[PCAP_ERRBUF_SIZE]; + char source[PCAP_BUF_SIZE]; + FILE *capfile; + int caplen, sync; + u_int res; + pcap_send_queue *squeue; + struct pcap_pkthdr *pktheader; + u_char *pktdata; + float cpu_time; + u_int npacks = 0; + errno_t fopen_error; + + /* Check the validity of the command line */ + if (argc <= 2 || argc >= 5) + { + usage(); + return; + } + + /* Retrieve the length of the capture file */ + fopen_error = fopen_s(&capfile, argv[1],"rb"); + if(fopen_error != 0){ + printf("Error opening the file, errno %d.\n", fopen_error); + return; + } + + fseek(capfile , 0, SEEK_END); + caplen= ftell(capfile)- sizeof(struct pcap_file_header); + fclose(capfile); + + /* Chek if the timestamps must be respected */ + if(argc == 4 && argv[3][0] == 's') + sync = TRUE; + else + sync = FALSE; + + /* Open the capture */ + /* Create the source string according to the new WinPcap syntax */ + if ( pcap_createsrcstr( source, // variable that will keep the source string + PCAP_SRC_FILE, // we want to open a file + NULL, // remote host + NULL, // port on the remote host + argv[1], // name of the file we want to open + errbuf // error buffer + ) != 0) + { + fprintf(stderr,"\nError creating a source string\n"); + return; + } + + /* Open the capture file */ + if ( (indesc= pcap_open(source, 65536, PCAP_OPENFLAG_PROMISCUOUS, 1000, NULL, errbuf) ) == NULL) + { + fprintf(stderr,"\nUnable to open the file %s.\n", source); + return; + } + + /* Open the output adapter */ + if ( (outdesc= pcap_open(argv[2], 100, PCAP_OPENFLAG_PROMISCUOUS, 1000, NULL, errbuf) ) == NULL) + { + fprintf(stderr,"\nUnable to open adapter %s.\n", source); + return; + } + + /* Check the MAC type */ + if (pcap_datalink(indesc) != pcap_datalink(outdesc)) + { + printf("Warning: the datalink of the capture differs from the one of the selected interface.\n"); + printf("Press a key to continue, or CTRL+C to stop.\n"); + getchar(); + } + + /* Allocate a send queue */ + squeue = pcap_sendqueue_alloc(caplen); + + /* Fill the queue with the packets from the file */ + while ((res = pcap_next_ex( indesc, &pktheader, &pktdata)) == 1) + { + if (pcap_sendqueue_queue(squeue, pktheader, pktdata) == -1) + { + printf("Warning: packet buffer too small, not all the packets will be sent.\n"); + break; + } + + npacks++; + } + + if (res == -1) + { + printf("Corrupted input file.\n"); + pcap_sendqueue_destroy(squeue); + return; + } + + /* Transmit the queue */ + + cpu_time = (float)clock (); + + if ((res = pcap_sendqueue_transmit(outdesc, squeue, sync)) < squeue->len) + { + printf("An error occurred sending the packets: %s. Only %d bytes were sent\n", pcap_geterr(outdesc), res); + } + + cpu_time = (clock() - cpu_time)/CLK_TCK; + + printf ("\n\nElapsed time: %5.3f\n", cpu_time); + printf ("\nTotal packets generated = %d", npacks); + printf ("\nAverage packets per second = %d", (int)((double)npacks/cpu_time)); + printf ("\n"); + + /* free the send queue */ + pcap_sendqueue_destroy(squeue); + + /* Close the input file */ + pcap_close(indesc); + + /* + * lose the output adapter + * IMPORTANT: remember to close the adapter, otherwise there will be no guarantee that all the + * packets will be sent! + */ + pcap_close(outdesc); + + + return; +} + + +void usage() +{ + + printf("\nSendcap, sends a libpcap/tcpdump capture file to the net. Copyright (C) 2002 Loris Degioanni.\n"); + printf("\nUsage:\n"); + printf("\t sendcap file_name adapter [s]\n"); + printf("\nParameters:\n"); + printf("\nfile_name: the name of the dump file that will be sent to the network\n"); + printf("\nadapter: the device to use. Use \"WinDump -D\" for a list of valid devices\n"); + printf("\ns: if present, forces the packets to be sent synchronously, i.e. respecting the timestamps in the dump file. This option will work only under Windows NTx.\n\n"); + + exit(0); } \ No newline at end of file diff --git a/libs/WinPcap-413-173-b4/Examples-remote/sendcap/sendcap.dsp b/libs/WpdPack_4_1_2/Examples-remote/sendcap/sendcap.dsp similarity index 97% rename from libs/WinPcap-413-173-b4/Examples-remote/sendcap/sendcap.dsp rename to libs/WpdPack_4_1_2/Examples-remote/sendcap/sendcap.dsp index f453aa26..230d09b6 100644 --- a/libs/WinPcap-413-173-b4/Examples-remote/sendcap/sendcap.dsp +++ b/libs/WpdPack_4_1_2/Examples-remote/sendcap/sendcap.dsp @@ -1,110 +1,110 @@ -# Microsoft Developer Studio Project File - Name="sendcap" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=sendcap - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "sendcap.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "sendcap.mak" CFG="sendcap - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "sendcap - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "sendcap - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "sendcap - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "../" /I "../bpf/" /I "../lbl/" /I "../../Include/" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_UNICODE" /D "WPCAP" /D "PCAP_DONT_INCLUDE_PCAP_BPF_H" /YX /FD /c -# ADD BASE RSC /l 0x410 /d "NDEBUG" -# ADD RSC /l 0x410 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "sendcap - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../" /I "../bpf/" /I "../lbl/" /I "../../Include/" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_UNICODE" /D "WPCAP" /D "PCAP_DONT_INCLUDE_PCAP_BPF_H" /YX /FD /GZ /c -# ADD BASE RSC /l 0x410 /d "_DEBUG" -# ADD RSC /l 0x410 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "sendcap - Win32 Release" -# Name "sendcap - Win32 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\sendcap.c -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# Begin Source File - -SOURCE=..\..\include\pcap.h -# End Source File -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# Begin Source File - -SOURCE=..\..\lib\Wpcap.lib -# End Source File -# End Target -# End Project +# Microsoft Developer Studio Project File - Name="sendcap" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Console Application" 0x0103 + +CFG=sendcap - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "sendcap.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "sendcap.mak" CFG="sendcap - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "sendcap - Win32 Release" (based on "Win32 (x86) Console Application") +!MESSAGE "sendcap - Win32 Debug" (based on "Win32 (x86) Console Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "sendcap - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /I "../" /I "../bpf/" /I "../lbl/" /I "../../Include/" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_UNICODE" /D "WPCAP" /D "PCAP_DONT_INCLUDE_PCAP_BPF_H" /YX /FD /c +# ADD BASE RSC /l 0x410 /d "NDEBUG" +# ADD RSC /l 0x410 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib /nologo /subsystem:console /machine:I386 + +!ELSEIF "$(CFG)" == "sendcap - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c +# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../" /I "../bpf/" /I "../lbl/" /I "../../Include/" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_UNICODE" /D "WPCAP" /D "PCAP_DONT_INCLUDE_PCAP_BPF_H" /YX /FD /GZ /c +# ADD BASE RSC /l 0x410 /d "_DEBUG" +# ADD RSC /l 0x410 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept + +!ENDIF + +# Begin Target + +# Name "sendcap - Win32 Release" +# Name "sendcap - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\sendcap.c +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# Begin Source File + +SOURCE=..\..\include\pcap.h +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# End Group +# Begin Source File + +SOURCE=..\..\lib\Wpcap.lib +# End Source File +# End Target +# End Project diff --git a/libs/WinPcap-413-173-b4/Examples-remote/sendcap/sendcap.vcproj b/libs/WpdPack_4_1_2/Examples-remote/sendcap/sendcap.vcproj similarity index 95% rename from libs/WinPcap-413-173-b4/Examples-remote/sendcap/sendcap.vcproj rename to libs/WpdPack_4_1_2/Examples-remote/sendcap/sendcap.vcproj index 9cd2412e..c95da3c4 100644 --- a/libs/WinPcap-413-173-b4/Examples-remote/sendcap/sendcap.vcproj +++ b/libs/WpdPack_4_1_2/Examples-remote/sendcap/sendcap.vcproj @@ -1,364 +1,364 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/libs/WinPcap-413-173-b4/Examples-remote/smp_1/smp_1.c b/libs/WpdPack_4_1_2/Examples-remote/smp_1/smp_1.c similarity index 96% rename from libs/WinPcap-413-173-b4/Examples-remote/smp_1/smp_1.c rename to libs/WpdPack_4_1_2/Examples-remote/smp_1/smp_1.c index 13593307..9b991143 100644 --- a/libs/WinPcap-413-173-b4/Examples-remote/smp_1/smp_1.c +++ b/libs/WpdPack_4_1_2/Examples-remote/smp_1/smp_1.c @@ -1,134 +1,134 @@ -/* - * Copyright (c) 1999 - 2005 NetGroup, Politecnico di Torino (Italy) - * Copyright (c) 2005 - 2006 CACE Technologies, Davis (California) - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the Politecnico di Torino, CACE Technologies - * nor the names of its contributors may be used to endorse or promote - * products derived from this software without specific prior written - * permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ - - -#include -#include -#include - -#include - - -int main() -{ -pcap_if_t *alldevs, *d; -pcap_t *fp; -u_int inum, i=0; -char errbuf[PCAP_ERRBUF_SIZE]; -int res; -struct pcap_pkthdr *header; -const u_char *pkt_data; -struct pcap_pkthdr old; - - printf("SMP_1\n"); - printf("\nThis program tests the WinPcap kernel driver on SMP machines.\n"); - printf("The program tests that timestamps on the captured packets are consistent,\n"); - printf("and that the caplen is equal to the packet length.\n"); - printf("If there is an error, it will print out a message saying \"Inconsistent XXX\"\n"); - - if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL, &alldevs, errbuf) == -1) - { - fprintf(stderr,"Error in pcap_findalldevs: %s\n", errbuf); - exit(1); - } - - /* Print the list */ - for(d=alldevs; d; d=d->next) - { - printf("%d. %s", ++i, d->name); - if (d->description) - printf(" (%s)\n", d->description); - else - printf(" (No description available)\n"); - } - - if(i==0) - { - printf("\nNo interfaces found! Make sure WinPcap is installed.\n"); - return -1; - } - - printf("Enter the interface number (1-%d):",i); - scanf_s("%d", &inum); - - if(inum < 1 || inum > i) - { - printf("\nInterface number out of range.\n"); - /* Free the device list */ - pcap_freealldevs(alldevs); - return -1; - } - - /* Jump to the selected adapter */ - for(d=alldevs, i=0; i< inum-1 ;d=d->next, i++); - - /* Open the device */ - if ( (fp= pcap_open(d->name, 65536, PCAP_OPENFLAG_PROMISCUOUS, 1000, NULL, errbuf) ) == NULL) - { - fprintf(stderr,"\nUnable to open the adapter. %s is not supported by WinPcap\n", d->name); - /* Free the device list */ - pcap_freealldevs(alldevs); - return -1; - } - - old.ts.tv_sec=0; - old.ts.tv_usec=0; - - - /* Read the packets */ - while((res = pcap_next_ex( fp, &header, &pkt_data)) >= 0){ - - if(res == 0) - continue; - - //check that caplen is equal to packet length - if (header->caplen!=header->len) - printf("Inconsistent header: CapLen %d\t Len %d\n",header->caplen,header->len); - - //check that timestamps always grow - if ( old.ts.tv_sec > header->ts.tv_sec || (old.ts.tv_sec == header->ts.tv_sec && old.ts.tv_usec > header->ts.tv_usec)) - printf("Inconsistent Timestamps! Old was %d.%.06d - New is %d.%.06d\n",old.ts.tv_sec,old.ts.tv_usec, header->ts.tv_sec,header->ts.tv_usec); - - old=*header; - - } - - if(res == -1){ - printf("Error reading the packets: %s\n", pcap_geterr(fp)); - return -1; - } - - _getch(); - - return 0; -} +/* + * Copyright (c) 1999 - 2005 NetGroup, Politecnico di Torino (Italy) + * Copyright (c) 2005 - 2006 CACE Technologies, Davis (California) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Politecnico di Torino, CACE Technologies + * nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written + * permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + + +#include +#include +#include + +#include + + +int main() +{ +pcap_if_t *alldevs, *d; +pcap_t *fp; +u_int inum, i=0; +char errbuf[PCAP_ERRBUF_SIZE]; +int res; +struct pcap_pkthdr *header; +const u_char *pkt_data; +struct pcap_pkthdr old; + + printf("SMP_1\n"); + printf("\nThis program tests the WinPcap kernel driver on SMP machines.\n"); + printf("The program tests that timestamps on the captured packets are consistent,\n"); + printf("and that the caplen is equal to the packet length.\n"); + printf("If there is an error, it will print out a message saying \"Inconsistent XXX\"\n"); + + if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL, &alldevs, errbuf) == -1) + { + fprintf(stderr,"Error in pcap_findalldevs: %s\n", errbuf); + exit(1); + } + + /* Print the list */ + for(d=alldevs; d; d=d->next) + { + printf("%d. %s", ++i, d->name); + if (d->description) + printf(" (%s)\n", d->description); + else + printf(" (No description available)\n"); + } + + if(i==0) + { + printf("\nNo interfaces found! Make sure WinPcap is installed.\n"); + return -1; + } + + printf("Enter the interface number (1-%d):",i); + scanf_s("%d", &inum); + + if(inum < 1 || inum > i) + { + printf("\nInterface number out of range.\n"); + /* Free the device list */ + pcap_freealldevs(alldevs); + return -1; + } + + /* Jump to the selected adapter */ + for(d=alldevs, i=0; i< inum-1 ;d=d->next, i++); + + /* Open the device */ + if ( (fp= pcap_open(d->name, 65536, PCAP_OPENFLAG_PROMISCUOUS, 1000, NULL, errbuf) ) == NULL) + { + fprintf(stderr,"\nUnable to open the adapter. %s is not supported by WinPcap\n", d->name); + /* Free the device list */ + pcap_freealldevs(alldevs); + return -1; + } + + old.ts.tv_sec=0; + old.ts.tv_usec=0; + + + /* Read the packets */ + while((res = pcap_next_ex( fp, &header, &pkt_data)) >= 0){ + + if(res == 0) + continue; + + //check that caplen is equal to packet length + if (header->caplen!=header->len) + printf("Inconsistent header: CapLen %d\t Len %d\n",header->caplen,header->len); + + //check that timestamps always grow + if ( old.ts.tv_sec > header->ts.tv_sec || (old.ts.tv_sec == header->ts.tv_sec && old.ts.tv_usec > header->ts.tv_usec)) + printf("Inconsistent Timestamps! Old was %d.%.06d - New is %d.%.06d\n",old.ts.tv_sec,old.ts.tv_usec, header->ts.tv_sec,header->ts.tv_usec); + + old=*header; + + } + + if(res == -1){ + printf("Error reading the packets: %s\n", pcap_geterr(fp)); + return -1; + } + + _getch(); + + return 0; +} diff --git a/libs/WinPcap-413-173-b4/Examples-remote/smp_1/smp_1.dsp b/libs/WpdPack_4_1_2/Examples-remote/smp_1/smp_1.dsp similarity index 97% rename from libs/WinPcap-413-173-b4/Examples-remote/smp_1/smp_1.dsp rename to libs/WpdPack_4_1_2/Examples-remote/smp_1/smp_1.dsp index 55c17537..e759c308 100644 --- a/libs/WinPcap-413-173-b4/Examples-remote/smp_1/smp_1.dsp +++ b/libs/WpdPack_4_1_2/Examples-remote/smp_1/smp_1.dsp @@ -1,102 +1,102 @@ -# Microsoft Developer Studio Project File - Name="smp_1" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=smp_1 - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "smp_1.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "smp_1.mak" CFG="smp_1 - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "smp_1 - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "smp_1 - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "smp_1 - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "..\..\include" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "WPCAP" /D "HAVE_REMOTE" /YX /FD /c -# ADD BASE RSC /l 0x410 /d "NDEBUG" -# ADD RSC /l 0x410 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wpcap.lib /nologo /subsystem:console /machine:I386 /libpath:"..\..\lib" - -!ELSEIF "$(CFG)" == "smp_1 - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\..\include" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "WPCAP" /D "HAVE_REMOTE" /YX /FD /GZ /c -# ADD BASE RSC /l 0x410 /d "_DEBUG" -# ADD RSC /l 0x410 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wpcap.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\..\lib" - -!ENDIF - -# Begin Target - -# Name "smp_1 - Win32 Release" -# Name "smp_1 - Win32 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\SMP_1.c -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# End Target -# End Project +# Microsoft Developer Studio Project File - Name="smp_1" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Console Application" 0x0103 + +CFG=smp_1 - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "smp_1.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "smp_1.mak" CFG="smp_1 - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "smp_1 - Win32 Release" (based on "Win32 (x86) Console Application") +!MESSAGE "smp_1 - Win32 Debug" (based on "Win32 (x86) Console Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "smp_1 - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /I "..\..\include" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "WPCAP" /D "HAVE_REMOTE" /YX /FD /c +# ADD BASE RSC /l 0x410 /d "NDEBUG" +# ADD RSC /l 0x410 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wpcap.lib /nologo /subsystem:console /machine:I386 /libpath:"..\..\lib" + +!ELSEIF "$(CFG)" == "smp_1 - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c +# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\..\include" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "WPCAP" /D "HAVE_REMOTE" /YX /FD /GZ /c +# ADD BASE RSC /l 0x410 /d "_DEBUG" +# ADD RSC /l 0x410 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wpcap.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\..\lib" + +!ENDIF + +# Begin Target + +# Name "smp_1 - Win32 Release" +# Name "smp_1 - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\SMP_1.c +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/libs/WinPcap-413-173-b4/Examples-remote/smp_1/smp_1.dsw b/libs/WpdPack_4_1_2/Examples-remote/smp_1/smp_1.dsw similarity index 94% rename from libs/WinPcap-413-173-b4/Examples-remote/smp_1/smp_1.dsw rename to libs/WpdPack_4_1_2/Examples-remote/smp_1/smp_1.dsw index cc63468f..36c8e467 100644 --- a/libs/WinPcap-413-173-b4/Examples-remote/smp_1/smp_1.dsw +++ b/libs/WpdPack_4_1_2/Examples-remote/smp_1/smp_1.dsw @@ -1,29 +1,29 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "smp_1"=.\smp_1.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "smp_1"=.\smp_1.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/libs/WinPcap-413-173-b4/Examples-remote/smp_1/smp_1.vcproj b/libs/WpdPack_4_1_2/Examples-remote/smp_1/smp_1.vcproj similarity index 95% rename from libs/WinPcap-413-173-b4/Examples-remote/smp_1/smp_1.vcproj rename to libs/WpdPack_4_1_2/Examples-remote/smp_1/smp_1.vcproj index fc432b04..f789df33 100644 --- a/libs/WinPcap-413-173-b4/Examples-remote/smp_1/smp_1.vcproj +++ b/libs/WpdPack_4_1_2/Examples-remote/smp_1/smp_1.vcproj @@ -1,364 +1,364 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/libs/WinPcap-413-173-b4/Examples-remote/tcptop/tcptop.c b/libs/WpdPack_4_1_2/Examples-remote/tcptop/tcptop.c similarity index 96% rename from libs/WinPcap-413-173-b4/Examples-remote/tcptop/tcptop.c rename to libs/WpdPack_4_1_2/Examples-remote/tcptop/tcptop.c index 42a4b5d9..2d83c3fd 100644 --- a/libs/WinPcap-413-173-b4/Examples-remote/tcptop/tcptop.c +++ b/libs/WpdPack_4_1_2/Examples-remote/tcptop/tcptop.c @@ -1,158 +1,158 @@ -/* - * Copyright (c) 1999 - 2005 NetGroup, Politecnico di Torino (Italy) - * Copyright (c) 2005 - 2006 CACE Technologies, Davis (California) - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the Politecnico di Torino, CACE Technologies - * nor the names of its contributors may be used to endorse or promote - * products derived from this software without specific prior written - * permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ - -#include -#include - -#include - -void usage(); - -void dispatcher_handler(u_char *, const struct pcap_pkthdr *, const u_char *); - - -void main(int argc, char **argv) -{ -pcap_t *fp; -char errbuf[PCAP_ERRBUF_SIZE]; -struct timeval st_ts; -u_int netmask; -struct bpf_program fcode; - - /* Check the validity of the command line */ - if (argc != 2) - { - usage(); - return; - } - - /* Open the output adapter */ - if ( (fp= pcap_open(argv[1], 100, PCAP_OPENFLAG_PROMISCUOUS, 1000, NULL, errbuf) ) == NULL) - { - fprintf(stderr,"\nUnable to open adapter %s.\n", errbuf); - return; - } - - /* Don't care about netmask, it won't be used for this filter */ - netmask=0xffffff; - - //compile the filter - if (pcap_compile(fp, &fcode, "tcp", 1, netmask) <0 ) - { - fprintf(stderr,"\nUnable to compile the packet filter. Check the syntax.\n"); - /* Free the device list */ - return; - } - - //set the filter - if (pcap_setfilter(fp, &fcode)<0) - { - fprintf(stderr,"\nError setting the filter.\n"); - pcap_close(fp); - /* Free the device list */ - return; - } - - /* Put the interface in statstics mode */ - if (pcap_setmode(fp, MODE_STAT)<0) - { - fprintf(stderr,"\nError setting the mode.\n"); - pcap_close(fp); - /* Free the device list */ - return; - } - - - printf("TCP traffic summary:\n"); - - /* Start the main loop */ - pcap_loop(fp, 0, dispatcher_handler, (PUCHAR)&st_ts); - - pcap_close(fp); - return; -} - -void dispatcher_handler(u_char *state, const struct pcap_pkthdr *header, const u_char *pkt_data) -{ - struct timeval *old_ts = (struct timeval *)state; - u_int delay; - LARGE_INTEGER Bps,Pps; - struct tm ltime; - char timestr[16]; - time_t local_tv_sec; - - /* Calculate the delay in microseconds from the last sample. */ - /* This value is obtained from the timestamp that the associated with the sample. */ - delay=(header->ts.tv_sec - old_ts->tv_sec) * 1000000 - old_ts->tv_usec + header->ts.tv_usec; - /* Get the number of Bits per second */ - Bps.QuadPart=(((*(LONGLONG*)(pkt_data + 8)) * 8 * 1000000) / (delay)); - /* ^ ^ - | | - | | - | | - converts bytes in bits -- | - | - delay is expressed in microseconds -- - */ - - /* Get the number of Packets per second */ - Pps.QuadPart=(((*(LONGLONG*)(pkt_data)) * 1000000) / (delay)); - - /* Convert the timestamp to readable format */ - local_tv_sec = header->ts.tv_sec; - localtime_s(<ime, &local_tv_sec); - strftime( timestr, sizeof timestr, "%H:%M:%S", <ime); - - /* Print timestamp*/ - printf("%s ", timestr); - - /* Print the samples */ - printf("BPS=%I64u ", Bps.QuadPart); - printf("PPS=%I64u\n", Pps.QuadPart); - - //store current timestamp - old_ts->tv_sec=header->ts.tv_sec; - old_ts->tv_usec=header->ts.tv_usec; -} - - -void usage() -{ - - printf("\nShows the TCP traffic load, in bits per second and packets per second.\nCopyright (C) 2002 Loris Degioanni.\n"); - printf("\nUsage:\n"); - printf("\t tcptop adapter\n"); - printf("\t You can use \"WinDump -D\" if you don't know the name of your adapters.\n"); - - exit(0); +/* + * Copyright (c) 1999 - 2005 NetGroup, Politecnico di Torino (Italy) + * Copyright (c) 2005 - 2006 CACE Technologies, Davis (California) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Politecnico di Torino, CACE Technologies + * nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written + * permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#include +#include + +#include + +void usage(); + +void dispatcher_handler(u_char *, const struct pcap_pkthdr *, const u_char *); + + +void main(int argc, char **argv) +{ +pcap_t *fp; +char errbuf[PCAP_ERRBUF_SIZE]; +struct timeval st_ts; +u_int netmask; +struct bpf_program fcode; + + /* Check the validity of the command line */ + if (argc != 2) + { + usage(); + return; + } + + /* Open the output adapter */ + if ( (fp= pcap_open(argv[1], 100, PCAP_OPENFLAG_PROMISCUOUS, 1000, NULL, errbuf) ) == NULL) + { + fprintf(stderr,"\nUnable to open adapter %s.\n", errbuf); + return; + } + + /* Don't care about netmask, it won't be used for this filter */ + netmask=0xffffff; + + //compile the filter + if (pcap_compile(fp, &fcode, "tcp", 1, netmask) <0 ) + { + fprintf(stderr,"\nUnable to compile the packet filter. Check the syntax.\n"); + /* Free the device list */ + return; + } + + //set the filter + if (pcap_setfilter(fp, &fcode)<0) + { + fprintf(stderr,"\nError setting the filter.\n"); + pcap_close(fp); + /* Free the device list */ + return; + } + + /* Put the interface in statstics mode */ + if (pcap_setmode(fp, MODE_STAT)<0) + { + fprintf(stderr,"\nError setting the mode.\n"); + pcap_close(fp); + /* Free the device list */ + return; + } + + + printf("TCP traffic summary:\n"); + + /* Start the main loop */ + pcap_loop(fp, 0, dispatcher_handler, (PUCHAR)&st_ts); + + pcap_close(fp); + return; +} + +void dispatcher_handler(u_char *state, const struct pcap_pkthdr *header, const u_char *pkt_data) +{ + struct timeval *old_ts = (struct timeval *)state; + u_int delay; + LARGE_INTEGER Bps,Pps; + struct tm ltime; + char timestr[16]; + time_t local_tv_sec; + + /* Calculate the delay in microseconds from the last sample. */ + /* This value is obtained from the timestamp that the associated with the sample. */ + delay=(header->ts.tv_sec - old_ts->tv_sec) * 1000000 - old_ts->tv_usec + header->ts.tv_usec; + /* Get the number of Bits per second */ + Bps.QuadPart=(((*(LONGLONG*)(pkt_data + 8)) * 8 * 1000000) / (delay)); + /* ^ ^ + | | + | | + | | + converts bytes in bits -- | + | + delay is expressed in microseconds -- + */ + + /* Get the number of Packets per second */ + Pps.QuadPart=(((*(LONGLONG*)(pkt_data)) * 1000000) / (delay)); + + /* Convert the timestamp to readable format */ + local_tv_sec = header->ts.tv_sec; + localtime_s(<ime, &local_tv_sec); + strftime( timestr, sizeof timestr, "%H:%M:%S", <ime); + + /* Print timestamp*/ + printf("%s ", timestr); + + /* Print the samples */ + printf("BPS=%I64u ", Bps.QuadPart); + printf("PPS=%I64u\n", Pps.QuadPart); + + //store current timestamp + old_ts->tv_sec=header->ts.tv_sec; + old_ts->tv_usec=header->ts.tv_usec; +} + + +void usage() +{ + + printf("\nShows the TCP traffic load, in bits per second and packets per second.\nCopyright (C) 2002 Loris Degioanni.\n"); + printf("\nUsage:\n"); + printf("\t tcptop adapter\n"); + printf("\t You can use \"WinDump -D\" if you don't know the name of your adapters.\n"); + + exit(0); } \ No newline at end of file diff --git a/libs/WinPcap-413-173-b4/Examples-remote/tcptop/tcptop.dsp b/libs/WpdPack_4_1_2/Examples-remote/tcptop/tcptop.dsp similarity index 97% rename from libs/WinPcap-413-173-b4/Examples-remote/tcptop/tcptop.dsp rename to libs/WpdPack_4_1_2/Examples-remote/tcptop/tcptop.dsp index ab7ee254..95d9fccb 100644 --- a/libs/WinPcap-413-173-b4/Examples-remote/tcptop/tcptop.dsp +++ b/libs/WpdPack_4_1_2/Examples-remote/tcptop/tcptop.dsp @@ -1,110 +1,110 @@ -# Microsoft Developer Studio Project File - Name="tcptop" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=tcptop - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "tcptop.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "tcptop.mak" CFG="tcptop - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "tcptop - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "tcptop - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "tcptop - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "../" /I "../bpf/" /I "../lbl/" /I "../../Include/" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_UNICODE" /D "WPCAP" /D "HAVE_REMOTE" /YX /FD /c -# ADD BASE RSC /l 0x410 /d "NDEBUG" -# ADD RSC /l 0x410 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "tcptop - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../" /I "../bpf/" /I "../lbl/" /I "../../Include/" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_UNICODE" /D "WPCAP" /D "HAVE_REMOTE" /YX /FD /GZ /c -# ADD BASE RSC /l 0x410 /d "_DEBUG" -# ADD RSC /l 0x410 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "tcptop - Win32 Release" -# Name "tcptop - Win32 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\tcptop.c -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# Begin Source File - -SOURCE=..\..\include\pcap.h -# End Source File -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# Begin Source File - -SOURCE=..\..\lib\Wpcap.lib -# End Source File -# End Target -# End Project +# Microsoft Developer Studio Project File - Name="tcptop" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Console Application" 0x0103 + +CFG=tcptop - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "tcptop.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "tcptop.mak" CFG="tcptop - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "tcptop - Win32 Release" (based on "Win32 (x86) Console Application") +!MESSAGE "tcptop - Win32 Debug" (based on "Win32 (x86) Console Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "tcptop - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /I "../" /I "../bpf/" /I "../lbl/" /I "../../Include/" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_UNICODE" /D "WPCAP" /D "HAVE_REMOTE" /YX /FD /c +# ADD BASE RSC /l 0x410 /d "NDEBUG" +# ADD RSC /l 0x410 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib /nologo /subsystem:console /machine:I386 + +!ELSEIF "$(CFG)" == "tcptop - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c +# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../" /I "../bpf/" /I "../lbl/" /I "../../Include/" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_UNICODE" /D "WPCAP" /D "HAVE_REMOTE" /YX /FD /GZ /c +# ADD BASE RSC /l 0x410 /d "_DEBUG" +# ADD RSC /l 0x410 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept + +!ENDIF + +# Begin Target + +# Name "tcptop - Win32 Release" +# Name "tcptop - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\tcptop.c +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# Begin Source File + +SOURCE=..\..\include\pcap.h +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# End Group +# Begin Source File + +SOURCE=..\..\lib\Wpcap.lib +# End Source File +# End Target +# End Project diff --git a/libs/WinPcap-413-173-b4/Examples-remote/tcptop/tcptop.dsw b/libs/WpdPack_4_1_2/Examples-remote/tcptop/tcptop.dsw similarity index 94% rename from libs/WinPcap-413-173-b4/Examples-remote/tcptop/tcptop.dsw rename to libs/WpdPack_4_1_2/Examples-remote/tcptop/tcptop.dsw index 4abe52e4..d680f734 100644 --- a/libs/WinPcap-413-173-b4/Examples-remote/tcptop/tcptop.dsw +++ b/libs/WpdPack_4_1_2/Examples-remote/tcptop/tcptop.dsw @@ -1,29 +1,29 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "tcptop"=.\tcptop.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "tcptop"=.\tcptop.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/libs/WinPcap-413-173-b4/Examples-remote/tcptop/tcptop.vcproj b/libs/WpdPack_4_1_2/Examples-remote/tcptop/tcptop.vcproj similarity index 95% rename from libs/WinPcap-413-173-b4/Examples-remote/tcptop/tcptop.vcproj rename to libs/WpdPack_4_1_2/Examples-remote/tcptop/tcptop.vcproj index 06f88c54..5143b4a2 100644 --- a/libs/WinPcap-413-173-b4/Examples-remote/tcptop/tcptop.vcproj +++ b/libs/WpdPack_4_1_2/Examples-remote/tcptop/tcptop.vcproj @@ -1,364 +1,364 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/libs/WpdPack_4_1_2/Include/Packet32.h b/libs/WpdPack_4_1_2/Include/Packet32.h new file mode 100644 index 00000000..64be055d --- /dev/null +++ b/libs/WpdPack_4_1_2/Include/Packet32.h @@ -0,0 +1,359 @@ +/* + * Copyright (c) 1999 - 2005 NetGroup, Politecnico di Torino (Italy) + * Copyright (c) 2005 - 2007 CACE Technologies, Davis (California) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Politecnico di Torino, CACE Technologies + * nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written + * permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +/** @ingroup packetapi + * @{ + */ + +/** @defgroup packet32h Packet.dll definitions and data structures + * Packet32.h contains the data structures and the definitions used by packet.dll. + * The file is used both by the Win9x and the WinNTx versions of packet.dll, and can be included + * by the applications that use the functions of this library + * @{ + */ + +#ifndef __PACKET32 +#define __PACKET32 + +#include + +#ifdef HAVE_AIRPCAP_API +#include +#else +#if !defined(AIRPCAP_HANDLE__EAE405F5_0171_9592_B3C2_C19EC426AD34__DEFINED_) +#define AIRPCAP_HANDLE__EAE405F5_0171_9592_B3C2_C19EC426AD34__DEFINED_ +typedef struct _AirpcapHandle *PAirpcapHandle; +#endif /* AIRPCAP_HANDLE__EAE405F5_0171_9592_B3C2_C19EC426AD34__DEFINED_ */ +#endif /* HAVE_AIRPCAP_API */ + +#ifdef HAVE_DAG_API +#include +#endif /* HAVE_DAG_API */ + +// Working modes +#define PACKET_MODE_CAPT 0x0 ///< Capture mode +#define PACKET_MODE_STAT 0x1 ///< Statistical mode +#define PACKET_MODE_MON 0x2 ///< Monitoring mode +#define PACKET_MODE_DUMP 0x10 ///< Dump mode +#define PACKET_MODE_STAT_DUMP MODE_DUMP | MODE_STAT ///< Statistical dump Mode + + +/// Alignment macro. Defines the alignment size. +#define Packet_ALIGNMENT sizeof(int) +/// Alignment macro. Rounds up to the next even multiple of Packet_ALIGNMENT. +#define Packet_WORDALIGN(x) (((x)+(Packet_ALIGNMENT-1))&~(Packet_ALIGNMENT-1)) + +#define NdisMediumNull -1 ///< Custom linktype: NDIS doesn't provide an equivalent +#define NdisMediumCHDLC -2 ///< Custom linktype: NDIS doesn't provide an equivalent +#define NdisMediumPPPSerial -3 ///< Custom linktype: NDIS doesn't provide an equivalent +#define NdisMediumBare80211 -4 ///< Custom linktype: NDIS doesn't provide an equivalent +#define NdisMediumRadio80211 -5 ///< Custom linktype: NDIS doesn't provide an equivalent +#define NdisMediumPpi -6 ///< Custom linktype: NDIS doesn't provide an equivalent + +// Loopback behaviour definitions +#define NPF_DISABLE_LOOPBACK 1 ///< Drop the packets sent by the NPF driver +#define NPF_ENABLE_LOOPBACK 2 ///< Capture the packets sent by the NPF driver + +/*! + \brief Network type structure. + + This structure is used by the PacketGetNetType() function to return information on the current adapter's type and speed. +*/ +typedef struct NetType +{ + UINT LinkType; ///< The MAC of the current network adapter (see function PacketGetNetType() for more information) + ULONGLONG LinkSpeed; ///< The speed of the network in bits per second +}NetType; + + +//some definitions stolen from libpcap + +#ifndef BPF_MAJOR_VERSION + +/*! + \brief A BPF pseudo-assembly program. + + The program will be injected in the kernel by the PacketSetBPF() function and applied to every incoming packet. +*/ +struct bpf_program +{ + UINT bf_len; ///< Indicates the number of instructions of the program, i.e. the number of struct bpf_insn that will follow. + struct bpf_insn *bf_insns; ///< A pointer to the first instruction of the program. +}; + +/*! + \brief A single BPF pseudo-instruction. + + bpf_insn contains a single instruction for the BPF register-machine. It is used to send a filter program to the driver. +*/ +struct bpf_insn +{ + USHORT code; ///< Instruction type and addressing mode. + UCHAR jt; ///< Jump if true + UCHAR jf; ///< Jump if false + int k; ///< Generic field used for various purposes. +}; + +/*! + \brief Structure that contains a couple of statistics values on the current capture. + + It is used by packet.dll to return statistics about a capture session. +*/ +struct bpf_stat +{ + UINT bs_recv; ///< Number of packets that the driver received from the network adapter + ///< from the beginning of the current capture. This value includes the packets + ///< lost by the driver. + UINT bs_drop; ///< number of packets that the driver lost from the beginning of a capture. + ///< Basically, a packet is lost when the the buffer of the driver is full. + ///< In this situation the packet cannot be stored and the driver rejects it. + UINT ps_ifdrop; ///< drops by interface. XXX not yet supported + UINT bs_capt; ///< number of packets that pass the filter, find place in the kernel buffer and + ///< thus reach the application. +}; + +/*! + \brief Packet header. + + This structure defines the header associated with every packet delivered to the application. +*/ +struct bpf_hdr +{ + struct timeval bh_tstamp; ///< The timestamp associated with the captured packet. + ///< It is stored in a TimeVal structure. + UINT bh_caplen; ///< Length of captured portion. The captured portion can be different + ///< from the original packet, because it is possible (with a proper filter) + ///< to instruct the driver to capture only a portion of the packets. + UINT bh_datalen; ///< Original length of packet + USHORT bh_hdrlen; ///< Length of bpf header (this struct plus alignment padding). In some cases, + ///< a padding could be added between the end of this structure and the packet + ///< data for performance reasons. This filed can be used to retrieve the actual data + ///< of the packet. +}; + +/*! + \brief Dump packet header. + + This structure defines the header associated with the packets in a buffer to be used with PacketSendPackets(). + It is simpler than the bpf_hdr, because it corresponds to the header associated by WinPcap and libpcap to a + packet in a dump file. This makes straightforward sending WinPcap dump files to the network. +*/ +struct dump_bpf_hdr{ + struct timeval ts; ///< Time stamp of the packet + UINT caplen; ///< Length of captured portion. The captured portion can smaller than the + ///< the original packet, because it is possible (with a proper filter) to + ///< instruct the driver to capture only a portion of the packets. + UINT len; ///< Length of the original packet (off wire). +}; + + +#endif + +struct bpf_stat; + +#define DOSNAMEPREFIX TEXT("Packet_") ///< Prefix added to the adapters device names to create the WinPcap devices +#define MAX_LINK_NAME_LENGTH 64 //< Maximum length of the devices symbolic links +#define NMAX_PACKET 65535 + +/*! + \brief Addresses of a network adapter. + + This structure is used by the PacketGetNetInfoEx() function to return the IP addresses associated with + an adapter. +*/ +typedef struct npf_if_addr { + struct sockaddr_storage IPAddress; ///< IP address. + struct sockaddr_storage SubnetMask; ///< Netmask for that address. + struct sockaddr_storage Broadcast; ///< Broadcast address. +}npf_if_addr; + + +#define ADAPTER_NAME_LENGTH 256 + 12 ///< Maximum length for the name of an adapter. The value is the same used by the IP Helper API. +#define ADAPTER_DESC_LENGTH 128 ///< Maximum length for the description of an adapter. The value is the same used by the IP Helper API. +#define MAX_MAC_ADDR_LENGTH 8 ///< Maximum length for the link layer address of an adapter. The value is the same used by the IP Helper API. +#define MAX_NETWORK_ADDRESSES 16 ///< Maximum length for the link layer address of an adapter. The value is the same used by the IP Helper API. + + +typedef struct WAN_ADAPTER_INT WAN_ADAPTER; ///< Describes an opened wan (dialup, VPN...) network adapter using the NetMon API +typedef WAN_ADAPTER *PWAN_ADAPTER; ///< Describes an opened wan (dialup, VPN...) network adapter using the NetMon API + +#define INFO_FLAG_NDIS_ADAPTER 0 ///< Flag for ADAPTER_INFO: this is a traditional ndis adapter +#define INFO_FLAG_NDISWAN_ADAPTER 1 ///< Flag for ADAPTER_INFO: this is a NdisWan adapter, and it's managed by WANPACKET +#define INFO_FLAG_DAG_CARD 2 ///< Flag for ADAPTER_INFO: this is a DAG card +#define INFO_FLAG_DAG_FILE 6 ///< Flag for ADAPTER_INFO: this is a DAG file +#define INFO_FLAG_DONT_EXPORT 8 ///< Flag for ADAPTER_INFO: when this flag is set, the adapter will not be listed or openend by winpcap. This allows to prevent exporting broken network adapters, like for example FireWire ones. +#define INFO_FLAG_AIRPCAP_CARD 16 ///< Flag for ADAPTER_INFO: this is an airpcap card +#define INFO_FLAG_NPFIM_DEVICE 32 + +/*! + \brief Describes an opened network adapter. + + This structure is the most important for the functioning of packet.dll, but the great part of its fields + should be ignored by the user, since the library offers functions that avoid to cope with low-level parameters +*/ +typedef struct _ADAPTER { + HANDLE hFile; ///< \internal Handle to an open instance of the NPF driver. + CHAR SymbolicLink[MAX_LINK_NAME_LENGTH]; ///< \internal A string containing the name of the network adapter currently opened. + int NumWrites; ///< \internal Number of times a packets written on this adapter will be repeated + ///< on the wire. + HANDLE ReadEvent; ///< A notification event associated with the read calls on the adapter. + ///< It can be passed to standard Win32 functions (like WaitForSingleObject + ///< or WaitForMultipleObjects) to wait until the driver's buffer contains some + ///< data. It is particularly useful in GUI applications that need to wait + ///< concurrently on several events. In Windows NT/2000 the PacketSetMinToCopy() + ///< function can be used to define the minimum amount of data in the kernel buffer + ///< that will cause the event to be signalled. + + UINT ReadTimeOut; ///< \internal The amount of time after which a read on the driver will be released and + ///< ReadEvent will be signaled, also if no packets were captured + CHAR Name[ADAPTER_NAME_LENGTH]; + PWAN_ADAPTER pWanAdapter; + UINT Flags; ///< Adapter's flags. Tell if this adapter must be treated in a different way, using the Netmon API or the dagc API. + +#ifdef HAVE_AIRPCAP_API + PAirpcapHandle AirpcapAd; +#endif // HAVE_AIRPCAP_API + +#ifdef HAVE_NPFIM_API + void* NpfImHandle; +#endif // HAVE_NPFIM_API + +#ifdef HAVE_DAG_API + dagc_t *pDagCard; ///< Pointer to the dagc API adapter descriptor for this adapter + PCHAR DagBuffer; ///< Pointer to the buffer with the packets that is received from the DAG card + struct timeval DagReadTimeout; ///< Read timeout. The dagc API requires a timeval structure + unsigned DagFcsLen; ///< Length of the frame check sequence attached to any packet by the card. Obtained from the registry + DWORD DagFastProcess; ///< True if the user requests fast capture processing on this card. Higher level applications can use this value to provide a faster but possibly unprecise capture (for example, libpcap doesn't convert the timestamps). +#endif // HAVE_DAG_API +} ADAPTER, *LPADAPTER; + +/*! + \brief Structure that contains a group of packets coming from the driver. + + This structure defines the header associated with every packet delivered to the application. +*/ +typedef struct _PACKET { + HANDLE hEvent; ///< \deprecated Still present for compatibility with old applications. + OVERLAPPED OverLapped; ///< \deprecated Still present for compatibility with old applications. + PVOID Buffer; ///< Buffer with containing the packets. See the PacketReceivePacket() for + ///< details about the organization of the data in this buffer + UINT Length; ///< Length of the buffer + DWORD ulBytesReceived; ///< Number of valid bytes present in the buffer, i.e. amount of data + ///< received by the last call to PacketReceivePacket() + BOOLEAN bIoComplete; ///< \deprecated Still present for compatibility with old applications. +} PACKET, *LPPACKET; + +/*! + \brief Structure containing an OID request. + + It is used by the PacketRequest() function to send an OID to the interface card driver. + It can be used, for example, to retrieve the status of the error counters on the adapter, its MAC address, + the list of the multicast groups defined on it, and so on. +*/ +struct _PACKET_OID_DATA { + ULONG Oid; ///< OID code. See the Microsoft DDK documentation or the file ntddndis.h + ///< for a complete list of valid codes. + ULONG Length; ///< Length of the data field + UCHAR Data[1]; ///< variable-lenght field that contains the information passed to or received + ///< from the adapter. +}; +typedef struct _PACKET_OID_DATA PACKET_OID_DATA, *PPACKET_OID_DATA; + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @} + */ + +/* +BOOLEAN QueryWinPcapRegistryStringA(CHAR *SubKeyName, + CHAR *Value, + UINT *pValueLen, + CHAR *DefaultVal); + +BOOLEAN QueryWinPcapRegistryStringW(WCHAR *SubKeyName, + WCHAR *Value, + UINT *pValueLen, + WCHAR *DefaultVal); +*/ + +//--------------------------------------------------------------------------- +// EXPORTED FUNCTIONS +//--------------------------------------------------------------------------- + +PCHAR PacketGetVersion(); +PCHAR PacketGetDriverVersion(); +BOOLEAN PacketSetMinToCopy(LPADAPTER AdapterObject,int nbytes); +BOOLEAN PacketSetNumWrites(LPADAPTER AdapterObject,int nwrites); +BOOLEAN PacketSetMode(LPADAPTER AdapterObject,int mode); +BOOLEAN PacketSetReadTimeout(LPADAPTER AdapterObject,int timeout); +BOOLEAN PacketSetBpf(LPADAPTER AdapterObject,struct bpf_program *fp); +BOOLEAN PacketSetLoopbackBehavior(LPADAPTER AdapterObject, UINT LoopbackBehavior); +INT PacketSetSnapLen(LPADAPTER AdapterObject,int snaplen); +BOOLEAN PacketGetStats(LPADAPTER AdapterObject,struct bpf_stat *s); +BOOLEAN PacketGetStatsEx(LPADAPTER AdapterObject,struct bpf_stat *s); +BOOLEAN PacketSetBuff(LPADAPTER AdapterObject,int dim); +BOOLEAN PacketGetNetType (LPADAPTER AdapterObject,NetType *type); +LPADAPTER PacketOpenAdapter(PCHAR AdapterName); +BOOLEAN PacketSendPacket(LPADAPTER AdapterObject,LPPACKET pPacket,BOOLEAN Sync); +INT PacketSendPackets(LPADAPTER AdapterObject,PVOID PacketBuff,ULONG Size, BOOLEAN Sync); +LPPACKET PacketAllocatePacket(void); +VOID PacketInitPacket(LPPACKET lpPacket,PVOID Buffer,UINT Length); +VOID PacketFreePacket(LPPACKET lpPacket); +BOOLEAN PacketReceivePacket(LPADAPTER AdapterObject,LPPACKET lpPacket,BOOLEAN Sync); +BOOLEAN PacketSetHwFilter(LPADAPTER AdapterObject,ULONG Filter); +BOOLEAN PacketGetAdapterNames(PTSTR pStr,PULONG BufferSize); +BOOLEAN PacketGetNetInfoEx(PCHAR AdapterName, npf_if_addr* buffer, PLONG NEntries); +BOOLEAN PacketRequest(LPADAPTER AdapterObject,BOOLEAN Set,PPACKET_OID_DATA OidData); +HANDLE PacketGetReadEvent(LPADAPTER AdapterObject); +BOOLEAN PacketSetDumpName(LPADAPTER AdapterObject, void *name, int len); +BOOLEAN PacketSetDumpLimits(LPADAPTER AdapterObject, UINT maxfilesize, UINT maxnpacks); +BOOLEAN PacketIsDumpEnded(LPADAPTER AdapterObject, BOOLEAN sync); +BOOL PacketStopDriver(); +VOID PacketCloseAdapter(LPADAPTER lpAdapter); +BOOLEAN PacketStartOem(PCHAR errorString, UINT errorStringLength); +BOOLEAN PacketStartOemEx(PCHAR errorString, UINT errorStringLength, ULONG flags); +PAirpcapHandle PacketGetAirPcapHandle(LPADAPTER AdapterObject); + +// +// Used by PacketStartOemEx +// +#define PACKET_START_OEM_NO_NETMON 0x00000001 + +#ifdef __cplusplus +} +#endif + +#endif //__PACKET32 diff --git a/libs/WinPcap-413-173-b4/Include/Win32-Extensions.h b/libs/WpdPack_4_1_2/Include/Win32-Extensions.h similarity index 94% rename from libs/WinPcap-413-173-b4/Include/Win32-Extensions.h rename to libs/WpdPack_4_1_2/Include/Win32-Extensions.h index b3c960e7..ad3be25c 100644 --- a/libs/WinPcap-413-173-b4/Include/Win32-Extensions.h +++ b/libs/WpdPack_4_1_2/Include/Win32-Extensions.h @@ -1,113 +1,113 @@ -/* - * Copyright (c) 1999 - 2005 NetGroup, Politecnico di Torino (Italy) - * Copyright (c) 2005 - 2006 CACE Technologies, Davis (California) - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the Politecnico di Torino, CACE Technologies - * nor the names of its contributors may be used to endorse or promote - * products derived from this software without specific prior written - * permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ - -#ifndef __WIN32_EXTENSIONS_H__ -#define __WIN32_EXTENSIONS_H__ - -#ifdef __cplusplus -extern "C" { -#endif - -/* Definitions */ - -/*! - \brief A queue of raw packets that will be sent to the network with pcap_sendqueue_transmit(). -*/ -struct pcap_send_queue -{ - u_int maxlen; ///< Maximum size of the the queue, in bytes. This variable contains the size of the buffer field. - u_int len; ///< Current size of the queue, in bytes. - char *buffer; ///< Buffer containing the packets to be sent. -}; - -typedef struct pcap_send_queue pcap_send_queue; - -/*! - \brief This typedef is a support for the pcap_get_airpcap_handle() function -*/ -#if !defined(AIRPCAP_HANDLE__EAE405F5_0171_9592_B3C2_C19EC426AD34__DEFINED_) -#define AIRPCAP_HANDLE__EAE405F5_0171_9592_B3C2_C19EC426AD34__DEFINED_ -typedef struct _AirpcapHandle *PAirpcapHandle; -#endif - -#define BPF_MEM_EX_IMM 0xc0 -#define BPF_MEM_EX_IND 0xe0 - -/*used for ST*/ -#define BPF_MEM_EX 0xc0 -#define BPF_TME 0x08 - -#define BPF_LOOKUP 0x90 -#define BPF_EXECUTE 0xa0 -#define BPF_INIT 0xb0 -#define BPF_VALIDATE 0xc0 -#define BPF_SET_ACTIVE 0xd0 -#define BPF_RESET 0xe0 -#define BPF_SET_MEMORY 0x80 -#define BPF_GET_REGISTER_VALUE 0x70 -#define BPF_SET_REGISTER_VALUE 0x60 -#define BPF_SET_WORKING 0x50 -#define BPF_SET_ACTIVE_READ 0x40 -#define BPF_SET_AUTODELETION 0x30 -#define BPF_SEPARATION 0xff - -/* Prototypes */ -pcap_send_queue* pcap_sendqueue_alloc(u_int memsize); - -void pcap_sendqueue_destroy(pcap_send_queue* queue); - -int pcap_sendqueue_queue(pcap_send_queue* queue, const struct pcap_pkthdr *pkt_header, const u_char *pkt_data); - -u_int pcap_sendqueue_transmit(pcap_t *p, pcap_send_queue* queue, int sync); - -HANDLE pcap_getevent(pcap_t *p); - -struct pcap_stat *pcap_stats_ex(pcap_t *p, int *pcap_stat_size); - -int pcap_setuserbuffer(pcap_t *p, int size); - -int pcap_live_dump(pcap_t *p, char *filename, int maxsize, int maxpacks); - -int pcap_live_dump_ended(pcap_t *p, int sync); - -int pcap_offline_filter(const struct bpf_program *prog, const struct pcap_pkthdr *header, const u_char *pkt_data); - -int pcap_start_oem(char* err_str, int flags); - -PAirpcapHandle pcap_get_airpcap_handle(pcap_t *p); - -#ifdef __cplusplus -} -#endif - -#endif //__WIN32_EXTENSIONS_H__ +/* + * Copyright (c) 1999 - 2005 NetGroup, Politecnico di Torino (Italy) + * Copyright (c) 2005 - 2006 CACE Technologies, Davis (California) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Politecnico di Torino, CACE Technologies + * nor the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written + * permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#ifndef __WIN32_EXTENSIONS_H__ +#define __WIN32_EXTENSIONS_H__ + +#ifdef __cplusplus +extern "C" { +#endif + +/* Definitions */ + +/*! + \brief A queue of raw packets that will be sent to the network with pcap_sendqueue_transmit(). +*/ +struct pcap_send_queue +{ + u_int maxlen; ///< Maximum size of the the queue, in bytes. This variable contains the size of the buffer field. + u_int len; ///< Current size of the queue, in bytes. + char *buffer; ///< Buffer containing the packets to be sent. +}; + +typedef struct pcap_send_queue pcap_send_queue; + +/*! + \brief This typedef is a support for the pcap_get_airpcap_handle() function +*/ +#if !defined(AIRPCAP_HANDLE__EAE405F5_0171_9592_B3C2_C19EC426AD34__DEFINED_) +#define AIRPCAP_HANDLE__EAE405F5_0171_9592_B3C2_C19EC426AD34__DEFINED_ +typedef struct _AirpcapHandle *PAirpcapHandle; +#endif + +#define BPF_MEM_EX_IMM 0xc0 +#define BPF_MEM_EX_IND 0xe0 + +/*used for ST*/ +#define BPF_MEM_EX 0xc0 +#define BPF_TME 0x08 + +#define BPF_LOOKUP 0x90 +#define BPF_EXECUTE 0xa0 +#define BPF_INIT 0xb0 +#define BPF_VALIDATE 0xc0 +#define BPF_SET_ACTIVE 0xd0 +#define BPF_RESET 0xe0 +#define BPF_SET_MEMORY 0x80 +#define BPF_GET_REGISTER_VALUE 0x70 +#define BPF_SET_REGISTER_VALUE 0x60 +#define BPF_SET_WORKING 0x50 +#define BPF_SET_ACTIVE_READ 0x40 +#define BPF_SET_AUTODELETION 0x30 +#define BPF_SEPARATION 0xff + +/* Prototypes */ +pcap_send_queue* pcap_sendqueue_alloc(u_int memsize); + +void pcap_sendqueue_destroy(pcap_send_queue* queue); + +int pcap_sendqueue_queue(pcap_send_queue* queue, const struct pcap_pkthdr *pkt_header, const u_char *pkt_data); + +u_int pcap_sendqueue_transmit(pcap_t *p, pcap_send_queue* queue, int sync); + +HANDLE pcap_getevent(pcap_t *p); + +struct pcap_stat *pcap_stats_ex(pcap_t *p, int *pcap_stat_size); + +int pcap_setuserbuffer(pcap_t *p, int size); + +int pcap_live_dump(pcap_t *p, char *filename, int maxsize, int maxpacks); + +int pcap_live_dump_ended(pcap_t *p, int sync); + +int pcap_offline_filter(struct bpf_program *prog, const struct pcap_pkthdr *header, const u_char *pkt_data); + +int pcap_start_oem(char* err_str, int flags); + +PAirpcapHandle pcap_get_airpcap_handle(pcap_t *p); + +#ifdef __cplusplus +} +#endif + +#endif //__WIN32_EXTENSIONS_H__ diff --git a/libs/WinPcap-413-173-b4/Include/bittypes.h b/libs/WpdPack_4_1_2/Include/bittypes.h similarity index 69% rename from libs/WinPcap-413-173-b4/Include/bittypes.h rename to libs/WpdPack_4_1_2/Include/bittypes.h index 95aa9faa..558a0b5c 100644 --- a/libs/WinPcap-413-173-b4/Include/bittypes.h +++ b/libs/WpdPack_4_1_2/Include/bittypes.h @@ -1,7 +1,7 @@ /* * Copyright (C) 1999 WIDE Project. * All rights reserved. - * + * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: @@ -13,7 +13,7 @@ * 3. Neither the name of the project nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. - * + * * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -30,28 +30,76 @@ #define _BITTYPES_H #ifndef HAVE_U_INT8_T + +#if SIZEOF_CHAR == 1 typedef unsigned char u_int8_t; typedef signed char int8_t; +#elif SIZEOF_INT == 1 +typedef unsigned int u_int8_t; +typedef signed int int8_t; +#else /* XXX */ +#error "there's no appropriate type for u_int8_t" +#endif +#define HAVE_U_INT8_T 1 +#define HAVE_INT8_T 1 + #endif /* HAVE_U_INT8_T */ -#ifndef HAVE_U_INT16_T +#ifndef HAVE_U_INT16_T + +#if SIZEOF_SHORT == 2 typedef unsigned short u_int16_t; typedef signed short int16_t; +#elif SIZEOF_INT == 2 +typedef unsigned int u_int16_t; +typedef signed int int16_t; +#elif SIZEOF_CHAR == 2 +typedef unsigned char u_int16_t; +typedef signed char int16_t; +#else /* XXX */ +#error "there's no appropriate type for u_int16_t" +#endif +#define HAVE_U_INT16_T 1 +#define HAVE_INT16_T 1 + #endif /* HAVE_U_INT16_T */ #ifndef HAVE_U_INT32_T + +#if SIZEOF_INT == 4 typedef unsigned int u_int32_t; typedef signed int int32_t; +#elif SIZEOF_LONG == 4 +typedef unsigned long u_int32_t; +typedef signed long int32_t; +#elif SIZEOF_SHORT == 4 +typedef unsigned short u_int32_t; +typedef signed short int32_t; +#else /* XXX */ +#error "there's no appropriate type for u_int32_t" +#endif +#define HAVE_U_INT32_T 1 +#define HAVE_INT32_T 1 + #endif /* HAVE_U_INT32_T */ #ifndef HAVE_U_INT64_T -#ifdef _MSC_EXTENSIONS -typedef unsigned _int64 u_int64_t; -typedef _int64 int64_t; -#else /* _MSC_EXTENSIONS */ +#if SIZEOF_LONG_LONG == 8 typedef unsigned long long u_int64_t; typedef long long int64_t; -#endif /* _MSC_EXTENSIONS */ +#elif defined(_MSC_EXTENSIONS) +typedef unsigned _int64 u_int64_t; +typedef _int64 int64_t; +#elif SIZEOF_INT == 8 +typedef unsigned int u_int64_t; +#elif SIZEOF_LONG == 8 +typedef unsigned long u_int64_t; +#elif SIZEOF_SHORT == 8 +typedef unsigned short u_int64_t; +#else /* XXX */ +#error "there's no appropriate type for u_int64_t" +#endif + #endif /* HAVE_U_INT64_T */ #ifndef PRId64 diff --git a/libs/WinPcap-413-173-b4/Include/ip6_misc.h b/libs/WpdPack_4_1_2/Include/ip6_misc.h similarity index 97% rename from libs/WinPcap-413-173-b4/Include/ip6_misc.h rename to libs/WpdPack_4_1_2/Include/ip6_misc.h index 0b578c33..562fa618 100644 --- a/libs/WinPcap-413-173-b4/Include/ip6_misc.h +++ b/libs/WpdPack_4_1_2/Include/ip6_misc.h @@ -17,6 +17,8 @@ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + * + * @(#) $Header: /tcpdump/master/libpcap/Win32/Include/ip6_misc.h,v 1.5 2006-01-22 18:02:18 gianluca Exp $ (LBL) */ /* diff --git a/libs/WinPcap-413-173-b4/Include/pcap-bpf.h b/libs/WpdPack_4_1_2/Include/pcap-bpf.h similarity index 95% rename from libs/WinPcap-413-173-b4/Include/pcap-bpf.h rename to libs/WpdPack_4_1_2/Include/pcap-bpf.h index ebb64c3f..5fe129db 100644 --- a/libs/WinPcap-413-173-b4/Include/pcap-bpf.h +++ b/libs/WpdPack_4_1_2/Include/pcap-bpf.h @@ -4,7 +4,7 @@ * * This code is derived from the Stanford/CMU enet packet filter, * (net/enet.c) distributed as part of 4.3BSD, and code contributed - * to Berkeley by Steven McCanne and Van Jacobson both of Lawrence + * to Berkeley by Steven McCanne and Van Jacobson both of Lawrence * Berkeley Laboratory. * * Redistribution and use in source and binary forms, with or without @@ -34,6 +34,8 @@ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. + * + * @(#) $Header: /tcpdump/master/libpcap/pcap-bpf.h,v 1.50 2007/04/01 21:43:55 guy Exp $ (LBL) */ /* diff --git a/libs/WinPcap-413-173-b4/Include/pcap-namedb.h b/libs/WpdPack_4_1_2/Include/pcap-namedb.h similarity index 95% rename from libs/WinPcap-413-173-b4/Include/pcap-namedb.h rename to libs/WpdPack_4_1_2/Include/pcap-namedb.h index d5908c92..80a2f004 100644 --- a/libs/WinPcap-413-173-b4/Include/pcap-namedb.h +++ b/libs/WpdPack_4_1_2/Include/pcap-namedb.h @@ -29,6 +29,8 @@ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. + * + * @(#) $Header: /tcpdump/master/libpcap/pcap-namedb.h,v 1.13 2006/10/04 18:13:32 guy Exp $ (LBL) */ /* diff --git a/libs/WinPcap-413-173-b4/Include/pcap-stdinc.h b/libs/WpdPack_4_1_2/Include/pcap-stdinc.h similarity index 71% rename from libs/WinPcap-413-173-b4/Include/pcap-stdinc.h rename to libs/WpdPack_4_1_2/Include/pcap-stdinc.h index 85da39e1..41760417 100644 --- a/libs/WinPcap-413-173-b4/Include/pcap-stdinc.h +++ b/libs/WpdPack_4_1_2/Include/pcap-stdinc.h @@ -27,51 +27,67 @@ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * @(#) $Header: /tcpdump/master/libpcap/pcap-stdinc.h,v 1.10.2.1 2008-10-06 15:38:39 gianluca Exp $ (LBL) */ -#ifndef pcap_stdinc_h -#define pcap_stdinc_h + +#define SIZEOF_CHAR 1 +#define SIZEOF_SHORT 2 +#define SIZEOF_INT 4 +#ifndef _MSC_EXTENSIONS +#define SIZEOF_LONG_LONG 8 +#endif /* - * Avoids a compiler warning in case this was already defined + * Avoids a compiler warning in case this was already defined * (someone defined _WINSOCKAPI_ when including 'windows.h', in order * to prevent it from including 'winsock.h') */ #ifdef _WINSOCKAPI_ #undef _WINSOCKAPI_ #endif - #include + #include + +#include "bittypes.h" #include #include -#include "bittypes.h" +#ifndef __MINGW32__ #include "IP6_misc.h" +#endif #define caddr_t char* -#define inline __inline +#if _MSC_VER < 1500 +#define snprintf _snprintf +#define vsnprintf _vsnprintf +#define strdup _strdup +#endif + +#define inline __inline #ifdef __MINGW32__ - #include +#include +#else /*__MINGW32__*/ +/* MSVC compiler */ +#ifndef _UINTPTR_T_DEFINED +#ifdef _WIN64 +typedef unsigned __int64 uintptr_t; +#else +typedef _W64 unsigned int uintptr_t; +#endif +#define _UINTPTR_T_DEFINED +#endif + +#ifndef _INTPTR_T_DEFINED +#ifdef _WIN64 +typedef __int64 intptr_t; #else - #ifndef _UINTPTR_T_DEFINED - #ifdef _WIN64 - typedef unsigned __int64 uintptr_t; - #else - typedef _W64 unsigned int uintptr_t; - #endif - #define _UINTPTR_T_DEFINED - #endif +typedef _W64 int intptr_t; +#endif +#define _INTPTR_T_DEFINED +#endif - #ifndef _INTPTR_T_DEFINED - #ifdef _WIN64 - typedef __int64 intptr_t; - #else - typedef _W64 int intptr_t; - #endif - #define _INTPTR_T_DEFINED - #endif #endif /*__MINGW32__*/ - -#endif /* pcap_stdinc_h */ diff --git a/libs/WinPcap-413-173-b4/Include/pcap.h b/libs/WpdPack_4_1_2/Include/pcap.h similarity index 95% rename from libs/WinPcap-413-173-b4/Include/pcap.h rename to libs/WpdPack_4_1_2/Include/pcap.h index 174e32d2..935f9494 100644 --- a/libs/WinPcap-413-173-b4/Include/pcap.h +++ b/libs/WpdPack_4_1_2/Include/pcap.h @@ -29,6 +29,8 @@ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. + * + * @(#) $Header: /tcpdump/master/libpcap/pcap.h,v 1.59 2006/10/04 18:09:22 guy Exp $ (LBL) */ /* diff --git a/libs/WinPcap-413-173-b4/Include/pcap/bluetooth.h b/libs/WpdPack_4_1_2/Include/pcap/bluetooth.h similarity index 85% rename from libs/WinPcap-413-173-b4/Include/pcap/bluetooth.h rename to libs/WpdPack_4_1_2/Include/pcap/bluetooth.h index 01bd5a2e..7bf65df0 100644 --- a/libs/WinPcap-413-173-b4/Include/pcap/bluetooth.h +++ b/libs/WpdPack_4_1_2/Include/pcap/bluetooth.h @@ -11,8 +11,8 @@ * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote - * products derived from this software without specific prior written + * 3. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior written * permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS @@ -29,27 +29,20 @@ * * bluetooth data struct * By Paolo Abeni + * + * @(#) $Header: /tcpdump/master/libpcap/pcap/bluetooth.h,v 1.1 2007/09/22 02:10:17 guy Exp $ */ - + #ifndef _PCAP_BLUETOOTH_STRUCTS_H__ #define _PCAP_BLUETOOTH_STRUCTS_H__ /* - * Header prepended libpcap to each bluetooth h4 frame, + * Header prepended libpcap to each bluetooth h:4 frame. * fields are in network byte order */ typedef struct _pcap_bluetooth_h4_header { u_int32_t direction; /* if first bit is set direction is incoming */ } pcap_bluetooth_h4_header; -/* - * Header prepended libpcap to each bluetooth linux monitor frame, - * fields are in network byte order - */ -typedef struct _pcap_bluetooth_linux_monitor_header { - u_int16_t adapter_id; - u_int16_t opcode; -} pcap_bluetooth_linux_monitor_header; - #endif diff --git a/libs/WinPcap-413-173-b4/Include/pcap/bpf.h b/libs/WpdPack_4_1_2/Include/pcap/bpf.h similarity index 57% rename from libs/WinPcap-413-173-b4/Include/pcap/bpf.h rename to libs/WpdPack_4_1_2/Include/pcap/bpf.h index 215d5ca0..9f4ca33e 100644 --- a/libs/WinPcap-413-173-b4/Include/pcap/bpf.h +++ b/libs/WpdPack_4_1_2/Include/pcap/bpf.h @@ -4,7 +4,7 @@ * * This code is derived from the Stanford/CMU enet packet filter, * (net/enet.c) distributed as part of 4.3BSD, and code contributed - * to Berkeley by Steven McCanne and Van Jacobson both of Lawrence + * to Berkeley by Steven McCanne and Van Jacobson both of Lawrence * Berkeley Laboratory. * * Redistribution and use in source and binary forms, with or without @@ -36,6 +36,8 @@ * SUCH DAMAGE. * * @(#)bpf.h 7.1 (Berkeley) 5/7/91 + * + * @(#) $Header: /tcpdump/master/libpcap/pcap/bpf.h,v 1.19.2.8 2008-09-22 20:16:01 guy Exp $ (LBL) */ /* @@ -46,31 +48,10 @@ * "pcap-bpf.c" will include the native OS version, as it deals with * the OS's BPF implementation. * - * At least two programs found by Google Code Search explicitly includes - * (even though / includes it for you), - * so moving that stuff to would break the build for some - * programs. + * XXX - should this all just be moved to "pcap.h"? */ -/* - * If we've already included , don't re-define this stuff. - * We assume BSD-style multiple-include protection in , - * which is true of all but the oldest versions of FreeBSD and NetBSD, - * or Tru64 UNIX-style multiple-include protection (or, at least, - * Tru64 UNIX 5.x-style; I don't have earlier versions available to check), - * or AIX-style multiple-include protection (or, at least, AIX 5.x-style; - * I don't have earlier versions available to check), or QNX-style - * multiple-include protection (as per GitHub pull request #394). - * - * We do not check for BPF_MAJOR_VERSION, as that's defined by - * , which is directly or indirectly included in some - * programs that also include pcap.h, and doesn't - * define stuff we need. - * - * This also provides our own multiple-include protection. - */ -#if !defined(_NET_BPF_H_) && !defined(_NET_BPF_H_INCLUDED) && !defined(_BPF_H_) && !defined(_H_BPF) && !defined(lib_pcap_bpf_h) -#define lib_pcap_bpf_h +#ifndef BPF_MAJOR_VERSION #ifdef __cplusplus extern "C" { @@ -88,10 +69,8 @@ typedef u_int bpf_u_int32; #endif /* - * Alignment macros. BPF_WORDALIGN rounds up to the next - * even multiple of BPF_ALIGNMENT. - * - * Tcpdump's print-pflog.c uses this, so we define it here. + * Alignment macros. BPF_WORDALIGN rounds up to the next + * even multiple of BPF_ALIGNMENT. */ #ifndef __NetBSD__ #define BPF_ALIGNMENT sizeof(bpf_int32) @@ -100,6 +79,9 @@ typedef u_int bpf_u_int32; #endif #define BPF_WORDALIGN(x) (((x)+(BPF_ALIGNMENT-1))&~(BPF_ALIGNMENT-1)) +#define BPF_MAXBUFSIZE 0x8000 +#define BPF_MINBUFSIZE 32 + /* * Structure for "pcap_compile()", "pcap_setfilter()", etc.. */ @@ -107,9 +89,28 @@ struct bpf_program { u_int bf_len; struct bpf_insn *bf_insns; }; + +/* + * Struct return by BIOCVERSION. This represents the version number of + * the filter language described by the instruction encodings below. + * bpf understands a program iff kernel_major == filter_major && + * kernel_minor >= filter_minor, that is, if the value returned by the + * running kernel has the same major number and a minor number equal + * equal to or less than the filter being downloaded. Otherwise, the + * results are undefined, meaning an error may be returned or packets + * may be accepted haphazardly. + * It has nothing to do with the source code version. + */ +struct bpf_version { + u_short bv_major; + u_short bv_minor; +}; +/* Current version number of filter architecture. */ +#define BPF_MAJOR_VERSION 1 +#define BPF_MINOR_VERSION 1 /* - * Link-layer header type codes. + * Data-link level type codes. * * Do *NOT* add new values to this list without asking * "tcpdump-workers@lists.tcpdump.org" for a value. Otherwise, you run @@ -118,12 +119,6 @@ struct bpf_program { * being able to handle captures with your new DLT_ value, with no hope * that they will ever be changed to do so (as that would destroy their * ability to read captures using that value for that other purpose). - * - * See - * - * http://www.tcpdump.org/linktypes.html - * - * for detailed descriptions of some of these link-layer header types. */ /* @@ -176,37 +171,11 @@ struct bpf_program { #endif /* - * 17 was used for DLT_PFLOG in OpenBSD; it no longer is. - * - * It was DLT_LANE8023 in SuSE 6.3, so we defined LINKTYPE_PFLOG - * as 117 so that pflog captures would use a link-layer header type - * value that didn't collide with any other values. On all - * platforms other than OpenBSD, we defined DLT_PFLOG as 117, - * and we mapped between LINKTYPE_PFLOG and DLT_PFLOG. - * - * OpenBSD eventually switched to using 117 for DLT_PFLOG as well. - * - * Don't use 17 for anything else. + * 17 is used for DLT_OLD_PFLOG in OpenBSD; + * OBSOLETE: DLT_PFLOG is 117 in OpenBSD now as well. See below. + * 18 is used for DLT_PFSYNC in OpenBSD; don't use it for anything else. */ -/* - * 18 is used for DLT_PFSYNC in OpenBSD, NetBSD, DragonFly BSD and - * Mac OS X; don't use it for anything else. (FreeBSD uses 121, - * which collides with DLT_HHDLC, even though it doesn't use 18 - * for anything and doesn't appear to have ever used it for anything.) - * - * We define it as 18 on those platforms; it is, unfortunately, used - * for DLT_CIP in Suse 6.3, so we don't define it as DLT_PFSYNC - * in general. As the packet format for it, like that for - * DLT_PFLOG, is not only OS-dependent but OS-version-dependent, - * we don't support printing it in tcpdump except on OSes that - * have the relevant header files, so it's not that useful on - * other platforms. - */ -#if defined(__OpenBSD__) || defined(__NetBSD__) || defined(__DragonFly__) || defined(__APPLE__) -#define DLT_PFSYNC 18 -#endif - #define DLT_ATM_CLIP 19 /* Linux Classical-IP over ATM */ /* @@ -234,22 +203,9 @@ struct bpf_program { /* * Values between 100 and 103 are used in capture file headers as - * link-layer header type LINKTYPE_ values corresponding to DLT_ types - * that differ between platforms; don't use those values for new DLT_ - * new types. - */ - -/* - * Values starting with 104 are used for newly-assigned link-layer - * header type values; for those link-layer header types, the DLT_ - * value returned by pcap_datalink() and passed to pcap_open_dead(), - * and the LINKTYPE_ value that appears in capture files, are the - * same. - * - * DLT_MATCHING_MIN is the lowest such value; DLT_MATCHING_MAX is - * the highest such value. + * link-layer types corresponding to DLT_ types that differ + * between platforms; don't use those values for new DLT_ new types. */ -#define DLT_MATCHING_MIN 104 /* * This value was defined by libpcap 0.5; platforms that have defined @@ -337,8 +293,15 @@ struct bpf_program { #define DLT_IPFILTER 116 /* - * OpenBSD DLT_PFLOG. + * OpenBSD DLT_PFLOG; DLT_PFLOG is 17 in OpenBSD, but that's DLT_LANE8023 + * in SuSE 6.3, so we can't use 17 for it in capture-file headers. + * + * XXX: is there a conflict with DLT_PFSYNC 18 as well? */ +#ifdef __OpenBSD__ +#define DLT_OLD_PFLOG 17 +#define DLT_PFSYNC 18 +#endif #define DLT_PFLOG 117 /* @@ -360,48 +323,9 @@ struct bpf_program { #define DLT_AIRONET_HEADER 120 /* - * Sigh. - * - * This was reserved for Siemens HiPath HDLC on 2002-01-25, as - * requested by Tomas Kukosa. - * - * On 2004-02-25, a FreeBSD checkin to sys/net/bpf.h was made that - * assigned 121 as DLT_PFSYNC. Its libpcap does DLT_ <-> LINKTYPE_ - * mapping, so it probably supports capturing on the pfsync device - * but not saving the captured data to a pcap file. - * - * OpenBSD, from which pf came, however, uses 18 for DLT_PFSYNC; - * their libpcap does no DLT_ <-> LINKTYPE_ mapping, so it would - * use 18 in pcap files as well. - * - * NetBSD and DragonFly BSD also use 18 for DLT_PFSYNC; their - * libpcaps do DLT_ <-> LINKTYPE_ mapping, and neither has an entry - * for DLT_PFSYNC, so it might not be able to write out dump files - * with 18 as the link-layer header type. (Earlier versions might - * not have done mapping, in which case they'd work the same way - * OpenBSD does.) - * - * Mac OS X defines it as 18, but doesn't appear to use it as of - * Mac OS X 10.7.3. Its libpcap does DLT_ <-> LINKTYPE_ mapping. - * - * We'll define DLT_PFSYNC as 121 on FreeBSD and define it as 18 on - * all other platforms. We'll define DLT_HHDLC as 121 on everything - * except for FreeBSD; anybody who wants to compile, on FreeBSD, code - * that uses DLT_HHDLC is out of luck. - * - * We'll define LINKTYPE_PFSYNC as 18, *even on FreeBSD*, and map - * it, so that savefiles won't use 121 for PFSYNC - they'll all - * use 18. Code that uses pcap_datalink() to determine the link-layer - * header type of a savefile won't, when built and run on FreeBSD, - * be able to distinguish between LINKTYPE_PFSYNC and LINKTYPE_HHDLC - * capture files; code that doesn't, such as the code in Wireshark, - * will be able to distinguish between them. - */ -#ifdef __FreeBSD__ -#define DLT_PFSYNC 121 -#else + * Reserved for Siemens HiPath HDLC. + */ #define DLT_HHDLC 121 -#endif /* * This is for RFC 2625 IP-over-Fibre Channel. @@ -429,7 +353,7 @@ struct bpf_program { */ #define DLT_SUNATM 123 /* Solaris+SunATM */ -/* +/* * Reserved as per request from Kent Dahlgren * for private use. */ @@ -599,7 +523,7 @@ struct bpf_program { #define DLT_JUNIPER_MONITOR 164 /* - * BACnet MS/TP frames. + * Reserved for BACnet MS/TP. */ #define DLT_BACNET_MS_TP 165 @@ -672,7 +596,7 @@ struct bpf_program { /* * Juniper-private data link type, as per request from - * Hannes Gredler . + * Hannes Gredler . * The DLT_ are used for prepending meta-information * like interface index, interface name * before standard Ethernet, PPP, Frelay & C-HDLC Frames @@ -689,7 +613,7 @@ struct bpf_program { /* * Juniper-private data link type, as per request from - * Hannes Gredler . + * Hannes Gredler . * The DLT_ is used for internal communication with a * voice Adapter Card (PIC) */ @@ -764,7 +688,7 @@ struct bpf_program { /* * Juniper-private data link type, as per request from - * Hannes Gredler . + * Hannes Gredler . * The DLT_ is used for internal communication with a * integrated service module (ISM). */ @@ -773,8 +697,6 @@ struct bpf_program { /* * IEEE 802.15.4, exactly as it appears in the spec (no padding, no * nothing); requested by Mikko Saarnivala . - * For this one, we expect the FCS to be present at the end of the frame; - * if the frame has no FCS, DLT_IEEE802_15_4_NOFCS should be used. */ #define DLT_IEEE802_15_4 195 @@ -807,7 +729,7 @@ struct bpf_program { /* * Juniper-private data link type, as per request from - * Hannes Gredler . + * Hannes Gredler . * The DLT_ is used for capturing data on a secure tunnel interface. */ #define DLT_JUNIPER_ST 200 @@ -899,432 +821,6 @@ struct bpf_program { */ #define DLT_IEEE802_15_4_NONASK_PHY 215 -/* - * David Gibson requested this for - * captures from the Linux kernel /dev/input/eventN devices. This - * is used to communicate keystrokes and mouse movements from the - * Linux kernel to display systems, such as Xorg. - */ -#define DLT_LINUX_EVDEV 216 - -/* - * GSM Um and Abis interfaces, preceded by a "gsmtap" header. - * - * Requested by Harald Welte . - */ -#define DLT_GSMTAP_UM 217 -#define DLT_GSMTAP_ABIS 218 - -/* - * MPLS, with an MPLS label as the link-layer header. - * Requested by Michele Marchetto on behalf - * of OpenBSD. - */ -#define DLT_MPLS 219 - -/* - * USB packets, beginning with a Linux USB header, with the USB header - * padded to 64 bytes; required for memory-mapped access. - */ -#define DLT_USB_LINUX_MMAPPED 220 - -/* - * DECT packets, with a pseudo-header; requested by - * Matthias Wenzel . - */ -#define DLT_DECT 221 - -/* - * From: "Lidwa, Eric (GSFC-582.0)[SGT INC]" - * Date: Mon, 11 May 2009 11:18:30 -0500 - * - * DLT_AOS. We need it for AOS Space Data Link Protocol. - * I have already written dissectors for but need an OK from - * legal before I can submit a patch. - * - */ -#define DLT_AOS 222 - -/* - * Wireless HART (Highway Addressable Remote Transducer) - * From the HART Communication Foundation - * IES/PAS 62591 - * - * Requested by Sam Roberts . - */ -#define DLT_WIHART 223 - -/* - * Fibre Channel FC-2 frames, beginning with a Frame_Header. - * Requested by Kahou Lei . - */ -#define DLT_FC_2 224 - -/* - * Fibre Channel FC-2 frames, beginning with an encoding of the - * SOF, and ending with an encoding of the EOF. - * - * The encodings represent the frame delimiters as 4-byte sequences - * representing the corresponding ordered sets, with K28.5 - * represented as 0xBC, and the D symbols as the corresponding - * byte values; for example, SOFi2, which is K28.5 - D21.5 - D1.2 - D21.2, - * is represented as 0xBC 0xB5 0x55 0x55. - * - * Requested by Kahou Lei . - */ -#define DLT_FC_2_WITH_FRAME_DELIMS 225 - -/* - * Solaris ipnet pseudo-header; requested by Darren Reed . - * - * The pseudo-header starts with a one-byte version number; for version 2, - * the pseudo-header is: - * - * struct dl_ipnetinfo { - * u_int8_t dli_version; - * u_int8_t dli_family; - * u_int16_t dli_htype; - * u_int32_t dli_pktlen; - * u_int32_t dli_ifindex; - * u_int32_t dli_grifindex; - * u_int32_t dli_zsrc; - * u_int32_t dli_zdst; - * }; - * - * dli_version is 2 for the current version of the pseudo-header. - * - * dli_family is a Solaris address family value, so it's 2 for IPv4 - * and 26 for IPv6. - * - * dli_htype is a "hook type" - 0 for incoming packets, 1 for outgoing - * packets, and 2 for packets arriving from another zone on the same - * machine. - * - * dli_pktlen is the length of the packet data following the pseudo-header - * (so the captured length minus dli_pktlen is the length of the - * pseudo-header, assuming the entire pseudo-header was captured). - * - * dli_ifindex is the interface index of the interface on which the - * packet arrived. - * - * dli_grifindex is the group interface index number (for IPMP interfaces). - * - * dli_zsrc is the zone identifier for the source of the packet. - * - * dli_zdst is the zone identifier for the destination of the packet. - * - * A zone number of 0 is the global zone; a zone number of 0xffffffff - * means that the packet arrived from another host on the network, not - * from another zone on the same machine. - * - * An IPv4 or IPv6 datagram follows the pseudo-header; dli_family indicates - * which of those it is. - */ -#define DLT_IPNET 226 - -/* - * CAN (Controller Area Network) frames, with a pseudo-header as supplied - * by Linux SocketCAN. See Documentation/networking/can.txt in the Linux - * source. - * - * Requested by Felix Obenhuber . - */ -#define DLT_CAN_SOCKETCAN 227 - -/* - * Raw IPv4/IPv6; different from DLT_RAW in that the DLT_ value specifies - * whether it's v4 or v6. Requested by Darren Reed . - */ -#define DLT_IPV4 228 -#define DLT_IPV6 229 - -/* - * IEEE 802.15.4, exactly as it appears in the spec (no padding, no - * nothing), and with no FCS at the end of the frame; requested by - * Jon Smirl . - */ -#define DLT_IEEE802_15_4_NOFCS 230 - -/* - * Raw D-Bus: - * - * http://www.freedesktop.org/wiki/Software/dbus - * - * messages: - * - * http://dbus.freedesktop.org/doc/dbus-specification.html#message-protocol-messages - * - * starting with the endianness flag, followed by the message type, etc., - * but without the authentication handshake before the message sequence: - * - * http://dbus.freedesktop.org/doc/dbus-specification.html#auth-protocol - * - * Requested by Martin Vidner . - */ -#define DLT_DBUS 231 - -/* - * Juniper-private data link type, as per request from - * Hannes Gredler . - */ -#define DLT_JUNIPER_VS 232 -#define DLT_JUNIPER_SRX_E2E 233 -#define DLT_JUNIPER_FIBRECHANNEL 234 - -/* - * DVB-CI (DVB Common Interface for communication between a PC Card - * module and a DVB receiver). See - * - * http://www.kaiser.cx/pcap-dvbci.html - * - * for the specification. - * - * Requested by Martin Kaiser . - */ -#define DLT_DVB_CI 235 - -/* - * Variant of 3GPP TS 27.010 multiplexing protocol (similar to, but - * *not* the same as, 27.010). Requested by Hans-Christoph Schemmel - * . - */ -#define DLT_MUX27010 236 - -/* - * STANAG 5066 D_PDUs. Requested by M. Baris Demiray - * . - */ -#define DLT_STANAG_5066_D_PDU 237 - -/* - * Juniper-private data link type, as per request from - * Hannes Gredler . - */ -#define DLT_JUNIPER_ATM_CEMIC 238 - -/* - * NetFilter LOG messages - * (payload of netlink NFNL_SUBSYS_ULOG/NFULNL_MSG_PACKET packets) - * - * Requested by Jakub Zawadzki - */ -#define DLT_NFLOG 239 - -/* - * Hilscher Gesellschaft fuer Systemautomation mbH link-layer type - * for Ethernet packets with a 4-byte pseudo-header and always - * with the payload including the FCS, as supplied by their - * netANALYZER hardware and software. - * - * Requested by Holger P. Frommer - */ -#define DLT_NETANALYZER 240 - -/* - * Hilscher Gesellschaft fuer Systemautomation mbH link-layer type - * for Ethernet packets with a 4-byte pseudo-header and FCS and - * with the Ethernet header preceded by 7 bytes of preamble and - * 1 byte of SFD, as supplied by their netANALYZER hardware and - * software. - * - * Requested by Holger P. Frommer - */ -#define DLT_NETANALYZER_TRANSPARENT 241 - -/* - * IP-over-InfiniBand, as specified by RFC 4391. - * - * Requested by Petr Sumbera . - */ -#define DLT_IPOIB 242 - -/* - * MPEG-2 transport stream (ISO 13818-1/ITU-T H.222.0). - * - * Requested by Guy Martin . - */ -#define DLT_MPEG_2_TS 243 - -/* - * ng4T GmbH's UMTS Iub/Iur-over-ATM and Iub/Iur-over-IP format as - * used by their ng40 protocol tester. - * - * Requested by Jens Grimmer . - */ -#define DLT_NG40 244 - -/* - * Pseudo-header giving adapter number and flags, followed by an NFC - * (Near-Field Communications) Logical Link Control Protocol (LLCP) PDU, - * as specified by NFC Forum Logical Link Control Protocol Technical - * Specification LLCP 1.1. - * - * Requested by Mike Wakerly . - */ -#define DLT_NFC_LLCP 245 - -/* - * 245 is used as LINKTYPE_PFSYNC; do not use it for any other purpose. - * - * DLT_PFSYNC has different values on different platforms, and all of - * them collide with something used elsewhere. On platforms that - * don't already define it, define it as 245. - */ -#if !defined(__FreeBSD__) && !defined(__OpenBSD__) && !defined(__NetBSD__) && !defined(__DragonFly__) && !defined(__APPLE__) -#define DLT_PFSYNC 246 -#endif - -/* - * Raw InfiniBand packets, starting with the Local Routing Header. - * - * Requested by Oren Kladnitsky . - */ -#define DLT_INFINIBAND 247 - -/* - * SCTP, with no lower-level protocols (i.e., no IPv4 or IPv6). - * - * Requested by Michael Tuexen . - */ -#define DLT_SCTP 248 - -/* - * USB packets, beginning with a USBPcap header. - * - * Requested by Tomasz Mon - */ -#define DLT_USBPCAP 249 - -/* - * Schweitzer Engineering Laboratories "RTAC" product serial-line - * packets. - * - * Requested by Chris Bontje . - */ -#define DLT_RTAC_SERIAL 250 - -/* - * Bluetooth Low Energy air interface link-layer packets. - * - * Requested by Mike Kershaw . - */ -#define DLT_BLUETOOTH_LE_LL 251 - -/* - * DLT type for upper-protocol layer PDU saves from wireshark. - * - * the actual contents are determined by two TAGs stored with each - * packet: - * EXP_PDU_TAG_LINKTYPE the link type (LINKTYPE_ value) of the - * original packet. - * - * EXP_PDU_TAG_PROTO_NAME the name of the wireshark dissector - * that can make sense of the data stored. - */ -#define DLT_WIRESHARK_UPPER_PDU 252 - -/* - * DLT type for the netlink protocol (nlmon devices). - */ -#define DLT_NETLINK 253 - -/* - * Bluetooth Linux Monitor headers for the BlueZ stack. - */ -#define DLT_BLUETOOTH_LINUX_MONITOR 254 - -/* - * Bluetooth Basic Rate/Enhanced Data Rate baseband packets, as - * captured by Ubertooth. - */ -#define DLT_BLUETOOTH_BREDR_BB 255 - -/* - * Bluetooth Low Energy link layer packets, as captured by Ubertooth. - */ -#define DLT_BLUETOOTH_LE_LL_WITH_PHDR 256 - -/* - * PROFIBUS data link layer. - */ -#define DLT_PROFIBUS_DL 257 - -/* - * Apple's DLT_PKTAP headers. - * - * Sadly, the folks at Apple either had no clue that the DLT_USERn values - * are for internal use within an organization and partners only, and - * didn't know that the right way to get a link-layer header type is to - * ask tcpdump.org for one, or knew and didn't care, so they just - * used DLT_USER2, which causes problems for everything except for - * their version of tcpdump. - * - * So I'll just give them one; hopefully this will show up in a - * libpcap release in time for them to get this into 10.10 Big Sur - * or whatever Mavericks' successor is called. LINKTYPE_PKTAP - * will be 258 *even on OS X*; that is *intentional*, so that - * PKTAP files look the same on *all* OSes (different OSes can have - * different numerical values for a given DLT_, but *MUST NOT* have - * different values for what goes in a file, as files can be moved - * between OSes!). - * - * When capturing, on a system with a Darwin-based OS, on a device - * that returns 149 (DLT_USER2 and Apple's DLT_PKTAP) with this - * version of libpcap, the DLT_ value for the pcap_t will be DLT_PKTAP, - * and that will continue to be DLT_USER2 on Darwin-based OSes. That way, - * binary compatibility with Mavericks is preserved for programs using - * this version of libpcap. This does mean that if you were using - * DLT_USER2 for some capture device on OS X, you can't do so with - * this version of libpcap, just as you can't with Apple's libpcap - - * on OS X, they define DLT_PKTAP to be DLT_USER2, so programs won't - * be able to distinguish between PKTAP and whatever you were using - * DLT_USER2 for. - * - * If the program saves the capture to a file using this version of - * libpcap's pcap_dump code, the LINKTYPE_ value in the file will be - * LINKTYPE_PKTAP, which will be 258, even on Darwin-based OSes. - * That way, the file will *not* be a DLT_USER2 file. That means - * that the latest version of tcpdump, when built with this version - * of libpcap, and sufficiently recent versions of Wireshark will - * be able to read those files and interpret them correctly; however, - * Apple's version of tcpdump in OS X 10.9 won't be able to handle - * them. (Hopefully, Apple will pick up this version of libpcap, - * and the corresponding version of tcpdump, so that tcpdump will - * be able to handle the old LINKTYPE_USER2 captures *and* the new - * LINKTYPE_PKTAP captures.) - */ -#ifdef __APPLE__ -#define DLT_PKTAP DLT_USER2 -#else -#define DLT_PKTAP 258 -#endif - -/* - * Ethernet packets preceded by a header giving the last 6 octets - * of the preamble specified by 802.3-2012 Clause 65, section - * 65.1.3.2 "Transmit". - */ -#define DLT_EPON 259 - -/* - * IPMI trace packets, as specified by Table 3-20 "Trace Data Block Format" - * in the PICMG HPM.2 specification. - */ -#define DLT_IPMI_HPM_2 260 - -/* - * per Joshua Wright , formats for Zwave captures. - */ -#define DLT_ZWAVE_R1_R2 261 -#define DLT_ZWAVE_R3 262 - -/* - * per Steve Karg , formats for Wattstopper - * Digital Lighting Management room bus serial protocol captures. - */ -#define DLT_WATTSTOPPER_DLM 263 - -#define DLT_MATCHING_MAX 263 /* highest value in the "matching" range */ /* * DLT and savefile link type values are split into a class and @@ -1348,17 +844,7 @@ struct bpf_program { /* * The instruction encodings. - * - * Please inform tcpdump-workers@lists.tcpdump.org if you use any - * of the reserved values, so that we can note that they're used - * (and perhaps implement it in the reference BPF implementation - * and encourage its implementation elsewhere). */ - -/* - * The upper 8 bits of the opcode aren't used. BSD/OS used 0x8000. - */ - /* instruction classes */ #define BPF_CLASS(code) ((code) & 0x07) #define BPF_LD 0x00 @@ -1375,7 +861,6 @@ struct bpf_program { #define BPF_W 0x00 #define BPF_H 0x08 #define BPF_B 0x10 -/* 0x18 reserved; used by BSD/OS */ #define BPF_MODE(code) ((code) & 0xe0) #define BPF_IMM 0x00 #define BPF_ABS 0x20 @@ -1383,8 +868,6 @@ struct bpf_program { #define BPF_MEM 0x60 #define BPF_LEN 0x80 #define BPF_MSH 0xa0 -/* 0xc0 reserved; used by BSD/OS */ -/* 0xe0 reserved; used by BSD/OS */ /* alu/jmp fields */ #define BPF_OP(code) ((code) & 0xf0) @@ -1397,30 +880,11 @@ struct bpf_program { #define BPF_LSH 0x60 #define BPF_RSH 0x70 #define BPF_NEG 0x80 -#define BPF_MOD 0x90 -#define BPF_XOR 0xa0 -/* 0xb0 reserved */ -/* 0xc0 reserved */ -/* 0xd0 reserved */ -/* 0xe0 reserved */ -/* 0xf0 reserved */ - #define BPF_JA 0x00 #define BPF_JEQ 0x10 #define BPF_JGT 0x20 #define BPF_JGE 0x30 #define BPF_JSET 0x40 -/* 0x50 reserved; used on BSD/OS */ -/* 0x60 reserved */ -/* 0x70 reserved */ -/* 0x80 reserved */ -/* 0x90 reserved */ -/* 0xa0 reserved */ -/* 0xb0 reserved */ -/* 0xc0 reserved */ -/* 0xd0 reserved */ -/* 0xe0 reserved */ -/* 0xf0 reserved */ #define BPF_SRC(code) ((code) & 0x08) #define BPF_K 0x00 #define BPF_X 0x08 @@ -1428,43 +892,11 @@ struct bpf_program { /* ret - BPF_K and BPF_X also apply */ #define BPF_RVAL(code) ((code) & 0x18) #define BPF_A 0x10 -/* 0x18 reserved */ /* misc */ #define BPF_MISCOP(code) ((code) & 0xf8) #define BPF_TAX 0x00 -/* 0x08 reserved */ -/* 0x10 reserved */ -/* 0x18 reserved */ -/* #define BPF_COP 0x20 NetBSD "coprocessor" extensions */ -/* 0x28 reserved */ -/* 0x30 reserved */ -/* 0x38 reserved */ -/* #define BPF_COPX 0x40 NetBSD "coprocessor" extensions */ -/* also used on BSD/OS */ -/* 0x48 reserved */ -/* 0x50 reserved */ -/* 0x58 reserved */ -/* 0x60 reserved */ -/* 0x68 reserved */ -/* 0x70 reserved */ -/* 0x78 reserved */ #define BPF_TXA 0x80 -/* 0x88 reserved */ -/* 0x90 reserved */ -/* 0x98 reserved */ -/* 0xa0 reserved */ -/* 0xa8 reserved */ -/* 0xb0 reserved */ -/* 0xb8 reserved */ -/* 0xc0 reserved; used on BSD/OS */ -/* 0xc8 reserved */ -/* 0xd0 reserved */ -/* 0xd8 reserved */ -/* 0xe0 reserved */ -/* 0xe8 reserved */ -/* 0xf0 reserved */ -/* 0xf8 reserved */ /* * The instruction data structure. @@ -1476,16 +908,6 @@ struct bpf_insn { bpf_u_int32 k; }; -/* - * Auxiliary data, for use when interpreting a filter intended for the - * Linux kernel when the kernel rejects the filter (requiring us to - * run it in userland). It contains VLAN tag information. - */ -struct bpf_aux_data { - u_short vlan_tag_present; - u_short vlan_tag; -}; - /* * Macros for insn array initializers. */ @@ -1495,11 +917,9 @@ struct bpf_aux_data { #if __STDC__ || defined(__cplusplus) extern int bpf_validate(const struct bpf_insn *, int); extern u_int bpf_filter(const struct bpf_insn *, const u_char *, u_int, u_int); -extern u_int bpf_filter_with_aux_data(const struct bpf_insn *, const u_char *, u_int, u_int, const struct bpf_aux_data *); #else extern int bpf_validate(); extern u_int bpf_filter(); -extern u_int bpf_filter(); #endif /* @@ -1511,4 +931,4 @@ extern u_int bpf_filter(); } #endif -#endif /* !defined(_NET_BPF_H_) && !defined(_BPF_H_) && !defined(_H_BPF) && !defined(lib_pcap_bpf_h) */ +#endif diff --git a/libs/WinPcap-413-173-b4/Include/pcap/namedb.h b/libs/WpdPack_4_1_2/Include/pcap/namedb.h similarity index 97% rename from libs/WinPcap-413-173-b4/Include/pcap/namedb.h rename to libs/WpdPack_4_1_2/Include/pcap/namedb.h index d3a34322..9002c750 100644 --- a/libs/WinPcap-413-173-b4/Include/pcap/namedb.h +++ b/libs/WpdPack_4_1_2/Include/pcap/namedb.h @@ -29,6 +29,8 @@ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. + * + * @(#) $Header: /tcpdump/master/libpcap/pcap/namedb.h,v 1.1 2006/10/04 18:09:22 guy Exp $ (LBL) */ #ifndef lib_pcap_namedb_h diff --git a/libs/WpdPack_4_1_2/Include/pcap/pcap.h b/libs/WpdPack_4_1_2/Include/pcap/pcap.h new file mode 100644 index 00000000..ad8fc40a --- /dev/null +++ b/libs/WpdPack_4_1_2/Include/pcap/pcap.h @@ -0,0 +1,407 @@ +/* -*- Mode: c; tab-width: 8; indent-tabs-mode: 1; c-basic-offset: 8; -*- */ +/* + * Copyright (c) 1993, 1994, 1995, 1996, 1997 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the Computer Systems + * Engineering Group at Lawrence Berkeley Laboratory. + * 4. Neither the name of the University nor of the Laboratory may be used + * to endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * @(#) $Header: /tcpdump/master/libpcap/pcap/pcap.h,v 1.4.2.11 2008-10-06 15:38:39 gianluca Exp $ (LBL) + */ + +#ifndef lib_pcap_pcap_h +#define lib_pcap_pcap_h + +#if defined(WIN32) + #include +#elif defined(MSDOS) + #include + #include /* u_int, u_char etc. */ +#else /* UN*X */ + #include + #include +#endif /* WIN32/MSDOS/UN*X */ + +#ifndef PCAP_DONT_INCLUDE_PCAP_BPF_H +#include +#endif + +#include + +#ifdef HAVE_REMOTE + // We have to define the SOCKET here, although it has been defined in sockutils.h + // This is to avoid the distribution of the 'sockutils.h' file around + // (for example in the WinPcap developer's pack) + #ifndef SOCKET + #ifdef WIN32 + #define SOCKET unsigned int + #else + #define SOCKET int + #endif + #endif +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +#define PCAP_VERSION_MAJOR 2 +#define PCAP_VERSION_MINOR 4 + +#define PCAP_ERRBUF_SIZE 256 + +/* + * Compatibility for systems that have a bpf.h that + * predates the bpf typedefs for 64-bit support. + */ +#if BPF_RELEASE - 0 < 199406 +typedef int bpf_int32; +typedef u_int bpf_u_int32; +#endif + +typedef struct pcap pcap_t; +typedef struct pcap_dumper pcap_dumper_t; +typedef struct pcap_if pcap_if_t; +typedef struct pcap_addr pcap_addr_t; + +/* + * The first record in the file contains saved values for some + * of the flags used in the printout phases of tcpdump. + * Many fields here are 32 bit ints so compilers won't insert unwanted + * padding; these files need to be interchangeable across architectures. + * + * Do not change the layout of this structure, in any way (this includes + * changes that only affect the length of fields in this structure). + * + * Also, do not change the interpretation of any of the members of this + * structure, in any way (this includes using values other than + * LINKTYPE_ values, as defined in "savefile.c", in the "linktype" + * field). + * + * Instead: + * + * introduce a new structure for the new format, if the layout + * of the structure changed; + * + * send mail to "tcpdump-workers@lists.tcpdump.org", requesting + * a new magic number for your new capture file format, and, when + * you get the new magic number, put it in "savefile.c"; + * + * use that magic number for save files with the changed file + * header; + * + * make the code in "savefile.c" capable of reading files with + * the old file header as well as files with the new file header + * (using the magic number to determine the header format). + * + * Then supply the changes as a patch at + * + * http://sourceforge.net/projects/libpcap/ + * + * so that future versions of libpcap and programs that use it (such as + * tcpdump) will be able to read your new capture file format. + */ +struct pcap_file_header { + bpf_u_int32 magic; + u_short version_major; + u_short version_minor; + bpf_int32 thiszone; /* gmt to local correction */ + bpf_u_int32 sigfigs; /* accuracy of timestamps */ + bpf_u_int32 snaplen; /* max length saved portion of each pkt */ + bpf_u_int32 linktype; /* data link type (LINKTYPE_*) */ +}; + +/* + * Macros for the value returned by pcap_datalink_ext(). + * + * If LT_FCS_LENGTH_PRESENT(x) is true, the LT_FCS_LENGTH(x) macro + * gives the FCS length of packets in the capture. + */ +#define LT_FCS_LENGTH_PRESENT(x) ((x) & 0x04000000) +#define LT_FCS_LENGTH(x) (((x) & 0xF0000000) >> 28) +#define LT_FCS_DATALINK_EXT(x) ((((x) & 0xF) << 28) | 0x04000000) + +typedef enum { + PCAP_D_INOUT = 0, + PCAP_D_IN, + PCAP_D_OUT +} pcap_direction_t; + +/* + * Generic per-packet information, as supplied by libpcap. + * + * The time stamp can and should be a "struct timeval", regardless of + * whether your system supports 32-bit tv_sec in "struct timeval", + * 64-bit tv_sec in "struct timeval", or both if it supports both 32-bit + * and 64-bit applications. The on-disk format of savefiles uses 32-bit + * tv_sec (and tv_usec); this structure is irrelevant to that. 32-bit + * and 64-bit versions of libpcap, even if they're on the same platform, + * should supply the appropriate version of "struct timeval", even if + * that's not what the underlying packet capture mechanism supplies. + */ +struct pcap_pkthdr { + struct timeval ts; /* time stamp */ + bpf_u_int32 caplen; /* length of portion present */ + bpf_u_int32 len; /* length this packet (off wire) */ +}; + +/* + * As returned by the pcap_stats() + */ +struct pcap_stat { + u_int ps_recv; /* number of packets received */ + u_int ps_drop; /* number of packets dropped */ + u_int ps_ifdrop; /* drops by interface XXX not yet supported */ +#ifdef HAVE_REMOTE + u_int ps_capt; /* number of packets that are received by the application; please get rid off the Win32 ifdef */ + u_int ps_sent; /* number of packets sent by the server on the network */ + u_int ps_netdrop; /* number of packets lost on the network */ +#endif /* HAVE_REMOTE */ +}; + +#ifdef MSDOS +/* + * As returned by the pcap_stats_ex() + */ +struct pcap_stat_ex { + u_long rx_packets; /* total packets received */ + u_long tx_packets; /* total packets transmitted */ + u_long rx_bytes; /* total bytes received */ + u_long tx_bytes; /* total bytes transmitted */ + u_long rx_errors; /* bad packets received */ + u_long tx_errors; /* packet transmit problems */ + u_long rx_dropped; /* no space in Rx buffers */ + u_long tx_dropped; /* no space available for Tx */ + u_long multicast; /* multicast packets received */ + u_long collisions; + + /* detailed rx_errors: */ + u_long rx_length_errors; + u_long rx_over_errors; /* receiver ring buff overflow */ + u_long rx_crc_errors; /* recv'd pkt with crc error */ + u_long rx_frame_errors; /* recv'd frame alignment error */ + u_long rx_fifo_errors; /* recv'r fifo overrun */ + u_long rx_missed_errors; /* recv'r missed packet */ + + /* detailed tx_errors */ + u_long tx_aborted_errors; + u_long tx_carrier_errors; + u_long tx_fifo_errors; + u_long tx_heartbeat_errors; + u_long tx_window_errors; + }; +#endif + +/* + * Item in a list of interfaces. + */ +struct pcap_if { + struct pcap_if *next; + char *name; /* name to hand to "pcap_open_live()" */ + char *description; /* textual description of interface, or NULL */ + struct pcap_addr *addresses; + bpf_u_int32 flags; /* PCAP_IF_ interface flags */ +}; + +#define PCAP_IF_LOOPBACK 0x00000001 /* interface is loopback */ + +/* + * Representation of an interface address. + */ +struct pcap_addr { + struct pcap_addr *next; + struct sockaddr *addr; /* address */ + struct sockaddr *netmask; /* netmask for that address */ + struct sockaddr *broadaddr; /* broadcast address for that address */ + struct sockaddr *dstaddr; /* P2P destination address for that address */ +}; + +typedef void (*pcap_handler)(u_char *, const struct pcap_pkthdr *, + const u_char *); + +/* + * Error codes for the pcap API. + * These will all be negative, so you can check for the success or + * failure of a call that returns these codes by checking for a + * negative value. + */ +#define PCAP_ERROR -1 /* generic error code */ +#define PCAP_ERROR_BREAK -2 /* loop terminated by pcap_breakloop */ +#define PCAP_ERROR_NOT_ACTIVATED -3 /* the capture needs to be activated */ +#define PCAP_ERROR_ACTIVATED -4 /* the operation can't be performed on already activated captures */ +#define PCAP_ERROR_NO_SUCH_DEVICE -5 /* no such device exists */ +#define PCAP_ERROR_RFMON_NOTSUP -6 /* this device doesn't support rfmon (monitor) mode */ +#define PCAP_ERROR_NOT_RFMON -7 /* operation supported only in monitor mode */ +#define PCAP_ERROR_PERM_DENIED -8 /* no permission to open the device */ +#define PCAP_ERROR_IFACE_NOT_UP -9 /* interface isn't up */ + +/* + * Warning codes for the pcap API. + * These will all be positive and non-zero, so they won't look like + * errors. + */ +#define PCAP_WARNING 1 /* generic warning code */ +#define PCAP_WARNING_PROMISC_NOTSUP 2 /* this device doesn't support promiscuous mode */ + +char *pcap_lookupdev(char *); +int pcap_lookupnet(const char *, bpf_u_int32 *, bpf_u_int32 *, char *); + +pcap_t *pcap_create(const char *, char *); +int pcap_set_snaplen(pcap_t *, int); +int pcap_set_promisc(pcap_t *, int); +int pcap_can_set_rfmon(pcap_t *); +int pcap_set_rfmon(pcap_t *, int); +int pcap_set_timeout(pcap_t *, int); +int pcap_set_buffer_size(pcap_t *, int); +int pcap_activate(pcap_t *); + +pcap_t *pcap_open_live(const char *, int, int, int, char *); +pcap_t *pcap_open_dead(int, int); +pcap_t *pcap_open_offline(const char *, char *); +#if defined(WIN32) +pcap_t *pcap_hopen_offline(intptr_t, char *); +#if !defined(LIBPCAP_EXPORTS) +#define pcap_fopen_offline(f,b) \ + pcap_hopen_offline(_get_osfhandle(_fileno(f)), b) +#else /*LIBPCAP_EXPORTS*/ +static pcap_t *pcap_fopen_offline(FILE *, char *); +#endif +#else /*WIN32*/ +pcap_t *pcap_fopen_offline(FILE *, char *); +#endif /*WIN32*/ + +void pcap_close(pcap_t *); +int pcap_loop(pcap_t *, int, pcap_handler, u_char *); +int pcap_dispatch(pcap_t *, int, pcap_handler, u_char *); +const u_char* + pcap_next(pcap_t *, struct pcap_pkthdr *); +int pcap_next_ex(pcap_t *, struct pcap_pkthdr **, const u_char **); +void pcap_breakloop(pcap_t *); +int pcap_stats(pcap_t *, struct pcap_stat *); +int pcap_setfilter(pcap_t *, struct bpf_program *); +int pcap_setdirection(pcap_t *, pcap_direction_t); +int pcap_getnonblock(pcap_t *, char *); +int pcap_setnonblock(pcap_t *, int, char *); +int pcap_inject(pcap_t *, const void *, size_t); +int pcap_sendpacket(pcap_t *, const u_char *, int); +const char *pcap_statustostr(int); +const char *pcap_strerror(int); +char *pcap_geterr(pcap_t *); +void pcap_perror(pcap_t *, char *); +int pcap_compile(pcap_t *, struct bpf_program *, const char *, int, + bpf_u_int32); +int pcap_compile_nopcap(int, int, struct bpf_program *, + const char *, int, bpf_u_int32); +void pcap_freecode(struct bpf_program *); +int pcap_offline_filter(struct bpf_program *, const struct pcap_pkthdr *, + const u_char *); +int pcap_datalink(pcap_t *); +int pcap_datalink_ext(pcap_t *); +int pcap_list_datalinks(pcap_t *, int **); +int pcap_set_datalink(pcap_t *, int); +void pcap_free_datalinks(int *); +int pcap_datalink_name_to_val(const char *); +const char *pcap_datalink_val_to_name(int); +const char *pcap_datalink_val_to_description(int); +int pcap_snapshot(pcap_t *); +int pcap_is_swapped(pcap_t *); +int pcap_major_version(pcap_t *); +int pcap_minor_version(pcap_t *); + +/* XXX */ +FILE *pcap_file(pcap_t *); +int pcap_fileno(pcap_t *); + +pcap_dumper_t *pcap_dump_open(pcap_t *, const char *); +pcap_dumper_t *pcap_dump_fopen(pcap_t *, FILE *fp); +FILE *pcap_dump_file(pcap_dumper_t *); +long pcap_dump_ftell(pcap_dumper_t *); +int pcap_dump_flush(pcap_dumper_t *); +void pcap_dump_close(pcap_dumper_t *); +void pcap_dump(u_char *, const struct pcap_pkthdr *, const u_char *); + +int pcap_findalldevs(pcap_if_t **, char *); +void pcap_freealldevs(pcap_if_t *); + +const char *pcap_lib_version(void); + +/* XXX this guy lives in the bpf tree */ +u_int bpf_filter(const struct bpf_insn *, const u_char *, u_int, u_int); +int bpf_validate(const struct bpf_insn *f, int len); +char *bpf_image(const struct bpf_insn *, int); +void bpf_dump(const struct bpf_program *, int); + +#if defined(WIN32) + +/* + * Win32 definitions + */ + +int pcap_setbuff(pcap_t *p, int dim); +int pcap_setmode(pcap_t *p, int mode); +int pcap_setmintocopy(pcap_t *p, int size); + +#ifdef WPCAP +/* Include file with the wpcap-specific extensions */ +#include +#endif /* WPCAP */ + +#define MODE_CAPT 0 +#define MODE_STAT 1 +#define MODE_MON 2 + +#elif defined(MSDOS) + +/* + * MS-DOS definitions + */ + +int pcap_stats_ex (pcap_t *, struct pcap_stat_ex *); +void pcap_set_wait (pcap_t *p, void (*yield)(void), int wait); +u_long pcap_mac_packets (void); + +#else /* UN*X */ + +/* + * UN*X definitions + */ + +int pcap_get_selectable_fd(pcap_t *); + +#endif /* WIN32/MSDOS/UN*X */ + +#ifdef HAVE_REMOTE +/* Includes most of the public stuff that is needed for the remote capture */ +#include +#endif /* HAVE_REMOTE */ + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/libs/WinPcap-413-173-b4/Include/pcap/sll.h b/libs/WpdPack_4_1_2/Include/pcap/sll.h similarity index 98% rename from libs/WinPcap-413-173-b4/Include/pcap/sll.h rename to libs/WpdPack_4_1_2/Include/pcap/sll.h index 38da29f5..e9d5452a 100644 --- a/libs/WinPcap-413-173-b4/Include/pcap/sll.h +++ b/libs/WpdPack_4_1_2/Include/pcap/sll.h @@ -34,6 +34,8 @@ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. + * + * @(#) $Header: /tcpdump/master/libpcap/pcap/sll.h,v 1.2.2.1 2008-05-30 01:36:06 guy Exp $ (LBL) */ /* diff --git a/libs/WinPcap-413-173-b4/Include/pcap/usb.h b/libs/WpdPack_4_1_2/Include/pcap/usb.h similarity index 60% rename from libs/WinPcap-413-173-b4/Include/pcap/usb.h rename to libs/WpdPack_4_1_2/Include/pcap/usb.h index 83955271..adcd19c0 100644 --- a/libs/WinPcap-413-173-b4/Include/pcap/usb.h +++ b/libs/WpdPack_4_1_2/Include/pcap/usb.h @@ -11,8 +11,8 @@ * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote - * products derived from this software without specific prior written + * 3. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior written * permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS @@ -29,12 +29,14 @@ * * Basic USB data struct * By Paolo Abeni + * + * @(#) $Header: /tcpdump/master/libpcap/pcap/usb.h,v 1.6 2007/09/22 02:06:08 guy Exp $ */ - + #ifndef _PCAP_USB_STRUCTS_H__ #define _PCAP_USB_STRUCTS_H__ -/* +/* * possible transfer mode */ #define URB_TRANSFER_IN 0x80 @@ -52,7 +54,7 @@ /* * USB setup header as defined in USB specification. - * Appears at the front of each Control S-type packet in DLT_USB captures. + * Appears at the front of each packet in DLT_USB captures. */ typedef struct _usb_setup { u_int8_t bmRequestType; @@ -62,13 +64,6 @@ typedef struct _usb_setup { u_int16_t wLength; } pcap_usb_setup; -/* - * Information from the URB for Isochronous transfers. - */ -typedef struct _iso_rec { - int32_t error_count; - int32_t numdesc; -} iso_rec; /* * Header prepended by linux kernel to each event. @@ -91,51 +86,5 @@ typedef struct _usb_header { pcap_usb_setup setup; } pcap_usb_header; -/* - * Header prepended by linux kernel to each event for the 2.6.31 - * and later kernels; for the 2.6.21 through 2.6.30 kernels, the - * "iso_rec" information, and the fields starting with "interval" - * are zeroed-out padding fields. - * - * Appears at the front of each packet in DLT_USB_LINUX_MMAPPED captures. - */ -typedef struct _usb_header_mmapped { - u_int64_t id; - u_int8_t event_type; - u_int8_t transfer_type; - u_int8_t endpoint_number; - u_int8_t device_address; - u_int16_t bus_id; - char setup_flag;/*if !=0 the urb setup header is not present*/ - char data_flag; /*if !=0 no urb data is present*/ - int64_t ts_sec; - int32_t ts_usec; - int32_t status; - u_int32_t urb_len; - u_int32_t data_len; /* amount of urb data really present in this event*/ - union { - pcap_usb_setup setup; - iso_rec iso; - } s; - int32_t interval; /* for Interrupt and Isochronous events */ - int32_t start_frame; /* for Isochronous events */ - u_int32_t xfer_flags; /* copy of URB's transfer flags */ - u_int32_t ndesc; /* number of isochronous descriptors */ -} pcap_usb_header_mmapped; - -/* - * Isochronous descriptors; for isochronous transfers there might be - * one or more of these at the beginning of the packet data. The - * number of descriptors is given by the "ndesc" field in the header; - * as indicated, in older kernels that don't put the descriptors at - * the beginning of the packet, that field is zeroed out, so that field - * can be trusted even in captures from older kernels. - */ -typedef struct _usb_isodesc { - int32_t status; - u_int32_t offset; - u_int32_t len; - u_int8_t pad[4]; -} usb_isodesc; #endif diff --git a/libs/WinPcap-413-173-b4/Include/pcap/vlan.h b/libs/WpdPack_4_1_2/Include/pcap/vlan.h similarity index 95% rename from libs/WinPcap-413-173-b4/Include/pcap/vlan.h rename to libs/WpdPack_4_1_2/Include/pcap/vlan.h index 021f6129..b0cb7949 100644 --- a/libs/WinPcap-413-173-b4/Include/pcap/vlan.h +++ b/libs/WpdPack_4_1_2/Include/pcap/vlan.h @@ -29,6 +29,8 @@ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. + * + * @(#) $Header: /tcpdump/master/libpcap/pcap/vlan.h,v 1.1.2.2 2008-08-06 07:45:59 guy Exp $ */ #ifndef lib_pcap_vlan_h diff --git a/libs/WpdPack_4_1_2/Include/remote-ext.h b/libs/WpdPack_4_1_2/Include/remote-ext.h new file mode 100644 index 00000000..35a2fff6 --- /dev/null +++ b/libs/WpdPack_4_1_2/Include/remote-ext.h @@ -0,0 +1,444 @@ +/* + * Copyright (c) 2002 - 2003 + * NetGroup, Politecnico di Torino (Italy) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Politecnico di Torino nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + + +#ifndef __REMOTE_EXT_H__ +#define __REMOTE_EXT_H__ + + +#ifndef HAVE_REMOTE +#error Please do not include this file directly. Just define HAVE_REMOTE and then include pcap.h +#endif + +// Definition for Microsoft Visual Studio +#if _MSC_VER > 1000 +#pragma once +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/*! + \file remote-ext.h + + The goal of this file it to include most of the new definitions that should be + placed into the pcap.h file. + + It includes all new definitions (structures and functions like pcap_open(). + Some of the functions are not really a remote feature, but, right now, + they are placed here. +*/ + + + +// All this stuff is public +/*! \addtogroup remote_struct + \{ +*/ + + + + +/*! + \brief Defines the maximum buffer size in which address, port, interface names are kept. + + In case the adapter name or such is larger than this value, it is truncated. + This is not used by the user; however it must be aware that an hostname / interface + name longer than this value will be truncated. +*/ +#define PCAP_BUF_SIZE 1024 + + +/*! \addtogroup remote_source_ID + \{ +*/ + + +/*! + \brief Internal representation of the type of source in use (file, + remote/local interface). + + This indicates a file, i.e. the user want to open a capture from a local file. +*/ +#define PCAP_SRC_FILE 2 +/*! + \brief Internal representation of the type of source in use (file, + remote/local interface). + + This indicates a local interface, i.e. the user want to open a capture from + a local interface. This does not involve the RPCAP protocol. +*/ +#define PCAP_SRC_IFLOCAL 3 +/*! + \brief Internal representation of the type of source in use (file, + remote/local interface). + + This indicates a remote interface, i.e. the user want to open a capture from + an interface on a remote host. This does involve the RPCAP protocol. +*/ +#define PCAP_SRC_IFREMOTE 4 + +/*! + \} +*/ + + + +/*! \addtogroup remote_source_string + + The formats allowed by the pcap_open() are the following: + - file://path_and_filename [opens a local file] + - rpcap://devicename [opens the selected device devices available on the local host, without using the RPCAP protocol] + - rpcap://host/devicename [opens the selected device available on a remote host] + - rpcap://host:port/devicename [opens the selected device available on a remote host, using a non-standard port for RPCAP] + - adaptername [to open a local adapter; kept for compability, but it is strongly discouraged] + - (NULL) [to open the first local adapter; kept for compability, but it is strongly discouraged] + + The formats allowed by the pcap_findalldevs_ex() are the following: + - file://folder/ [lists all the files in the given folder] + - rpcap:// [lists all local adapters] + - rpcap://host:port/ [lists the devices available on a remote host] + + Referring to the 'host' and 'port' paramters, they can be either numeric or literal. Since + IPv6 is fully supported, these are the allowed formats: + + - host (literal): e.g. host.foo.bar + - host (numeric IPv4): e.g. 10.11.12.13 + - host (numeric IPv4, IPv6 style): e.g. [10.11.12.13] + - host (numeric IPv6): e.g. [1:2:3::4] + - port: can be either numeric (e.g. '80') or literal (e.g. 'http') + + Here you find some allowed examples: + - rpcap://host.foo.bar/devicename [everything literal, no port number] + - rpcap://host.foo.bar:1234/devicename [everything literal, with port number] + - rpcap://10.11.12.13/devicename [IPv4 numeric, no port number] + - rpcap://10.11.12.13:1234/devicename [IPv4 numeric, with port number] + - rpcap://[10.11.12.13]:1234/devicename [IPv4 numeric with IPv6 format, with port number] + - rpcap://[1:2:3::4]/devicename [IPv6 numeric, no port number] + - rpcap://[1:2:3::4]:1234/devicename [IPv6 numeric, with port number] + - rpcap://[1:2:3::4]:http/devicename [IPv6 numeric, with literal port number] + + \{ +*/ + + +/*! + \brief String that will be used to determine the type of source in use (file, + remote/local interface). + + This string will be prepended to the interface name in order to create a string + that contains all the information required to open the source. + + This string indicates that the user wants to open a capture from a local file. +*/ +#define PCAP_SRC_FILE_STRING "file://" +/*! + \brief String that will be used to determine the type of source in use (file, + remote/local interface). + + This string will be prepended to the interface name in order to create a string + that contains all the information required to open the source. + + This string indicates that the user wants to open a capture from a network interface. + This string does not necessarily involve the use of the RPCAP protocol. If the + interface required resides on the local host, the RPCAP protocol is not involved + and the local functions are used. +*/ +#define PCAP_SRC_IF_STRING "rpcap://" + +/*! + \} +*/ + + + + + +/*! + \addtogroup remote_open_flags + \{ +*/ + +/*! + \brief Defines if the adapter has to go in promiscuous mode. + + It is '1' if you have to open the adapter in promiscuous mode, '0' otherwise. + Note that even if this parameter is false, the interface could well be in promiscuous + mode for some other reason (for example because another capture process with + promiscuous mode enabled is currently using that interface). + On on Linux systems with 2.2 or later kernels (that have the "any" device), this + flag does not work on the "any" device; if an argument of "any" is supplied, + the 'promisc' flag is ignored. +*/ +#define PCAP_OPENFLAG_PROMISCUOUS 1 + +/*! + \brief Defines if the data trasfer (in case of a remote + capture) has to be done with UDP protocol. + + If it is '1' if you want a UDP data connection, '0' if you want + a TCP data connection; control connection is always TCP-based. + A UDP connection is much lighter, but it does not guarantee that all + the captured packets arrive to the client workstation. Moreover, + it could be harmful in case of network congestion. + This flag is meaningless if the source is not a remote interface. + In that case, it is simply ignored. +*/ +#define PCAP_OPENFLAG_DATATX_UDP 2 + + +/*! + \brief Defines if the remote probe will capture its own generated traffic. + + In case the remote probe uses the same interface to capture traffic and to send + data back to the caller, the captured traffic includes the RPCAP traffic as well. + If this flag is turned on, the RPCAP traffic is excluded from the capture, so that + the trace returned back to the collector is does not include this traffic. +*/ +#define PCAP_OPENFLAG_NOCAPTURE_RPCAP 4 + +/*! + \brief Defines if the local adapter will capture its own generated traffic. + + This flag tells the underlying capture driver to drop the packets that were sent by itself. + This is usefult when building applications like bridges, that should ignore the traffic + they just sent. +*/ +#define PCAP_OPENFLAG_NOCAPTURE_LOCAL 8 + +/*! + \brief This flag configures the adapter for maximum responsiveness. + + In presence of a large value for nbytes, WinPcap waits for the arrival of several packets before + copying the data to the user. This guarantees a low number of system calls, i.e. lower processor usage, + i.e. better performance, which is good for applications like sniffers. If the user sets the + PCAP_OPENFLAG_MAX_RESPONSIVENESS flag, the capture driver will copy the packets as soon as the application + is ready to receive them. This is suggested for real time applications (like, for example, a bridge) + that need the best responsiveness.*/ +#define PCAP_OPENFLAG_MAX_RESPONSIVENESS 16 + +/*! + \} +*/ + + +/*! + \addtogroup remote_samp_methods + \{ +*/ + +/*! + \brief No sampling has to be done on the current capture. + + In this case, no sampling algorithms are applied to the current capture. +*/ +#define PCAP_SAMP_NOSAMP 0 + +/*! + \brief It defines that only 1 out of N packets must be returned to the user. + + In this case, the 'value' field of the 'pcap_samp' structure indicates the + number of packets (minus 1) that must be discarded before one packet got accepted. + In other words, if 'value = 10', the first packet is returned to the caller, while + the following 9 are discarded. +*/ +#define PCAP_SAMP_1_EVERY_N 1 + +/*! + \brief It defines that we have to return 1 packet every N milliseconds. + + In this case, the 'value' field of the 'pcap_samp' structure indicates the 'waiting + time' in milliseconds before one packet got accepted. + In other words, if 'value = 10', the first packet is returned to the caller; the next + returned one will be the first packet that arrives when 10ms have elapsed. +*/ +#define PCAP_SAMP_FIRST_AFTER_N_MS 2 + +/*! + \} +*/ + + +/*! + \addtogroup remote_auth_methods + \{ +*/ + +/*! + \brief It defines the NULL authentication. + + This value has to be used within the 'type' member of the pcap_rmtauth structure. + The 'NULL' authentication has to be equal to 'zero', so that old applications + can just put every field of struct pcap_rmtauth to zero, and it does work. +*/ +#define RPCAP_RMTAUTH_NULL 0 +/*! + \brief It defines the username/password authentication. + + With this type of authentication, the RPCAP protocol will use the username/ + password provided to authenticate the user on the remote machine. If the + authentication is successful (and the user has the right to open network devices) + the RPCAP connection will continue; otherwise it will be dropped. + + This value has to be used within the 'type' member of the pcap_rmtauth structure. +*/ +#define RPCAP_RMTAUTH_PWD 1 + +/*! + \} +*/ + + + + +/*! + + \brief This structure keeps the information needed to autheticate + the user on a remote machine. + + The remote machine can either grant or refuse the access according + to the information provided. + In case the NULL authentication is required, both 'username' and + 'password' can be NULL pointers. + + This structure is meaningless if the source is not a remote interface; + in that case, the functions which requires such a structure can accept + a NULL pointer as well. +*/ +struct pcap_rmtauth +{ + /*! + \brief Type of the authentication required. + + In order to provide maximum flexibility, we can support different types + of authentication based on the value of this 'type' variable. The currently + supported authentication methods are defined into the + \link remote_auth_methods Remote Authentication Methods Section\endlink. + + */ + int type; + /*! + \brief Zero-terminated string containing the username that has to be + used on the remote machine for authentication. + + This field is meaningless in case of the RPCAP_RMTAUTH_NULL authentication + and it can be NULL. + */ + char *username; + /*! + \brief Zero-terminated string containing the password that has to be + used on the remote machine for authentication. + + This field is meaningless in case of the RPCAP_RMTAUTH_NULL authentication + and it can be NULL. + */ + char *password; +}; + + +/*! + \brief This structure defines the information related to sampling. + + In case the sampling is requested, the capturing device should read + only a subset of the packets coming from the source. The returned packets depend + on the sampling parameters. + + \warning The sampling process is applied after the filtering process. + In other words, packets are filtered first, then the sampling process selects a + subset of the 'filtered' packets and it returns them to the caller. +*/ +struct pcap_samp +{ + /*! + Method used for sampling. Currently, the supported methods are listed in the + \link remote_samp_methods Sampling Methods Section\endlink. + */ + int method; + + /*! + This value depends on the sampling method defined. For its meaning, please check + at the \link remote_samp_methods Sampling Methods Section\endlink. + */ + int value; +}; + + + + +//! Maximum lenght of an host name (needed for the RPCAP active mode) +#define RPCAP_HOSTLIST_SIZE 1024 + + +/*! + \} +*/ // end of public documentation + + +// Exported functions + + + +/** \name New WinPcap functions + + This section lists the new functions that are able to help considerably in writing + WinPcap programs because of their easiness of use. + */ +//\{ +pcap_t *pcap_open(const char *source, int snaplen, int flags, int read_timeout, struct pcap_rmtauth *auth, char *errbuf); +int pcap_createsrcstr(char *source, int type, const char *host, const char *port, const char *name, char *errbuf); +int pcap_parsesrcstr(const char *source, int *type, char *host, char *port, char *name, char *errbuf); +int pcap_findalldevs_ex(char *source, struct pcap_rmtauth *auth, pcap_if_t **alldevs, char *errbuf); +struct pcap_samp *pcap_setsampling(pcap_t *p); + +//\} +// End of new winpcap functions + + + +/** \name Remote Capture functions + */ +//\{ +SOCKET pcap_remoteact_accept(const char *address, const char *port, const char *hostlist, char *connectinghost, struct pcap_rmtauth *auth, char *errbuf); +int pcap_remoteact_list(char *hostlist, char sep, int size, char *errbuf); +int pcap_remoteact_close(const char *host, char *errbuf); +void pcap_remoteact_cleanup(); +//\} +// End of remote capture functions + +#ifdef __cplusplus +} +#endif + + +#endif + diff --git a/libs/WpdPack_4_1_2/Lib/Packet.lib b/libs/WpdPack_4_1_2/Lib/Packet.lib new file mode 100644 index 0000000000000000000000000000000000000000..81618bc8ca221dd99e52b0289ae4692a01f63d0b GIT binary patch literal 8450 zcmcIp&2JM|5TAVT(Lh5&zQ0XCKra-6O@f4?d{QEu5ZR{XW;XVwEVaE`+o450^v0>; z#EE+)#EAo!-Z*ih5|!wsQV*5*6LR22XZG#BuYFz|oUAnQ?##UTy^onU^IlF}v#N!A z^Icyj)aTO7>}+x_nY?^a<%ge_X6J&}yIlaV4A5N#=y?jz`xanip3%@Q0MWo5Mk6nf zk2Ly$(bzTsQQtJ9;Vl57{!T`tlcDC1hSB7G!G_lL5|2_8W zeLlaozIiK?%df0vmosadxm%gMXBB?1>yXcH+)k&Xa`=@gFmdk2?TwrHmBrj5 zX=kfyRUdw9S8I-2K{HO-%Quj*7T?%)qqfZFnk!Z3fn9B+uSr>}Tb^B6ELvXOuBzQp z1WY$;SBmUSRh9X=X04Gb3YhLQ%ui8etGM{N??1GJx zXELjan96d=t=YzjQzcA0Yu9i5bloXMW?2z1U0m6~?uJ#iwfTz(S(}XgeTf`K}AU-_jawa z?HWdg{S77D_PSHaxy!EiP#qn0LP)r68pG-XyP}N_XHAj>w(G9PLSM5i@p&&+cFG>P zou+Eng+S3wJ7q^-V(c<$ha#rGRwLeOrDzvb+lqkOPP?wRghE*w+w1GsVd(W3wdA>Z23A5S_@U#cuZ7;z52*BRG<^~oGiSrXFB&_VNhyMKiK$qTqDfO% zVoHIo z{sJUkwc~FuW<+|r#GuYYU(XR_kvV#(o9AAiTz3jpx8`ow6X!EuCDLmfH+`x8hrp;M zS-`~azhRYtiI{i-1-npi%O3Xi-0NT9BleHsQ44ygbL|igc>%!h?!A!X4~|-Ngq$Sl zAOpBgN^ppewFH02I=~$NCag{T+RuZpG^Ne?$xJG|n;<`F_x=f%P82zLu4S`-I zKe-%=$WML`KZ0NK6SBMS>)*_(V%3H--QXTUxJZ+;Hai=MuD=l=Zq{O=D-}$T@46IS z@*_o8GUSuP{uO=%zxz77&CDp)!woNB_UwnL%i)a~-HcIarrT)GI^~bMx=Ql@mJijb$1uZTrjw)!P z*lh(b8E&Ln6ygCLs{|f}{CLp<_qsWT0x45xRYXJ;;<-I9rxnDwN^ep@3~!MR3T;Y46L(WG+W!N((TxBA literal 0 HcmV?d00001 diff --git a/libs/WpdPack_4_1_2/Lib/libpacket.a b/libs/WpdPack_4_1_2/Lib/libpacket.a new file mode 100644 index 0000000000000000000000000000000000000000..4d49131f09675b3588d36e98512446248089a84e GIT binary patch literal 20814 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 E01M8b=Kufz literal 0 HcmV?d00001 diff --git a/libs/WpdPack_4_1_2/Lib/wpcap.lib b/libs/WpdPack_4_1_2/Lib/wpcap.lib new file mode 100644 index 0000000000000000000000000000000000000000..f832e0445b5c7dafe5a0f887262064265ba2b293 GIT binary patch literal 19320 zcmdU0O>9(05-uRW4k3h)gbS|j4}Uz#t>t&Y%Y)S%rl;4JTp5pCTuoh zr6{Lp73IKQa^QrbD7U>tdx#=VoK`4`_7Fwch+_^p| zS6BDfKh<5`)$NUA`Fde~ylZ#2`x_V>8Oe?2azi67zdwrRhWbZ!@NyRb{1af)Ai(As zfGr;YjQ*f$?=%3>0gMxkW0+_MhKYuM)O4~3fN1X*n)>bm5FNa!=@dc`jeVwR->(2f zr@qm2dK`f0IF?CtuvgRRPmzx_yk67JDF8*E;}+y2(SaM92H(eeAPs$`X>=9#JJEGb+ptfFdaw>e+iq*x`Yiy_8LSsk zPhHb?lqKrHekD4vPE+rP*gr_)Sa+hqpEMo(8T%RO(3GZ$?*SB*@r$$_@rd?+t!Zo@ zjvvxV99NR-y@~cP&F-(99u}FD=x9fbs_AYW3=3tr%W|L_8r?37d|TiVLY~ zEvy9P(zP&>67jfHb#AU)syKqo60(JIwPA#!ut>cUHY?T2Y`I#v8X-CyA=yYsIvgR1 z{ec~7x`z7J_EoXesO6i5`6%5+g-kun7o&6?6lsXL*a+*hi*s{fJrauXgmly&fhf^s z3E4_`-3*NminK;E-)tB(9ge34;dLpXqEaSo&XvkdS!WX$Qnj#NubO6=h)8cV>r%o- zg$#}#%0zWB5s_Y~F4Rh8)(8_zN(7avo*HT-qioC+@^ketEL4l8NE;P0#e6f5+G>={ zMukkHlCL%9t7a5zRLGPXLF4Uwtri*$kqjZXkpEM)9$X9SjZ(D|bw-RQrAw8hw96CH zIB?un6^x}-su3UwQbeQ|7jfC3NgauZcw9Wn7pTvr=@psX2-v zPKxSZ5_y=PnoE_N$P;l>b2RJuN@JnKx{58)m9q&VA1x?B*qjgRVZ~&L@q{!@+G|$O zMuiOZZ>iF(7OFMdSjiHy%7zr}qAKD-YOYi%Vt=CNK_NilssaMOp#PS~G0a z3#jr@2fHjGTg%rQuBgKil48`YO^Y*yd_7#KHp6_O8RQFvux8Xd$xh8vE;W)lG&5CR zE{YZ+xiZSMFke|T8koY@IHd|2`Ept5435N=dVT?dRHmqxp2NoQb4*B>?S@fVJ*ax; z#(FH|ab7p_3pF&AS9m=V93eT2qkmOwwM1MS~zh^OYj+6w(qzK0R@x9xxG+j`OQ@O)YAwXd4wWGVhD0>`FwwU%QhSy`Bsht3yBaP(% ze(43MpxoU(=zYOFA0d4{0I&g1$&>iKwHu(>kDdVhcHwsomUZU@z?X;clzbTAW2BWw z0NzC^?gw}e%b&*d8(7cxv5c>V09Ik$uOp3b!!mjRZsYgctytC>fI7y0LnY-36{Zf7=>XNfjzJf#$Z1jgA3T1 zPr!??4yIuo*25%B!C6=dn_&}df!E4q}7h2Vp-SXex#;FLwXebxMB`=5C9I^9PV8s(AynihM(q47Hlj}F34Yx5 z5?lA>X`GVyBqM>5uRR)q`2Y)!$;$8I=7z=ffJr=%AQ6tTb`!4lnRETAExQINoiFRt&`kb6)zb#5OTk(WXF`3LzuyeV>Hxo-xE;5&wx*TA8>_O0# zmkw~5!tPVa^mwZsG2>X)OyT6P_FY#r`5rUt)woR?W2mOSw@rK-bJ`>O{@4yI%WYCPuf1kaI9X$ zNp*3w@H`qDr?aNs+&Oo2#&Hz0Why()^2D`)wqGhaX1N5xvM@q!8M4BUSkpzx4EynIBam!|lli=G+Mk}qYj1rahg&EpnNTMnkZ z6X;YS&b;BMmJ!Md!^x2hGOWz7`V;-AEPO=~#ptsfeItO|rMA!b4@pA?b9;q` zELR%xFI6w99i(bVQ6qBcEkNU%@)Gd`Z&9+L3Wy4UP

ii zt(#u7(X5F2?uWKuz$0Zt8OJO)7!6qr;{`-mW-ub#&;iOoI?D5ivfQBP z?YRYMzrS+nDC-bqg+bw+zXjsZL+Gm53p&N2Dhi z$sPL*kF_J!=aoO!_oo5a`Wl^G6SWCz8X~fDnjyWbFWEo#2>_LrfpY(yof(M2GuM&^&tn45RTGq64I1es%5IBD_q*{iK;u2FYa$7I6mN$G=TOG^=4LlDoZVf8Mpw z8`>v5@1R6iH=VS|vlhSLVkx(ih2l^~-N<=b^b_Mk`m)-zIUnA+Dq&#M2jgMyAnZo(4AD0*qp9b5G`pq6hCIM%0W!8nw$ z=X{p)l{75!sW3?UZSYVll0YzKHbPhY;~;29sU1>;c0zRY>-XSai;ZdbYZCG=to zq}NeHHZoF*W4Z&(oJadNNlfy2cY@QRZM55d-N8}r^iGgGy0KXzv2)UbaVVp147WIa zljmv+W4U(#jA6SoBbv{mY-KcYyI`T(Ull#QxQ(&o#f1gqP{wxoR*xQmS-4#qq68LyTjtHxo|KwtJB;6=J(Y@(tt?ceEx_3CTXEKlvOJ{NFy#1JrL^z$>YNrb&<@)H8*An#mck^5f7vwn&$@= zl0z9sY}m8Q7*9o{hYgHkLs{`!j2wCD52oO$CleN~{Wa0!-I!oJ@fxE8EMH$9a z4-3eltbOUxmcuD{<_QVov_E zH5QOV8As7)wU0Y^#`|rDZ3!!<#~Pe)(9AO+ZjXh{+AKB$jT}9S zHBXm1z-lq?X#aRxVyQ<_9pHHO31=jZeQssJ+SYsD$#znrB{r%InpH16?K&%w>>DwL zSc1lTMr+DJqo>Fgh(lRh<ClhvL%JxCqKEC=kR{Bh7JE3l N*?W_a?2Af)@;}RMSJ?mn literal 0 HcmV?d00001 diff --git a/libs/WpdPack_4_1_2/Lib/x64/Packet.lib b/libs/WpdPack_4_1_2/Lib/x64/Packet.lib new file mode 100644 index 0000000000000000000000000000000000000000..30c15405037e32d45233593bb67ac27f66c5f3de GIT binary patch literal 8290 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 -function redirt(thisarea) { thisurl = '' + thisarea; window.location=thisurl; } - - - - - - - + + + + + + + diff --git a/libs/WpdPack_4_1_2/docs/html/Packet_8h.html b/libs/WpdPack_4_1_2/docs/html/Packet_8h.html new file mode 100644 index 00000000..7f1f95d8 --- /dev/null +++ b/libs/WpdPack_4_1_2/docs/html/Packet_8h.html @@ -0,0 +1,201 @@ + + + + +WinPcap: Packet.h File Reference + + + + + +

+
+

Packet.h File Reference

#include "win_bpf.h"
+ +

Go to the source code of this file.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Data Structures

struct  packet_file_header
 Header of a libpcap dump file. More...
struct  sf_pkthdr
 Header associated to a packet in the driver's buffer when the driver is in dump mode. Similar to the bpf_hdr structure, but simpler. More...
struct  _PACKET_OID_DATA
 Structure containing an OID request. More...
struct  _INTERNAL_REQUEST
 Stores an OID request. More...
struct  _PACKET_RESERVED
 Contains a NDIS packet. More...
struct  _DEVICE_EXTENSION
 Port device extension. More...
struct  __CPU_Private_Data
 Kernel buffer of each CPU. More...
struct  _OPEN_INSTANCE
 Contains the state of a running instance of the NPF driver. More...
struct  PacketHeader
 Structure prepended to each packet in the kernel buffer pool. More...

Defines

#define MAX_REQUESTS   32
 Maximum number of simultaneous IOCTL requests.
#define Packet_ALIGNMENT   sizeof(int)
 Alignment macro. Defines the alignment size.
#define Packet_WORDALIGN(x)   (((x)+(Packet_ALIGNMENT-1))&~(Packet_ALIGNMENT-1))
 even multiple of Packet_ALIGNMENT.
#define KERNEL_EVENT_NAMESPACE   L"\\BaseNamedObjects\\"
#define MODE_CAPT   0x0
 Capture working mode.
#define MODE_STAT   0x1
 Statistical working mode.
#define MODE_MON   0x2
 Kernel monitoring mode.
#define MODE_DUMP   0x10
 Kernel dump working mode.
#define IMMEDIATE   1
 Immediate timeout. Forces a read call to return immediately.
#define NDIS_FLAGS_SKIP_LOOPBACK_W2K   0x400
 This is an undocumented flag for NdisSetPacketFlags() that allows to disable loopback reception.
#define TCPDUMP_MAGIC   0xa1b2c3d4
 Libpcap magic number. Used by programs like tcpdump to recognize a driver's generated dump file.
#define PCAP_VERSION_MAJOR   2
 Major libpcap version of the dump file. Used by programs like tcpdump to recognize a driver's generated dump file.
#define PCAP_VERSION_MINOR   4
 Minor libpcap version of the dump file. Used by programs like tcpdump to recognize a driver's generated dump file.
#define NPF_DISABLE_LOOPBACK   1
 Tells the driver to drop the packets sent by itself. This is usefult when building applications like bridges.
#define NPF_ENABLE_LOOPBACK   2
 Tells the driver to capture the packets sent by itself.
#define C_ASSERT(a)
#define RESERVED(_p)   ((PPACKET_RESERVED)((_p)->ProtocolReserved))
 Macro to obtain a NDIS_PACKET from a PACKET_RESERVED.
#define TRANSMIT_PACKETS   256
 of packets that can be transmitted at the same time or with a single call to NdisSendPackets.
#define EXIT_SUCCESS(quantity)
 Macro used in the I/O routines to return the control to user-mode with a success status.
#define EXIT_FAILURE(quantity)
 Macro used in the I/O routines to return the control to user-mode with a failure status.

Typedefs

typedef struct _PACKET_OID_DATA PACKET_OID_DATA
 Structure containing an OID request.
typedef struct _PACKET_OID_DATAPPACKET_OID_DATA
typedef struct _INTERNAL_REQUEST INTERNAL_REQUEST
 Stores an OID request.
typedef struct _INTERNAL_REQUESTPINTERNAL_REQUEST
typedef struct _PACKET_RESERVED PACKET_RESERVED
 Contains a NDIS packet.
typedef struct _PACKET_RESERVEDPPACKET_RESERVED
typedef struct _DEVICE_EXTENSION DEVICE_EXTENSION
 Port device extension.
typedef struct _DEVICE_EXTENSIONPDEVICE_EXTENSION
typedef struct __CPU_Private_Data CpuPrivateData
 Kernel buffer of each CPU.
typedef struct _OPEN_INSTANCE OPEN_INSTANCE
 Contains the state of a running instance of the NPF driver.
typedef struct _OPEN_INSTANCEPOPEN_INSTANCE

Enumerations

enum  ADAPTER_BINDING_STATUS { ADAPTER_UNBOUND, +ADAPTER_BOUND, +ADAPTER_UNBINDING + }

Functions

 C_ASSERT (sizeof(PACKET_OID_DATA)==12)
NTSTATUS DriverEntry (IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath)
 The initialization routine of the driver.
PWCHAR getAdaptersList (VOID)
 Returns the list of the MACs available on the system.
PKEY_VALUE_PARTIAL_INFORMATION getTcpBindings (VOID)
 Returns the MACs that bind to TCP/IP.
BOOLEAN NPF_CreateDevice (IN OUT PDRIVER_OBJECT adriverObjectP, IN PUNICODE_STRING amacNameP)
 Creates a device for a given MAC.
NTSTATUS NPF_Open (IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
 Opens a new instance of the driver.
VOID NPF_OpenAdapterComplete (IN NDIS_HANDLE ProtocolBindingContext, IN NDIS_STATUS Status, IN NDIS_STATUS OpenErrorStatus)
 Ends the opening of an adapter.
NTSTATUS NPF_Cleanup (IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
 Closes an instance of the driver.
NTSTATUS NPF_Close (IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
VOID NPF_CloseAdapterComplete (IN NDIS_HANDLE ProtocolBindingContext, IN NDIS_STATUS Status)
 Ends the closing of an adapter.
NDIS_STATUS NPF_tap (IN NDIS_HANDLE ProtocolBindingContext, IN NDIS_HANDLE MacReceiveContext, IN PVOID HeaderBuffer, IN UINT HeaderBufferSize, IN PVOID LookAheadBuffer, IN UINT LookaheadBufferSize, IN UINT PacketSize)
 Callback invoked by NDIS when a packet arrives from the network.
VOID NPF_TransferDataComplete (IN NDIS_HANDLE ProtocolBindingContext, IN PNDIS_PACKET Packet, IN NDIS_STATUS Status, IN UINT BytesTransferred)
 Ends the transfer of a packet.
VOID NPF_ReceiveComplete (IN NDIS_HANDLE ProtocolBindingContext)
 Callback function that signals the end of a packet reception.
NTSTATUS NPF_IoControl (IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
 Handles the IOCTL calls.
VOID NPF_RequestComplete (IN NDIS_HANDLE ProtocolBindingContext, IN PNDIS_REQUEST pRequest, IN NDIS_STATUS Status)
 Ends an OID request.
NTSTATUS NPF_Write (IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
 Writes a raw packet to the network.
INT NPF_BufferedWrite (IN PIRP Irp, IN PCHAR UserBuff, IN ULONG UserBuffSize, BOOLEAN sync)
 Writes a buffer of raw packets to the network.
VOID NPF_WaitEndOfBufferedWrite (POPEN_INSTANCE Open)
 Waits the completion of all the sends performed by NPF_BufferedWrite.
VOID NPF_SendComplete (IN NDIS_HANDLE ProtocolBindingContext, IN PNDIS_PACKET pPacket, IN NDIS_STATUS Status)
 Ends a send operation.
VOID NPF_ResetComplete (IN NDIS_HANDLE ProtocolBindingContext, IN NDIS_STATUS Status)
 Ends a reset of the adapter.
VOID NPF_Status (IN NDIS_HANDLE ProtocolBindingContext, IN NDIS_STATUS Status, IN PVOID StatusBuffer, IN UINT StatusBufferSize)
 Callback for NDIS StatusHandler. Not used by NPF.
VOID NPF_StatusComplete (IN NDIS_HANDLE ProtocolBindingContext)
 Callback for NDIS StatusCompleteHandler. Not used by NPF.
VOID NPF_Unload (IN PDRIVER_OBJECT DriverObject)
 Function called by the OS when NPF is unloaded.
NTSTATUS NPF_Read (IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
 Function that serves the user's reads.
NTSTATUS NPF_ReadRegistry (IN PWSTR *MacDriverName, IN PWSTR *PacketDriverName, IN PUNICODE_STRING RegistryPath)
 Reads the registry keys associated woth NPF if the driver is manually installed via the control panel.
NTSTATUS NPF_QueryRegistryRoutine (IN PWSTR ValueName, IN ULONG ValueType, IN PVOID ValueData, IN ULONG ValueLength, IN PVOID Context, IN PVOID EntryContext)
 Function used by NPF_ReadRegistry() to quesry the registry keys associated woth NPF if the driver is manually installed via the control panel.
VOID NPF_BindAdapter (OUT PNDIS_STATUS Status, IN NDIS_HANDLE BindContext, IN PNDIS_STRING DeviceName, IN PVOID SystemSpecific1, IN PVOID SystemSpecific2)
 Callback for NDIS BindAdapterHandler. Not used by NPF.
VOID NPF_UnbindAdapter (OUT PNDIS_STATUS Status, IN NDIS_HANDLE ProtocolBindingContext, IN NDIS_HANDLE UnbindContext)
 Callback for NDIS UnbindAdapterHandler.
NTSTATUS NPF_OpenDumpFile (POPEN_INSTANCE Open, PUNICODE_STRING fileName, BOOLEAN append)
 Creates the file that will receive the packets when the driver is in dump mode.
NTSTATUS NPF_StartDump (POPEN_INSTANCE Open)
 Starts dump to file.
VOID NPF_DumpThread (PVOID Open)
 The dump thread.
NTSTATUS NPF_SaveCurrentBuffer (POPEN_INSTANCE Open)
 Saves the content of the packet buffer to the file associated with current instance.
VOID NPF_WriteDumpFile (PFILE_OBJECT FileObject, PLARGE_INTEGER Offset, ULONG Length, PMDL Mdl, PIO_STATUS_BLOCK IoStatusBlock)
 Writes a block of packets on the dump file.
NTSTATUS NPF_CloseDumpFile (POPEN_INSTANCE Open)
 Closes the dump file associated with an instance of the driver.
BOOLEAN NPF_StartUsingBinding (IN POPEN_INSTANCE pOpen)
VOID NPF_StopUsingBinding (IN POPEN_INSTANCE pOpen)
VOID NPF_CloseBinding (IN POPEN_INSTANCE pOpen)
BOOLEAN NPF_StartUsingOpenInstance (IN POPEN_INSTANCE pOpen)
VOID NPF_StopUsingOpenInstance (IN POPEN_INSTANCE pOpen)
VOID NPF_CloseOpenInstance (IN POPEN_INSTANCE pOpen)
NTSTATUS NPF_GetDeviceMTU (IN POPEN_INSTANCE pOpen, IN PIRP pIrp, OUT PUINT pMtu)
UINT GetBuffOccupation (POPEN_INSTANCE Open)
 Returns the amount of bytes present in the packet buffer.

Variables

ULONG g_NCpu
NDIS_HANDLE g_NdisProtocolHandle
struct time_conv G_Start_Time
UINT g_SendPacketFlags
+
+ +
+

+documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2009 +CACE Technologies. All rights reserved.

diff --git a/libs/WpdPack_4_1_2/docs/html/Packet_8h_source.html b/libs/WpdPack_4_1_2/docs/html/Packet_8h_source.html new file mode 100644 index 00000000..f4293eb7 --- /dev/null +++ b/libs/WpdPack_4_1_2/docs/html/Packet_8h_source.html @@ -0,0 +1,572 @@ + + + + +WinPcap: Packet.h Source File + + + + + + + +
+

+documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2009 +CACE Technologies. All rights reserved.

diff --git a/libs/WpdPack_4_1_2/docs/html/Win32-Extensions_8h.html b/libs/WpdPack_4_1_2/docs/html/Win32-Extensions_8h.html new file mode 100644 index 00000000..038ab6d7 --- /dev/null +++ b/libs/WpdPack_4_1_2/docs/html/Win32-Extensions_8h.html @@ -0,0 +1,700 @@ + + + + +WinPcap: Win32-Extensions.h File Reference + + + + + + +
+

Win32-Extensions.h File Reference

+

Go to the source code of this file.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Data Structures

struct  pcap_send_queue
 A queue of raw packets that will be sent to the network with pcap_sendqueue_transmit(). More...

Defines

#define AIRPCAP_HANDLE__EAE405F5_0171_9592_B3C2_C19EC426AD34__DEFINED_
 This typedef is a support for the pcap_get_airpcap_handle() function.
#define BPF_MEM_EX_IMM   0xc0
#define BPF_MEM_EX_IND   0xe0
#define BPF_MEM_EX   0xc0
#define BPF_TME   0x08
#define BPF_LOOKUP   0x90
#define BPF_EXECUTE   0xa0
#define BPF_INIT   0xb0
#define BPF_VALIDATE   0xc0
#define BPF_SET_ACTIVE   0xd0
#define BPF_RESET   0xe0
#define BPF_SET_MEMORY   0x80
#define BPF_GET_REGISTER_VALUE   0x70
#define BPF_SET_REGISTER_VALUE   0x60
#define BPF_SET_WORKING   0x50
#define BPF_SET_ACTIVE_READ   0x40
#define BPF_SET_AUTODELETION   0x30
#define BPF_SEPARATION   0xff

Typedefs

typedef struct pcap_send_queue pcap_send_queue
typedef struct _AirpcapHandle * PAirpcapHandle

Functions

pcap_send_queuepcap_sendqueue_alloc (u_int memsize)
void pcap_sendqueue_destroy (pcap_send_queue *queue)
int pcap_sendqueue_queue (pcap_send_queue *queue, const struct pcap_pkthdr *pkt_header, const u_char *pkt_data)
u_int pcap_sendqueue_transmit (pcap_t *p, pcap_send_queue *queue, int sync)
HANDLE pcap_getevent (pcap_t *p)
struct pcap_statpcap_stats_ex (pcap_t *p, int *pcap_stat_size)
int pcap_setuserbuffer (pcap_t *p, int size)
int pcap_live_dump (pcap_t *p, char *filename, int maxsize, int maxpacks)
int pcap_live_dump_ended (pcap_t *p, int sync)
int pcap_offline_filter (struct bpf_program *prog, const struct pcap_pkthdr *header, const u_char *pkt_data)
int pcap_start_oem (char *err_str, int flags)
PAirpcapHandle pcap_get_airpcap_handle (pcap_t *p)
+

Define Documentation

+ +
+
+ + + + +
#define AIRPCAP_HANDLE__EAE405F5_0171_9592_B3C2_C19EC426AD34__DEFINED_
+
+
+ +

This typedef is a support for the pcap_get_airpcap_handle() function.

+ +

Definition at line 59 of file Win32-Extensions.h.

+ +
+
+ +
+
+ + + + +
#define BPF_EXECUTE   0xa0
+
+
+ +

Definition at line 71 of file Win32-Extensions.h.

+ +
+
+ +
+
+ + + + +
#define BPF_GET_REGISTER_VALUE   0x70
+
+
+ +

Definition at line 77 of file Win32-Extensions.h.

+ +
+
+ +
+
+ + + + +
#define BPF_INIT   0xb0
+
+
+ +

Definition at line 72 of file Win32-Extensions.h.

+ +
+
+ +
+
+ + + + +
#define BPF_LOOKUP   0x90
+
+
+ +

Definition at line 70 of file Win32-Extensions.h.

+ +
+
+ +
+
+ + + + +
#define BPF_MEM_EX   0xc0
+
+
+ +

Definition at line 67 of file Win32-Extensions.h.

+ +
+
+ +
+
+ + + + +
#define BPF_MEM_EX_IMM   0xc0
+
+
+ +

Definition at line 63 of file Win32-Extensions.h.

+ +
+
+ +
+
+ + + + +
#define BPF_MEM_EX_IND   0xe0
+
+
+ +

Definition at line 64 of file Win32-Extensions.h.

+ +
+
+ +
+
+ + + + +
#define BPF_RESET   0xe0
+
+
+ +

Definition at line 75 of file Win32-Extensions.h.

+ +
+
+ +
+
+ + + + +
#define BPF_SEPARATION   0xff
+
+
+ +

Definition at line 82 of file Win32-Extensions.h.

+ +
+
+ +
+
+ + + + +
#define BPF_SET_ACTIVE   0xd0
+
+
+ +

Definition at line 74 of file Win32-Extensions.h.

+ +
+
+ +
+
+ + + + +
#define BPF_SET_ACTIVE_READ   0x40
+
+
+ +

Definition at line 80 of file Win32-Extensions.h.

+ +
+
+ +
+
+ + + + +
#define BPF_SET_AUTODELETION   0x30
+
+
+ +

Definition at line 81 of file Win32-Extensions.h.

+ +
+
+ +
+
+ + + + +
#define BPF_SET_MEMORY   0x80
+
+
+ +

Definition at line 76 of file Win32-Extensions.h.

+ +
+
+ +
+
+ + + + +
#define BPF_SET_REGISTER_VALUE   0x60
+
+
+ +

Definition at line 78 of file Win32-Extensions.h.

+ +
+
+ +
+
+ + + + +
#define BPF_SET_WORKING   0x50
+
+
+ +

Definition at line 79 of file Win32-Extensions.h.

+ +
+
+ +
+
+ + + + +
#define BPF_TME   0x08
+
+
+ +

Definition at line 68 of file Win32-Extensions.h.

+ +
+
+ +
+
+ + + + +
#define BPF_VALIDATE   0xc0
+
+
+ +

Definition at line 73 of file Win32-Extensions.h.

+ +
+
+

Typedef Documentation

+ +
+
+ + + + +
typedef struct _AirpcapHandle* PAirpcapHandle
+
+
+ +

Definition at line 60 of file Win32-Extensions.h.

+ +
+
+ +
+
+ + + + +
typedef struct pcap_send_queue pcap_send_queue
+
+
+ +

Definition at line 53 of file Win32-Extensions.h.

+ +
+
+

Function Documentation

+ +
+
+ + + + + + + + + +
PAirpcapHandle pcap_get_airpcap_handle (pcap_t p ) 
+
+
+ +
+
+ +
+
+ + + + + + + + + +
HANDLE pcap_getevent (pcap_t p ) 
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int pcap_live_dump (pcap_t p,
char *  filename,
int  maxsize,
int  maxpacks 
)
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
int pcap_live_dump_ended (pcap_t p,
int  sync 
)
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
int pcap_offline_filter (struct bpf_program *  prog,
const struct pcap_pkthdr header,
const u_char *  pkt_data 
)
+
+
+ +
+
+ +
+
+ + + + + + + + + +
pcap_send_queue* pcap_sendqueue_alloc (u_int  memsize ) 
+
+
+ +
+
+ +
+
+ + + + + + + + + +
void pcap_sendqueue_destroy (pcap_send_queue queue ) 
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
int pcap_sendqueue_queue (pcap_send_queue queue,
const struct pcap_pkthdr pkt_header,
const u_char *  pkt_data 
)
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
u_int pcap_sendqueue_transmit (pcap_t p,
pcap_send_queue queue,
int  sync 
)
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
int pcap_setuserbuffer (pcap_t p,
int  size 
)
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
int pcap_start_oem (char *  err_str,
int  flags 
)
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
struct pcap_stat* pcap_stats_ex (pcap_t p,
int *  pcap_stat_size 
) [read]
+
+
+ +
+
+
+ +
+

+documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2009 +CACE Technologies. All rights reserved.

diff --git a/libs/WpdPack_4_1_2/docs/html/Win32-Extensions_8h_source.html b/libs/WpdPack_4_1_2/docs/html/Win32-Extensions_8h_source.html new file mode 100644 index 00000000..aaf88049 --- /dev/null +++ b/libs/WpdPack_4_1_2/docs/html/Win32-Extensions_8h_source.html @@ -0,0 +1,139 @@ + + + + +WinPcap: Win32-Extensions.h Source File + + + + + + + +
+

+documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2009 +CACE Technologies. All rights reserved.

diff --git a/libs/WpdPack_4_1_2/docs/html/annotated.html b/libs/WpdPack_4_1_2/docs/html/annotated.html new file mode 100644 index 00000000..5db948af --- /dev/null +++ b/libs/WpdPack_4_1_2/docs/html/annotated.html @@ -0,0 +1,70 @@ + + + + +WinPcap: Data Structures + + + + + + +
+

Data Structures

Here are the data structures with brief descriptions: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
__CPU_Private_DataKernel buffer of each CPU
_DEVICE_EXTENSIONPort device extension
_INTERNAL_REQUESTStores an OID request
_OPEN_INSTANCEContains the state of a running instance of the NPF driver
_PACKET_OID_DATAStructure containing an OID request
_PACKET_RESERVEDContains a NDIS packet
active_pars
activehostsKeeps a list of all the opened connections in the active mode
binary_streamA stream of X86 binary code
daemon_slparsStructure that keeps the parameters needed by the daemon_serviceloop() function
JIT_BPF_FilterStructure describing a x86 filtering program created by the jitter
packet_file_headerHeader of a libpcap dump file
PacketHeaderStructure prepended to each packet in the kernel buffer pool
pcap_addrRepresentation of an interface address, used by pcap_findalldevs()
pcap_file_headerHeader of a libpcap dump file
pcap_ifItem in a list of interfaces, used by pcap_findalldevs()
pcap_pkthdrHeader of a packet in the dump file
pcap_rmtauthThis structure keeps the information needed to autheticate the user on a remote machine
pcap_sampThis structure defines the information related to sampling
pcap_send_queueA queue of raw packets that will be sent to the network with pcap_sendqueue_transmit()
pcap_statStructure that keeps statistical values on an interface
rpcap_authStructure that keeps the data required for the authentication on the remote host
rpcap_filterGeneral header used for the pcap_setfilter() command; keeps just the number of BPF instructions
rpcap_filterbpf_insnStructure that keeps a single BPF instuction; it is repeated 'ninsn' times according to the 'rpcap_filterbpf' header
rpcap_findalldevs_ifFormat of the message for the interface description (findalldevs command)
rpcap_findalldevs_ifaddrFormat of the message for the address listing (findalldevs command)
rpcap_headerCommon header for all the RPCAP messages
rpcap_openreplyFormat of the message of the connection opening reply (open command)
rpcap_pkthdrFormat of the header which encapsulates captured packets when transmitted on the network
rpcap_samplingStructure that is needed to set sampling parameters
rpcap_startcapreplyFormat of the reply message that devoted to start a remote capture (startcap reply command)
rpcap_startcapreqFormat of the message that starts a remote capture (startcap command)
rpcap_statsStructure that keeps the statistics about the number of packets captured, dropped, etc
sf_pkthdrHeader associated to a packet in the driver's buffer when the driver is in dump mode. Similar to the bpf_hdr structure, but simpler
+
+ +
+

+documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2009 +CACE Technologies. All rights reserved.

diff --git a/libs/WpdPack_4_1_2/docs/html/classes.html b/libs/WpdPack_4_1_2/docs/html/classes.html new file mode 100644 index 00000000..8ed33f18 --- /dev/null +++ b/libs/WpdPack_4_1_2/docs/html/classes.html @@ -0,0 +1,45 @@ + + + + +WinPcap: Alphabetical List + + + + + + +
+

Data Structure Index

A | B | D | J | P | R | S | _
+ +
  A  
+
  P  
+
pcap_send_queue   rpcap_header   sf_pkthdr   
active_pars   packet_file_header   pcap_stat   rpcap_openreply   
  _  
+
activehosts   PacketHeader   
  R  
+
rpcap_pkthdr   __CPU_Private_Data   
  B  
+
pcap_addr   rpcap_auth   rpcap_sampling   _DEVICE_EXTENSION   
binary_stream   pcap_file_header   rpcap_filter   rpcap_startcapreply   _INTERNAL_REQUEST   
  D  
+
pcap_if   rpcap_filterbpf_insn   rpcap_startcapreq   _OPEN_INSTANCE   
daemon_slpars   pcap_pkthdr   rpcap_findalldevs_if   rpcap_stats   _PACKET_OID_DATA   
  J  
+
pcap_rmtauth   rpcap_findalldevs_ifaddr   
  S  
+
_PACKET_RESERVED   
JIT_BPF_Filter   pcap_samp   
A | B | D | J | P | R | S | _
+
+ +
+

+documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2009 +CACE Technologies. All rights reserved.

diff --git a/libs/WpdPack_4_1_2/docs/html/daemon_8h.html b/libs/WpdPack_4_1_2/docs/html/daemon_8h.html new file mode 100644 index 00000000..9356c749 --- /dev/null +++ b/libs/WpdPack_4_1_2/docs/html/daemon_8h.html @@ -0,0 +1,81 @@ + + + + +WinPcap: daemon.h File Reference + + + + + + +
+

daemon.h File Reference

+

Go to the source code of this file.

+ + + + + + + +

Data Structures

struct  daemon_slpars
 Structure that keeps the parameters needed by the daemon_serviceloop() function. More...

Functions

void daemon_serviceloop (void *ptr)
void pthread_suspend (int msec)
+

Function Documentation

+ +
+
+ + + + + + + + + +
void daemon_serviceloop (void *  ptr ) 
+
+
+ +
+
+ +
+
+ + + + + + + + + +
void pthread_suspend (int  msec ) 
+
+
+ +
+
+
+ +
+

+documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2009 +CACE Technologies. All rights reserved.

diff --git a/libs/WpdPack_4_1_2/docs/html/daemon_8h_source.html b/libs/WpdPack_4_1_2/docs/html/daemon_8h_source.html new file mode 100644 index 00000000..c1676ed9 --- /dev/null +++ b/libs/WpdPack_4_1_2/docs/html/daemon_8h_source.html @@ -0,0 +1,82 @@ + + + + +WinPcap: daemon.h Source File + + + + + + + +
+

+documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2009 +CACE Technologies. All rights reserved.

diff --git a/libs/WpdPack_4_1_2/docs/html/deprecated.html b/libs/WpdPack_4_1_2/docs/html/deprecated.html new file mode 100644 index 00000000..b6e90169 --- /dev/null +++ b/libs/WpdPack_4_1_2/docs/html/deprecated.html @@ -0,0 +1,51 @@ + + + + +WinPcap: Deprecated List + + + + + + +
+ + +

Deprecated List

+
+
Global pcap_file
+

Due to incompatibilities between the C Runtime (CRT) used to compile WinPcap and the one used by WinPcap-based applications, this function may return an invalid FILE pointer, i.e. a descriptor that causes all the standard I/O stream functions (ftell, fseek, fclose...) to fail. The function is still available for backwards binary compatibility, only.

+

+
+
+

+
+
Global pcap_lookupdev
+

Use pcap_findalldevs() or pcap_findalldevs_ex() instead.

+

+
+
+

+
+
Global pcap_lookupnet
+

Use pcap_findalldevs() or pcap_findalldevs_ex() instead.

+

+
+
+
+ +
+

+documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2009 +CACE Technologies. All rights reserved.

diff --git a/libs/WpdPack_4_1_2/docs/html/doxygen.png b/libs/WpdPack_4_1_2/docs/html/doxygen.png new file mode 100644 index 0000000000000000000000000000000000000000..f0a274bbaffdd67f6d784c894d9cf28729db0e14 GIT binary patch literal 1281 zcmaJ>ZA?>F7(Vx-ms?uoS`b@hdRtpo6o^%HU>M$hfGrBvQnk$LE?p^P!kn&ikhyq! zX~V@&tPF5Qt@V?oTL96Bi%aRiwbe1)9DWQI#?)=HxS7QSw`J`5fAJ*eJbB;uNuKA& zdERDo*{Y<(If(#(B$Lr#;nB(8Y#ia=ZCeW?JfPLuQY`=@cW$k}Rivq|vbxGrRq1Tl9;+(gNt?}UtVKM2`T5t1jLzuL@0UIs`S#vlhl4)^ zLgSYrPj@$+`|j?eSbXTmiHGkWxV8V}BzNR?pl9k_s4pDu9vd5a_UzZEPk)}Ad{AV_ zzddrjrh4=Imr`E06;LY{)YYt?o}L~H@7C}F^WB!Ra=v`Q0bj{>5&$66CWF>mf6vjP z2N>RRY6ZYa=K`76>+|_)Xdwko+7wv}7cN|btOhWb(*{sta~6b?S8Omrxw}!4`NhGr zZVpNqpu1@BE`QGWNTpEpcJVW5izu~2B^GlM?1(OPg)zwW;QcP@Ltcclm>XbJL9C|j z=9!2?ua=uIlf0%AndzHsRC}IyTL$EhAee(fdKB`?27KeS^2M8M_7b~PiCFO&r5LC7 z7gl1*a<8;SjNaw#h=843_AV9iZbWQOAp5YOC^&_F*9K0> zB|6%IDb?aM#3viTxkLU4aXg&@+CkNTOnQ1iMP*^?b|^lJy$4C)Zk4isV!|RZ*XhXh zw8q3$=*0LeGC!XI_Wc?dkT~3+*Gu%%yIqP+Wr3H$=&ROMQU6q}Ag^P~>c5vAEO;a- z_dK-3PPeKar%)6$j~vI2#*-YH!1h6HYVtwCX5_wM`iF#UKz&&@9Oo5w3%XGYrX zW>dY~)SG-((Yim%`InwgTvyRC?e=Wh^8KCao!R6Eg&TpVWUY1sN~4G}V?nFnEGo-; zHZ_$eW9-GnC%^WS9b z@p;-$oH#MtC0v>Q$HX%4^JdFdO$0cbv-W)Q TtK}Eh@>>I#ipmV1>S*>q-hkC} literal 0 HcmV?d00001 diff --git a/libs/WpdPack_4_1_2/docs/html/doxygen__groups_8txt.html b/libs/WpdPack_4_1_2/docs/html/doxygen__groups_8txt.html new file mode 100644 index 00000000..8935e3bc --- /dev/null +++ b/libs/WpdPack_4_1_2/docs/html/doxygen__groups_8txt.html @@ -0,0 +1,36 @@ + + + + +WinPcap: doxygen_groups.txt File Reference + + + + + + +
+

doxygen_groups.txt File Reference

+
+
+ +
+

+documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2009 +CACE Technologies. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/dump.gif b/libs/WpdPack_4_1_2/docs/html/dump.gif similarity index 100% rename from libs/WinPcap-413-173-b4/docs/html/dump.gif rename to libs/WpdPack_4_1_2/docs/html/dump.gif diff --git a/libs/WinPcap-413-173-b4/docs/html/encoding.gif b/libs/WpdPack_4_1_2/docs/html/encoding.gif similarity index 100% rename from libs/WinPcap-413-173-b4/docs/html/encoding.gif rename to libs/WpdPack_4_1_2/docs/html/encoding.gif diff --git a/libs/WpdPack_4_1_2/docs/html/fileconf_8h.html b/libs/WpdPack_4_1_2/docs/html/fileconf_8h.html new file mode 100644 index 00000000..cc663f74 --- /dev/null +++ b/libs/WpdPack_4_1_2/docs/html/fileconf_8h.html @@ -0,0 +1,78 @@ + + + + +WinPcap: fileconf.h File Reference + + + + + + +
+

fileconf.h File Reference

+

Go to the source code of this file.

+ + + + +

Functions

void fileconf_read (int sign)
int fileconf_save (const char *savefile)
+

Function Documentation

+ +
+
+ + + + + + + + + +
void fileconf_read (int  sign ) 
+
+
+ +
+
+ +
+
+ + + + + + + + + +
int fileconf_save (const char *  savefile ) 
+
+
+ +
+
+
+ +
+

+documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2009 +CACE Technologies. All rights reserved.

diff --git a/libs/WpdPack_4_1_2/docs/html/fileconf_8h_source.html b/libs/WpdPack_4_1_2/docs/html/fileconf_8h_source.html new file mode 100644 index 00000000..69812554 --- /dev/null +++ b/libs/WpdPack_4_1_2/docs/html/fileconf_8h_source.html @@ -0,0 +1,74 @@ + + + + +WinPcap: fileconf.h Source File + + + + + + + +
+

+documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2009 +CACE Technologies. All rights reserved.

diff --git a/libs/WpdPack_4_1_2/docs/html/files.html b/libs/WpdPack_4_1_2/docs/html/files.html new file mode 100644 index 00000000..aedd63d9 --- /dev/null +++ b/libs/WpdPack_4_1_2/docs/html/files.html @@ -0,0 +1,50 @@ + + + + +WinPcap: File Index + + + + + + + + +
+

+documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2009 +CACE Technologies. All rights reserved.

diff --git a/libs/WpdPack_4_1_2/docs/html/ftv2blank.png b/libs/WpdPack_4_1_2/docs/html/ftv2blank.png new file mode 100644 index 0000000000000000000000000000000000000000..493c3c0b615ade5b22027bde773faf2c0e076d66 GIT binary patch literal 174 zcmeAS@N?(olHy`uVBq!ia0vp^0zfRr2qYM%T@!Q%(o7{me!&ckj8p!u14)&*MwA5S zr6z#mEsk^N1FBF3sc_EE%}vcKVF=AhO-xa6_jFST&P^;T z2~I3aEm8;rVk12R#UIz>f`J-DJY5_^DsClP9B62eH+WF*G=YJMp~A-KbWwke5Kx}M M)78&qol`;+0EL(^EC2ui literal 0 HcmV?d00001 diff --git a/libs/WpdPack_4_1_2/docs/html/ftv2doc.png b/libs/WpdPack_4_1_2/docs/html/ftv2doc.png new file mode 100644 index 0000000000000000000000000000000000000000..f72999f92172cca6edaa2538286b3e369bec9f49 GIT binary patch literal 255 zcmeAS@N?(olHy`uVBq!ia0vp^5yjnX4egh%q=bp-`Pe zR7&bp17l3gfhmh7Fm(iZ2eAfco|q!h5)>qKG?UBh!IC9QGMbJAHf6IEiufk_g|d7~ qkWqJ4k(|I-Aeo-5U~n{Fnc?dN!3Uwu?t6hQVDNPHb6Mw<&;$TLIZ`G7 literal 0 HcmV?d00001 diff --git a/libs/WpdPack_4_1_2/docs/html/ftv2folderclosed.png b/libs/WpdPack_4_1_2/docs/html/ftv2folderclosed.png new file mode 100644 index 0000000000000000000000000000000000000000..d6d063440cbf13c4128dacd96661b6fce58abf26 GIT binary patch literal 259 zcmeAS@N?(olHy`uVBq!ia0vp^55uo^`BphW;jCHO69?}tw{JfcdnZ<*@N=4I z?xF5Qc|QYEmKAIZ;JRGVHe=bn*tx1_|J^^vyg*oVM#A1kZlFULJYD@<);T3K0RTgB BWg7qh literal 0 HcmV?d00001 diff --git a/libs/WpdPack_4_1_2/docs/html/ftv2folderopen.png b/libs/WpdPack_4_1_2/docs/html/ftv2folderopen.png new file mode 100644 index 0000000000000000000000000000000000000000..bbe2c913cf493ee37ad8e3a5132382138d93ac92 GIT binary patch literal 261 zcmeAS@N?(olHy`uVBq!ia0vp^5u(C zYP)Mg%H-DB+{J~>rPn_#pYTax?r*V6ubqGX{lvROQ{?n5_cbm+cQAOm`njxgN@xNA D92;js literal 0 HcmV?d00001 diff --git a/libs/WpdPack_4_1_2/docs/html/ftv2lastnode.png b/libs/WpdPack_4_1_2/docs/html/ftv2lastnode.png new file mode 100644 index 0000000000000000000000000000000000000000..e7b9ba90cb0cf71c8ce662956bfee7d64cf60fa6 GIT binary patch literal 233 zcmeAS@N?(olHy`uVBq!ia0vp^0zfRr!py+H=+kU?6UZ?L@CkAK|NlRbNhD}!Xpp$P zU;Pg)ksC(lf|p%(p+w2Gk+!>EaktaVt4N i!r*{E4>QXNV>t$uAA#a^n)TVt_DW*G8-srQl%FeIsRSdYm zeDdtWec}u&7@8h5rqv#p7g*pRdwwmugmlS-+cHV~j}#7`Nwj9m+AU)JGGo`8z_}`K z?s#Xsy%Z;1_jl5Y+?Gum8WyK6`MBvup0SAOKJ)mWcHyteJ?WLL>>-)=?&<$H&t5oH Vd!azZ1yDdSc)I$ztaD0e0sw}(dc*(# literal 0 HcmV?d00001 diff --git a/libs/WpdPack_4_1_2/docs/html/ftv2mlastnode.png b/libs/WpdPack_4_1_2/docs/html/ftv2mlastnode.png new file mode 100644 index 0000000000000000000000000000000000000000..09ceb6adb01054ce799ad20c0e818ab9272f2df2 GIT binary patch literal 160 zcmeAS@N?(olHy`uVBq!ia0vp^0zfRr#LU3Jc=+&fg$isFPOjJ*AaIJQGm()YSDb0rfjgNefXW#>UHx3vIVCg! E0ORy6RsaA1 literal 0 HcmV?d00001 diff --git a/libs/WpdPack_4_1_2/docs/html/ftv2mnode.png b/libs/WpdPack_4_1_2/docs/html/ftv2mnode.png new file mode 100644 index 0000000000000000000000000000000000000000..3254c05112199fbc80aad313611c58a5b388792d GIT binary patch literal 194 zcmeAS@N?(olHy`uVBq!ia0vp^0zfRr!py+H=+kU?6Ub2s@Ck7}aNq!ti3c<^Gz9OH zn+a6GSQ6wH%;50sMjDVKR^l2_5}cn_Ql40p%8;I!W>k=uu3)5RqGz-?&YcgaLd(;| zF{I*Fa>4?=2W(CyOv{5p*uLi}G<-ambjQcb>&~4!CzK3KXWY6d$*{eWU47N}X+XCz OFnGH9xvXPg)ksC(lf|p%(p+w2Gk+y>EaktaVt4N l!r*{E4>Lv;t literal 0 HcmV?d00001 diff --git a/libs/WpdPack_4_1_2/docs/html/ftv2plastnode.png b/libs/WpdPack_4_1_2/docs/html/ftv2plastnode.png new file mode 100644 index 0000000000000000000000000000000000000000..0b07e00913d8069ebbb51bd7fd6d70d8bba88f75 GIT binary patch literal 165 zcmeAS@N?(olHy`uVBq!ia0vp^0zfRr#LU3Jc=+&MJ literal 0 HcmV?d00001 diff --git a/libs/WpdPack_4_1_2/docs/html/ftv2pnode.png b/libs/WpdPack_4_1_2/docs/html/ftv2pnode.png new file mode 100644 index 0000000000000000000000000000000000000000..2001b797ba2b98a4127f1d3efca64aef08bf6d51 GIT binary patch literal 200 zcmeAS@N?(olHy`uVBq!ia0vp^0zfRr!py+H=+kU?6Ub2s@Ck7}aNq!ti3c<^Gz9OH zn+a6GSQ6wH%;50sMjDVKR^l2_5}cn_Ql40p%8;I!W>k=uu3)5RqGz-?&Ycga!obtT zF{I*Fa>4?=2W(Dkd1@Anj~<0|oqBMOmqox%*rjK-r)THv+0v0L%h-agt(X~hWwYzA SIxU|Ma*U^|pUXO@geCywmoZiV literal 0 HcmV?d00001 diff --git a/libs/WpdPack_4_1_2/docs/html/ftv2vertline.png b/libs/WpdPack_4_1_2/docs/html/ftv2vertline.png new file mode 100644 index 0000000000000000000000000000000000000000..b330f3a33c0085c183ff39fc56b1b274160c1da0 GIT binary patch literal 229 zcmeAS@N?(olHy`uVBq!ia0vp^0zfRr!py+H=+kU?6UZ?L@CkAK|NlRbNhD}!Xpp$P zU;Pg)ksC(lf|p%(p+w2Gqgt>EaktaVt4N e!r*{^G#i7W2*a|cHZQDzQVgE1elF{r5}E+)J2fZ( literal 0 HcmV?d00001 diff --git a/libs/WpdPack_4_1_2/docs/html/funcs_2pcap_8h.html b/libs/WpdPack_4_1_2/docs/html/funcs_2pcap_8h.html new file mode 100644 index 00000000..f2897076 --- /dev/null +++ b/libs/WpdPack_4_1_2/docs/html/funcs_2pcap_8h.html @@ -0,0 +1,176 @@ + + + + +WinPcap: pcap.h File Reference + + + + + + +
+

pcap.h File Reference

+

Go to the source code of this file.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Functions

Windows-specific Extensions

The functions in this section extend libpcap to offer advanced functionalities (like remote packet capture, packet buffer size variation or high-precision packet injection). Howerver, at the moment they can be used only in Windows.

+

PAirpcapHandle pcap_get_airpcap_handle (pcap_t *p)
 Returns the AirPcap handler associated with an adapter. This handler can be used to change the wireless-related settings of the CACE Technologies AirPcap wireless capture adapters.
int pcap_offline_filter (struct bpf_program *prog, const struct pcap_pkthdr *header, const u_char *pkt_data)
 Returns if a given filter applies to an offline packet.
int pcap_live_dump (pcap_t *p, char *filename, int maxsize, int maxpacks)
 Save a capture to file.
int pcap_live_dump_ended (pcap_t *p, int sync)
 Return the status of the kernel dump process, i.e. tells if one of the limits defined with pcap_live_dump() has been reached.
struct pcap_statpcap_stats_ex (pcap_t *p, int *pcap_stat_size)
 Return statistics on current capture.
int pcap_setbuff (pcap_t *p, int dim)
 Set the size of the kernel buffer associated with an adapter.
int pcap_setmode (pcap_t *p, int mode)
 Set the working mode of the interface p to mode.
int pcap_setmintocopy (pcap_t *p, int size)
 Set the minumum amount of data received by the kernel in a single call.
HANDLE pcap_getevent (pcap_t *p)
 Return the handle of the event associated with the interface p.
pcap_send_queuepcap_sendqueue_alloc (u_int memsize)
 Allocate a send queue.
void pcap_sendqueue_destroy (pcap_send_queue *queue)
 Destroy a send queue.
int pcap_sendqueue_queue (pcap_send_queue *queue, const struct pcap_pkthdr *pkt_header, const u_char *pkt_data)
 Add a packet to a send queue.
u_int pcap_sendqueue_transmit (pcap_t *p, pcap_send_queue *queue, int sync)
 Send a queue of raw packets to the network.
int pcap_findalldevs_ex (char *source, struct pcap_rmtauth *auth, pcap_if_t **alldevs, char *errbuf)
 Create a list of network devices that can be opened with pcap_open().
int pcap_createsrcstr (char *source, int type, const char *host, const char *port, const char *name, char *errbuf)
 Accept a set of strings (host name, port, ...), and it returns the complete source string according to the new format (e.g. 'rpcap://1.2.3.4/eth0').
int pcap_parsesrcstr (const char *source, int *type, char *host, char *port, char *name, char *errbuf)
 Parse the source string and returns the pieces in which the source can be split.
pcap_tpcap_open (const char *source, int snaplen, int flags, int read_timeout, struct pcap_rmtauth *auth, char *errbuf)
 Open a generic source in order to capture / send (WinPcap only) traffic.
struct pcap_samppcap_setsampling (pcap_t *p)
 Define a sampling method for packet capture.
SOCKET pcap_remoteact_accept (const char *address, const char *port, const char *hostlist, char *connectinghost, struct pcap_rmtauth *auth, char *errbuf)
 Block until a network connection is accepted (active mode only).
int pcap_remoteact_close (const char *host, char *errbuf)
 Drop an active connection (active mode only).
void pcap_remoteact_cleanup ()
 Clean the socket that is currently used in waiting active connections.
int pcap_remoteact_list (char *hostlist, char sep, int size, char *errbuf)
 Return the hostname of the host that have an active connection with us (active mode only).

Unix-compatible Functions

These functions are part of the libpcap library, and therefore work both on Windows and on Linux.

+
Note:
errbuf in pcap_open_live(), pcap_open_dead(), pcap_open_offline(), pcap_setnonblock(), pcap_getnonblock(), pcap_findalldevs(), pcap_lookupdev(), and pcap_lookupnet() is assumed to be able to hold at least PCAP_ERRBUF_SIZE chars.
+

typedef void(* pcap_handler )(u_char *user, const struct pcap_pkthdr *pkt_header, const u_char *pkt_data)
 Prototype of the callback function that receives the packets.
pcap_tpcap_open_live (const char *device, int snaplen, int promisc, int to_ms, char *ebuf)
 Open a live capture from the network.
pcap_tpcap_open_dead (int linktype, int snaplen)
 Create a pcap_t structure without starting a capture.
pcap_tpcap_open_offline (const char *fname, char *errbuf)
 Open a savefile in the tcpdump/libpcap format to read packets.
pcap_dumper_tpcap_dump_open (pcap_t *p, const char *fname)
 Open a file to write packets.
int pcap_setnonblock (pcap_t *p, int nonblock, char *errbuf)
 Switch between blocking and nonblocking mode.
int pcap_getnonblock (pcap_t *p, char *errbuf)
 Get the "non-blocking" state of an interface.
int pcap_findalldevs (pcap_if_t **alldevsp, char *errbuf)
 Construct a list of network devices that can be opened with pcap_open_live().
void pcap_freealldevs (pcap_if_t *alldevsp)
 Free an interface list returned by pcap_findalldevs().
char * pcap_lookupdev (char *errbuf)
 Return the first valid device in the system.
int pcap_lookupnet (const char *device, bpf_u_int32 *netp, bpf_u_int32 *maskp, char *errbuf)
 Return the subnet and netmask of an interface.
int pcap_dispatch (pcap_t *p, int cnt, pcap_handler callback, u_char *user)
 Collect a group of packets.
int pcap_loop (pcap_t *p, int cnt, pcap_handler callback, u_char *user)
 Collect a group of packets.
u_char * pcap_next (pcap_t *p, struct pcap_pkthdr *h)
 Return the next available packet.
int pcap_next_ex (pcap_t *p, struct pcap_pkthdr **pkt_header, const u_char **pkt_data)
 Read a packet from an interface or from an offline capture.
void pcap_breakloop (pcap_t *)
 set a flag that will force pcap_dispatch() or pcap_loop() to return rather than looping.
int pcap_sendpacket (pcap_t *p, u_char *buf, int size)
 Send a raw packet.
void pcap_dump (u_char *user, const struct pcap_pkthdr *h, const u_char *sp)
 Save a packet to disk.
long pcap_dump_ftell (pcap_dumper_t *)
 Return the file position for a "savefile".
int pcap_compile (pcap_t *p, struct bpf_program *fp, char *str, int optimize, bpf_u_int32 netmask)
 Compile a packet filter, converting an high level filtering expression (see Filtering expression syntax) in a program that can be interpreted by the kernel-level filtering engine.
int pcap_compile_nopcap (int snaplen_arg, int linktype_arg, struct bpf_program *program, char *buf, int optimize, bpf_u_int32 mask)
 Compile a packet filter without the need of opening an adapter. This function converts an high level filtering expression (see Filtering expression syntax) in a program that can be interpreted by the kernel-level filtering engine.
int pcap_setfilter (pcap_t *p, struct bpf_program *fp)
 Associate a filter to a capture.
void pcap_freecode (struct bpf_program *fp)
 Free a filter.
int pcap_datalink (pcap_t *p)
 Return the link layer of an adapter.
int pcap_list_datalinks (pcap_t *p, int **dlt_buf)
 list datalinks
int pcap_set_datalink (pcap_t *p, int dlt)
 Set the current data link type of the pcap descriptor to the type specified by dlt. -1 is returned on failure.
int pcap_datalink_name_to_val (const char *name)
 Translates a data link type name, which is a DLT_ name with the DLT_ removed, to the corresponding data link type value. The translation is case-insensitive. -1 is returned on failure.
const char * pcap_datalink_val_to_name (int dlt)
 Translates a data link type value to the corresponding data link type name. NULL is returned on failure.
const char * pcap_datalink_val_to_description (int dlt)
 Translates a data link type value to a short description of that data link type. NULL is returned on failure.
int pcap_snapshot (pcap_t *p)
 Return the dimension of the packet portion (in bytes) that is delivered to the application.
int pcap_is_swapped (pcap_t *p)
 returns true if the current savefile uses a different byte order than the current system.
int pcap_major_version (pcap_t *p)
 return the major version number of the pcap library used to write the savefile.
int pcap_minor_version (pcap_t *p)
 return the minor version number of the pcap library used to write the savefile.
FILE * pcap_file (pcap_t *p)
 Return the standard stream of an offline capture.
int pcap_stats (pcap_t *p, struct pcap_stat *ps)
 Return statistics on current capture.
void pcap_perror (pcap_t *p, char *prefix)
 print the text of the last pcap library error on stderr, prefixed by prefix.
char * pcap_geterr (pcap_t *p)
 return the error text pertaining to the last pcap library error.
char * pcap_strerror (int error)
 Provided in case strerror() isn't available.
const char * pcap_lib_version (void)
 Returns a pointer to a string giving information about the version of the libpcap library being used; note that it contains more information than just a version number.
void pcap_close (pcap_t *p)
 close the files associated with p and deallocates resources.
FILE * pcap_dump_file (pcap_dumper_t *p)
 return the standard I/O stream of the 'savefile' opened by pcap_dump_open().
int pcap_dump_flush (pcap_dumper_t *p)
 Flushes the output buffer to the ``savefile,'' so that any packets written with pcap_dump() but not yet written to the ``savefile'' will be written. -1 is returned on error, 0 on success.
void pcap_dump_close (pcap_dumper_t *p)
 Closes a savefile.
+
+ +
+

+documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2009 +CACE Technologies. All rights reserved.

diff --git a/libs/WpdPack_4_1_2/docs/html/funcs_2pcap_8h_source.html b/libs/WpdPack_4_1_2/docs/html/funcs_2pcap_8h_source.html new file mode 100644 index 00000000..487998c3 --- /dev/null +++ b/libs/WpdPack_4_1_2/docs/html/funcs_2pcap_8h_source.html @@ -0,0 +1,206 @@ + + + + +WinPcap: pcap.h Source File + + + + + + + +
+

+documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2009 +CACE Technologies. All rights reserved.

diff --git a/libs/WinPcap-413-173-b4/docs/html/functions.html b/libs/WpdPack_4_1_2/docs/html/functions.html similarity index 81% rename from libs/WinPcap-413-173-b4/docs/html/functions.html rename to libs/WpdPack_4_1_2/docs/html/functions.html index 36273bcd..fa463f11 100644 --- a/libs/WinPcap-413-173-b4/docs/html/functions.html +++ b/libs/WpdPack_4_1_2/docs/html/functions.html @@ -2,54 +2,36 @@ - - WinPcap: Data Fields - - - + -
-
- - - - - - -
-
WinPcap -  4.1.3 -
-
-
- - -