fork download
  1. //***********************************************
  2. //WinPcap.fs wrote @furuya02 SIN/SAPPOROWORKS
  3. //***********************************************
  4. module WinPcap
  5.  
  6. #nowarn "9"
  7. open System
  8. open System.Text
  9. open System.Runtime.InteropServices
  10.  
  11. [<Struct;StructLayout(LayoutKind.Sequential)>]
  12. type in_addr =
  13. val b1 : char
  14. val b2 : char
  15. val b3 : char
  16. val b4 : char
  17. val w1 : UInt16
  18. val w2 : UInt16
  19. val addr : UInt64
  20.  
  21. [<Struct;StructLayout(LayoutKind.Sequential)>]
  22. type sockaddr =
  23. val family : Int16 //short
  24. val port : UInt16
  25. [<MarshalAs(UnmanagedType.ByValArray, SizeConst=4)>]
  26. val addr : System.Byte[]
  27. [<MarshalAs(UnmanagedType.ByValArray, SizeConst=8)>]
  28. val zero : System.Byte[]
  29.  
  30. //*******************************************
  31. //pcap1.h
  32. //*******************************************
  33. // #define PCAP_IF_LOOPBACK 0x00000001 /* interface is loopback */
  34. let PCAP_IF_LOOPBACK = 0x00000001u
  35.  
  36. //FILE *pcap_file(pcap_t *);
  37. [<DllImport("packet.dll",CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)>]
  38. extern IntPtr pcap_file(IntPtr p)
  39.  
  40.  
  41. //*******************************************
  42. //Win32-Extensions.h
  43. //*******************************************
  44. //HANDLE pcap_getevent(pcap_t *p);
  45. [<DllImport("packet.dll",CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)>]
  46. extern IntPtr pcap_getevent(IntPtr p)
  47.  
  48. //[Obsolete]int pcap_live_dump(pcap_t *p, char *filename, int maxsize, int maxpacks);
  49. [<DllImport("packet.dll",CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)>]
  50. extern int pcap_live_dump(IntPtr p, string filename, int maxsize, int maxpacks)
  51.  
  52. //int pcap_live_dump_ended(pcap_t *p, int sync);
  53. [<DllImport("packet.dll",CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)>]
  54. extern int pcap_live_dump_ended(IntPtr p, int sync)
  55.  
  56. //pcap_send_queue* pcap_sendqueue_alloc(u_int memsize);
  57. [<DllImport("wpcap.dll",CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)>]
  58. extern IntPtr pcap_sendqueue_alloc(UInt32 memsize)
  59.  
  60. //void pcap_sendqueue_destroy(pcap_send_queue* queue);
  61. [<DllImport("wpcap.dll",CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)>]
  62. extern void pcap_sendqueue_destroy(IntPtr queue)
  63.  
  64. //int pcap_sendqueue_queue(pcap_send_queue* queue, const struct pcap_pkthdr *pkt_header, const u_char *pkt_data);
  65. [<DllImport("wpcap.dll",CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)>]
  66. extern int pcap_sendqueue_queue(IntPtr queue, IntPtr pkt_header, IntPtr pkt_data)
  67.  
  68. //u_int pcap_sendqueue_transmit(pcap_t *p, pcap_send_queue* queue, int sync);
  69. [<DllImport("wpcap.dll",CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)>]
  70. extern UInt32 pcap_sendqueue_transmit(IntPtr p, IntPtr queue, int sync)
  71.  
  72.  
  73.  
  74.  
  75. //*******************************************
  76. //remote-ext.h
  77. //*******************************************
  78. //#define PCAP_BUF_SIZE 1024
  79. let PCAP_BUF_SIZE = 1024
  80. //#define PCAP_SRC_IF_STRING "rpcap://"
  81. let PCAP_SRC_IF_STRING = "rpcap://"
  82. //#define PCAP_SRC_FILE 2
  83. let PCAP_SRC_FILE = 2
  84. //#define PCAP_SRC_IFLOCAL 3
  85. let PCAP_SRC_IFLOCAL = 3
  86. //#define PCAP_SRC_IFREMOTE 4
  87. let PCAP_SRC_IFREMOTE = 4
  88. //#define PCAP_OPENFLAG_PROMISCUOUS 1
  89. let PCAP_OPENFLAG_PROMISCUOUS = 1
  90.  
  91. [<Struct;StructLayout(LayoutKind.Sequential)>]
  92. type pcap_rmtauth =
  93. val typ : int
  94. val username : string
  95. val password : string
  96.  
  97.  
  98. //int pcap_findalldevs_ex(char *source, struct pcap_rmtauth *auth, pcap_if_t **alldevs, char *errbuf)
  99. [<DllImport("wpcap.dll",CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)>]
  100. extern int pcap_findalldevs_ex(string source, IntPtr auth,IntPtr *alldevs, StringBuilder errbuf)
  101.  
  102. //pcap_t *pcap_open(const char *source, int snaplen, int flags, int read_timeout, struct pcap_rmtauth *auth, char *errbuf);
  103. [<DllImport("wpcap.dll",CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)>]
  104. extern IntPtr pcap_open(string source, int snaplen, int flags, int read_timeout, IntPtr auth, StringBuilder errbuf)
  105.  
  106. //SOCKET pcap_remoteact_accept(const char *address, const char *port, const char *hostlist, char *connectinghost, struct pcap_rmtauth *auth, char *errbuf);
  107. [<DllImport("wpcap.dll",CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)>]
  108. extern UIntPtr pcap_remoteact_accept(string address, string port, string hostlist, string connectinghost, IntPtr auth, StringBuilder errbuf)
  109.  
  110. //void pcap_remoteact_cleanup();
  111. [<DllImport("wpcap.dll",CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)>]
  112. extern void pcap_remoteact_cleanup()
  113.  
  114. //int pcap_remoteact_close(const char *host, char *errbuf);
  115. [<DllImport("wpcap.dll",CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)>]
  116. extern int pcap_remoteact_close(string host, StringBuilder errbuf)
  117.  
  118. //int pcap_remoteact_list(char *hostlist, char sep, int size, char *errbuf);
  119. [<DllImport("wpcap.dll",CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)>]
  120. extern int pcap_remoteact_list(string address, string sep, int size, StringBuilder errbuf)
  121.  
  122.  
  123. //struct pcap_samp *pcap_setsampling(pcap_t *p);
  124. [<DllImport("wpcap.dll",CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)>]
  125. extern IntPtr pcap_setsampling(IntPtr p)
  126.  
  127. //*******************************************
  128. //bpf.h
  129. //*******************************************
  130. [<Struct;StructLayout(LayoutKind.Sequential)>]
  131. type bpf_program =
  132. val bf_len : UInt32
  133. val bf_insns :IntPtr
  134.  
  135.  
  136.  
  137. //*******************************************
  138. //pcap.h
  139. //*******************************************
  140. let MODE_CAPT = 0
  141. let MODE_STAT = 1
  142. let MODE_MON = 2
  143. let PCAP_ERRBUF_SIZE = 256
  144.  
  145.  
  146. [<Struct;StructLayout(LayoutKind.Sequential)>]
  147. type timeval =
  148. val tv_sec : UInt32
  149. val tv_usec : UInt32
  150.  
  151. [<Struct;StructLayout(LayoutKind.Sequential)>]
  152. type pcap_pkthdr =
  153. val ts : timeval
  154. val caplen : int
  155. val len : int
  156.  
  157. [<Struct;StructLayout(LayoutKind.Sequential)>]
  158. type pcap_stat =
  159. val ps_recv : UInt32
  160. val ps_drop : UInt32
  161. val ps_ifdrop : UInt32
  162. val bs_capt : UInt32
  163.  
  164. [<Struct;StructLayout(LayoutKind.Sequential)>]
  165. type pcap_if =
  166. val next : IntPtr
  167. val name : string
  168. val description : string
  169. val addresses : IntPtr
  170. val flags : UInt32
  171.  
  172. [<Struct;StructLayout(LayoutKind.Sequential)>]
  173. type pcap_addr =
  174. val next : IntPtr
  175. val addr : IntPtr
  176. val netmask : IntPtr
  177. val broadaddr : IntPtr
  178. val dstaddr : IntPtr
  179.  
  180. //delegate void dispatcher_handler(IntPtr user, IntPtr header, IntPtr pkt_data)
  181. type dispatcher_handler = delegate of IntPtr * IntPtr * IntPtr -> unit
  182.  
  183. //[Obsolete]char *pcap_lookupdev(char *);
  184. [<DllImport("packet.dll",CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)>]
  185. extern string pcap_lookupdev(string errbuf)
  186.  
  187. //[Obsolete]int pcap_lookupnet(const char *, bpf_u_int32 *, bpf_u_int32 *, char *);
  188. [<DllImport("wpcap.dll",CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)>]
  189. extern int pcap_lookupnet(string device, UInt32 netp, UInt32 maskp, string errbuf)
  190.  
  191. //pcap_t *pcap_create(const char *, char *);
  192. [<DllImport("wpcap.dll",CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)>]
  193. extern int pcap_createsrcstr(StringBuilder source, int typ, string host, string port, string name, StringBuilder errbuf)
  194.  
  195. //pcap_t *pcap_open_live(const char *, int, int, int, char *);
  196. [<DllImport("wpcap.dll",CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)>]
  197. extern IntPtr pcap_open_live(string device, int snaplen, int promisc, int to_ms, StringBuilder errbuf)
  198.  
  199. //pcap_t *pcap_open_dead(int, int);
  200. [<DllImport("wpcap.dll",CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)>]
  201. extern IntPtr pcap_open_dead(int linktype, int snaplen);
  202.  
  203.  
  204. //void pcap_close(pcap_t *);
  205. [<DllImport("wpcap.dll",CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)>]
  206. extern void pcap_close(IntPtr p)
  207.  
  208. //int pcap_loop(pcap_t *, int, pcap_handler, u_char *);
  209. [<DllImport("wpcap.dll",CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)>]
  210. extern int pcap_loop(IntPtr p, int cnt, dispatcher_handler callback,IntPtr user)
  211.  
  212. //int pcap_dispatch(pcap_t *, int, pcap_handler, u_char *);
  213.  
  214. //const u_char* pcap_next(pcap_t *, struct pcap_pkthdr *);
  215. [<DllImport("wpcap.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)>]
  216. extern IntPtr pcap_next(IntPtr p, IntPtr h)
  217.  
  218. //int pcap_next_ex(pcap_t *, struct pcap_pkthdr **, const u_char **);
  219. //[<DllImport("wpcap.dll", CharSet = CharSet.Ansi)>]
  220. [<DllImport("wpcap.dll", CallingConvention = CallingConvention.Cdecl,CharSet = CharSet.Auto)>]
  221. extern int pcap_next_ex(IntPtr p, IntPtr *pkt_header,IntPtr *pkt_data)
  222.  
  223.  
  224. //void pcap_breakloop(pcap_t *);
  225. [<DllImport("wpcap.dll",CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)>]
  226. extern void pcap_breakloop(IntPtr p)
  227.  
  228. //int pcap_stats(pcap_t *, struct pcap_stat *);
  229. [<DllImport("wpcap.dll",CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)>]
  230. extern int pcap_stats(IntPtr p, IntPtr ps)
  231.  
  232. //int pcap_setfilter(pcap_t *, struct bpf_program *);
  233. [<DllImport("wpcap.dll",CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)>]
  234. extern int pcap_setfilter(IntPtr p, IntPtr fp)
  235.  
  236. //int pcap_setdirection(pcap_t *, pcap_direction_t);
  237.  
  238. //int pcap_getnonblock(pcap_t *, char *);
  239. [<DllImport("packet.dll",CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)>]
  240. extern int pcap_getnonblock(IntPtr p, string errbuf)
  241.  
  242. //int pcap_setnonblock(pcap_t *, int, char *);
  243. [<DllImport("wpcap.dll",CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)>]
  244. extern int pcap_setnonblock(IntPtr p, int nonblock, StringBuilder errbuf)
  245.  
  246. //int pcap_sendpacket(pcap_t *, const u_char *, int);
  247. [<DllImport("wpcap.dll",CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)>]
  248. extern int pcap_sendpacket(IntPtr p, System.Byte[] buf, int size)
  249.  
  250. //const char *pcap_strerror(int);
  251. [<DllImport("wpcap.dll",CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)>]
  252. extern string pcap_strerror(int error)
  253.  
  254. //char *pcap_geterr(pcap_t *);
  255. [<DllImport("packet.dll",CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)>]
  256. extern IntPtr pcap_geterr(IntPtr p)
  257.  
  258. //int pcap_compile(pcap_t *, struct bpf_program *, const char *, int, bpf_u_int32);
  259. [<DllImport("wpcap.dll",CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)>]
  260. extern int pcap_compile(IntPtr p, IntPtr fp, string str, int optimize, UInt32 netmask)
  261.  
  262. //int pcap_compile_nopcap(int, int, struct bpf_program *,const char *, int, bpf_u_int32);
  263. [<DllImport("wpcap.dll",CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)>]
  264. extern int pcap_compile_nopcap(int snaplen_arg, int linktype_arg, IntPtr program, string buf, int optimize, UInt32 mask)
  265.  
  266. //void pcap_freecode(struct bpf_program *);
  267. [<DllImport("packet.dll",CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)>]
  268. extern void pcap_freecode(IntPtr fp)
  269.  
  270.  
  271. //int pcap_datalink(pcap_t *);
  272. [<DllImport("wpcap.dll",CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)>]
  273. extern int pcap_datalink(IntPtr p)
  274.  
  275. //int pcap_list_datalinks(pcap_t *, int **);
  276. [<DllImport("packet.dll",CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)>]
  277. extern int pcap_list_datalinks(IntPtr p, IntPtr *dlt_buf)
  278.  
  279.  
  280. //int pcap_set_datalink(pcap_t *, int);
  281. [<DllImport("wpcap.dll",CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)>]
  282. extern int pcap_set_datalink(IntPtr p, int dlt)
  283.  
  284. //int pcap_datalink_name_to_val(const char *);
  285. [<DllImport("wpcap.dll",CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)>]
  286. extern int pcap_datalink_name_to_val(string name)
  287.  
  288. //const char *pcap_datalink_val_to_name(int);
  289. [<DllImport("wpcap.dll",CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)>]
  290. extern int pcap_datalink_val_to_name(int dlt)
  291.  
  292. //const char *pcap_datalink_val_to_description(int);
  293. [<DllImport("wpcap.dll",CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)>]
  294. extern int pcap_datalink_val_to_description(int dlt)
  295.  
  296. //int pcap_snapshot(pcap_t *);
  297. [<DllImport("wpcap.dll",CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)>]
  298. extern int pcap_snapshot(IntPtr p)
  299.  
  300. //int pcap_is_swapped(pcap_t *);
  301. [<DllImport("packet.dll",CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)>]
  302. extern int pcap_is_swapped(IntPtr p)
  303.  
  304. //int pcap_major_version(pcap_t *);
  305. [<DllImport("wpcap.dll",CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)>]
  306. extern int pcap_major_version(IntPtr p);
  307.  
  308. //int pcap_minor_version(pcap_t *);
  309. [<DllImport("wpcap.dll",CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)>]
  310. extern int pcap_minor_version(IntPtr p)
  311.  
  312. //pcap_dumper_t *pcap_dump_open(pcap_t *, const char *);
  313. [<DllImport("wpcap.dll",CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)>]
  314. extern IntPtr pcap_dump_open(IntPtr p, string name)
  315.  
  316. //pcap_dumper_t *pcap_dump_fopen(pcap_t *, FILE *fp);
  317.  
  318. //[Obsolete]FILE *pcap_dump_file(pcap_dumper_t *);
  319. [<DllImport("wpcap.dll",CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)>]
  320. extern IntPtr pcap_dump_file(IntPtr p)
  321.  
  322. //long pcap_dump_ftell(pcap_dumper_t *);
  323. [<DllImport("wpcap.dll",CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)>]
  324. extern Int64 pcap_dump_ftell(IntPtr p)
  325.  
  326. //int pcap_dump_flush(pcap_dumper_t *);
  327. [<DllImport("wpcap.dll",CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)>]
  328. extern int pcap_dump_flush(IntPtr p)
  329.  
  330. //void pcap_dump_close(pcap_dumper_t *);
  331. [<DllImport("wpcap.dll",CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)>]
  332. extern void pcap_dump_close(IntPtr p)
  333.  
  334. //void pcap_dump(u_char *, const struct pcap_pkthdr *, const u_char *);
  335. [<DllImport("wpcap.dll",CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)>]
  336. extern void pcap_dump(IntPtr user, IntPtr h, IntPtr sp)
  337.  
  338. //int pcap_findalldevs(pcap_if_t **, char *);
  339. [<DllImport("wpcap.dll",CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Auto)>]
  340. extern int pcap_findalldevs(IntPtr * alldevsp, StringBuilder errbuf)
  341.  
  342. //void pcap_freealldevs(pcap_if_t *);
  343. [<DllImport("wpcap.dll",CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)>]
  344. extern void pcap_freealldevs(IntPtr alldevsp)
  345.  
  346. //const char *pcap_lib_version(void);
  347. [<DllImport("packet.dll",CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)>]
  348. extern string pcap_lib_version()
  349.  
  350. //pcap_t *pcap_open_offline(const char *, char *);
  351. [<DllImport("wpcap.dll",CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)>]
  352. extern IntPtr pcap_open_offline(string fname, StringBuilder errbuf)
  353.  
  354. //int pcap_setbuff(pcap_t *p, int dim);
  355. [<DllImport("wpcap.dll",CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)>]
  356. extern int pcap_setbuff(IntPtr p, int dim)
  357.  
  358. //int pcap_setmode(pcap_t *p, int mode);
  359. [<DllImport("wpcap.dll",CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)>]
  360. extern int pcap_setmode(IntPtr p, int mode)
  361.  
  362. //int pcap_setmintocopy(pcap_t *p, int size);
  363. [<DllImport("wpcap.dll",CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)>]
  364. extern int pcap_setmintocopy(IntPtr p, int size)
  365.  
  366. //int pcap_stats_ex (pcap_t *, struct pcap_stat_ex *);
  367. [<DllImport("wpcap.dll",CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)>]
  368. extern IntPtr pcap_stats_ex(IntPtr p, IntPtr pcap_stat_size)
  369.  
stdin
Standard input is empty
compilation info
/home/PRqvXC/prog.fs(369,1): warning FS0988: Main module of program is empty: nothing will happen when it is run
stdout
Standard output is empty