remote-ext.h
上传用户:gzdtt123
上传日期:2022-01-26
资源大小:88k
文件大小:13k
开发平台:

Visual C++

  1. /*
  2.  * Copyright (c) 2002 - 2003
  3.  * NetGroup, Politecnico di Torino (Italy)
  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 nor the names of its 
  16.  * contributors may be used to endorse or promote products derived from 
  17.  * this software without specific prior written permission. 
  18.  * 
  19.  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
  20.  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
  21.  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 
  22.  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 
  23.  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
  24.  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
  25.  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
  26.  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
  27.  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
  28.  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
  29.  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  30.  * 
  31.  */
  32. #ifndef __REMOTE_EXT_H__
  33. #define __REMOTE_EXT_H__
  34. // Definition for Microsoft Visual Studio
  35. #if _MSC_VER > 1000
  36. #pragma once
  37. #endif
  38. #ifdef __cplusplus
  39. extern "C" {
  40. #endif
  41. /*!
  42. file remote-ext.h
  43. The goal of this file it to include most of the new definitions that should be
  44. placed into the pcap.h file.
  45. It includes all new definitions (structures and functions like pcap_open().
  46.     Some of the functions are not really a remote feature, but, right now, 
  47. they are placed here.
  48. */
  49. // All this stuff is public
  50. /*! addtogroup remote_struct
  51. {
  52. */
  53. /*!
  54. brief Defines the maximum buffer size in which address, port, interface names are kept.
  55. In case the adapter name or such is larger than this value, it is truncated.
  56. This is not used by the user; however it must be aware that an hostname / interface
  57. name longer than this value will be truncated.
  58. */
  59. #define PCAP_BUF_SIZE 1024
  60. /*! addtogroup remote_source_ID
  61. {
  62. */
  63. /*!
  64. brief Internal representation of the type of source in use (file, 
  65. remote/local interface).
  66. This indicates a file, i.e. the user want to open a capture from a local file.
  67. */
  68. #define PCAP_SRC_FILE 2
  69. /*!
  70. brief Internal representation of the type of source in use (file, 
  71. remote/local interface).
  72. This indicates a local interface, i.e. the user want to open a capture from 
  73. a local interface. This does not involve the RPCAP protocol.
  74. */
  75. #define PCAP_SRC_IFLOCAL 3
  76. /*!
  77. brief Internal representation of the type of source in use (file, 
  78. remote/local interface).
  79. This indicates a remote interface, i.e. the user want to open a capture from 
  80. an interface on a remote host. This does involve the RPCAP protocol.
  81. */
  82. #define PCAP_SRC_IFREMOTE 4
  83. /*!
  84. }
  85. */
  86. /*! addtogroup remote_source_string
  87. The formats allowed by the pcap_open() are the following:
  88. - file://path_and_filename [opens a local file]
  89. - rpcap://devicename [opens the selected device devices available on the local host, without using the RPCAP protocol]
  90. - rpcap://host/devicename [opens the selected device available on a remote host]
  91. - rpcap://host:port/devicename [opens the selected device available on a remote host, using a non-standard port for RPCAP]
  92. - adaptername [to open a local adapter; kept for compability, but it is strongly discouraged]
  93. - (NULL) [to open the first local adapter; kept for compability, but it is strongly discouraged]
  94. The formats allowed by the pcap_findalldevs_ex() are the following:
  95. - file://folder/ [lists all the files in the given folder]
  96. - rpcap:// [lists all local adapters]
  97. - rpcap://host:port/ [lists the devices available on a remote host]
  98. Referring to the 'host' and 'port' paramters, they can be either numeric or literal. Since
  99. IPv6 is fully supported, these are the allowed formats:
  100. - host (literal): e.g. host.foo.bar
  101. - host (numeric IPv4): e.g. 10.11.12.13
  102. - host (numeric IPv4, IPv6 style): e.g. [10.11.12.13]
  103. - host (numeric IPv6): e.g. [1:2:3::4]
  104. - port: can be either numeric (e.g. '80') or literal (e.g. 'http')
  105. Here you find some allowed examples:
  106. - rpcap://host.foo.bar/devicename [everything literal, no port number]
  107. - rpcap://host.foo.bar:1234/devicename [everything literal, with port number]
  108. - rpcap://10.11.12.13/devicename [IPv4 numeric, no port number]
  109. - rpcap://10.11.12.13:1234/devicename [IPv4 numeric, with port number]
  110. - rpcap://[10.11.12.13]:1234/devicename [IPv4 numeric with IPv6 format, with port number]
  111. - rpcap://[1:2:3::4]/devicename [IPv6 numeric, no port number]
  112. - rpcap://[1:2:3::4]:1234/devicename [IPv6 numeric, with port number]
  113. - rpcap://[1:2:3::4]:http/devicename [IPv6 numeric, with literal port number]
  114. {
  115. */
  116. /*!
  117. brief String that will be used to determine the type of source in use (file,
  118. remote/local interface).
  119. This string will be prepended to the interface name in order to create a string
  120. that contains all the information required to open the source.
  121. This string indicates that the user wants to open a capture from a local file.
  122. */
  123. #define PCAP_SRC_FILE_STRING "file://"
  124. /*!
  125. brief String that will be used to determine the type of source in use (file,
  126. remote/local interface).
  127. This string will be prepended to the interface name in order to create a string
  128. that contains all the information required to open the source.
  129. This string indicates that the user wants to open a capture from a network interface.
  130. This string does not necessarily involve the use of the RPCAP protocol. If the
  131. interface required resides on the local host, the RPCAP protocol is not involved
  132. and the local functions are used.
  133. */
  134. #define PCAP_SRC_IF_STRING "rpcap://"
  135. /*!
  136. }
  137. */
  138. /*!
  139. addtogroup remote_open_flags
  140. {
  141. */
  142. /*!
  143. brief It defines if the adapter has to go in promiscuous mode.
  144. It is '1' if you have to open the adapter in promiscuous mode, '0' otherwise.
  145. Note that even if this parameter is false, the interface could well be in promiscuous
  146. mode for some other reason (for example because another capture process with 
  147. promiscuous mode enabled is currently using that interface).
  148. On on Linux systems with 2.2 or later kernels (that have the "any" device), this
  149. flag does not work on the "any" device; if an argument of "any" is supplied,
  150. the 'promisc' flag is ignored.
  151. */
  152. #define PCAP_OPENFLAG_PROMISCUOUS 1
  153. /*!
  154. brief It defines if the data trasfer (in case of a remote
  155. capture) has to be done with UDP protocol.
  156. If it is '1' if you want a UDP data connection, '0' if you want
  157. a TCP data connection; control connection is always TCP-based.
  158. A UDP connection is much lighter, but it does not guarantee that all
  159. the captured packets arrive to the client workstation. Moreover, 
  160. it could be harmful in case of network congestion.
  161. This flag is meaningless if the source is not a remote interface.
  162. In that case, it is simply ignored.
  163. */
  164. #define PCAP_OPENFLAG_DATATX_UDP 2
  165. /*!
  166. brief It defines if the remote probe has to capture its own generated traffic.
  167. In case the remote probe uses the same interface to capture traffic and to send
  168. data back to the caller, the captured traffic includes the RPCAP traffic as well.
  169. If this flag is turned on, the RPCAP traffic is excluded from the capture, so that
  170. the trace returned back to the collector is does not include this traffic.
  171. */
  172. #define PCAP_OPENFLAG_NOCAPTURE_RPCAP 4
  173. /*!
  174. }
  175. */
  176. /*!
  177. addtogroup remote_samp_methods
  178. {
  179. */
  180. /*!
  181. brief No sampling has to be done on the current capture.
  182. In this case, no sampling algorithms are applied to the current capture.
  183. */
  184. #define PCAP_SAMP_NOSAMP 0
  185. /*!
  186. brief It defines that only 1 out of N packets must be returned to the user.
  187. In this case, the 'value' field of the 'pcap_samp' structure indicates the
  188. number of packets (minus 1) that must be discarded before one packet got accepted.
  189. In other words, if 'value = 10', the first packet is returned to the caller, while
  190. the following 9 are discarded.
  191. */
  192. #define PCAP_SAMP_1_EVERY_N 1
  193. /*!
  194. brief It defines that we have to return 1 packet every N milliseconds.
  195. In this case, the 'value' field of the 'pcap_samp' structure indicates the 'waiting
  196. time' in milliseconds before one packet got accepted.
  197. In other words, if 'value = 10', the first packet is returned to the caller; the next 
  198. returned one will be the first packet that arrives when 10ms have elapsed. 
  199. */
  200. #define PCAP_SAMP_FIRST_AFTER_N_MS 2
  201. /*!
  202. }
  203. */
  204. /*!
  205. addtogroup remote_auth_methods
  206. {
  207. */
  208. /*!
  209. brief It defines the NULL authentication.
  210. This value has to be used within the 'type' member of the pcap_rmtauth structure.
  211. The 'NULL' authentication has to be equal to 'zero', so that old applications
  212. can just put every field of struct pcap_rmtauth to zero, and it does work.
  213. */
  214. #define RPCAP_RMTAUTH_NULL 0
  215. /*!
  216. brief It defines the username/password authentication.
  217. With this type of authentication, the RPCAP protocol will use the username/
  218. password provided to authenticate the user on the remote machine. If the
  219. authentication is successful (and the user has the right to open network devices)
  220. the RPCAP connection will continue; otherwise it will be dropped.
  221. This value has to be used within the 'type' member of the pcap_rmtauth structure.
  222. */
  223. #define RPCAP_RMTAUTH_PWD 1
  224. /*!
  225. }
  226. */
  227. /*!
  228. brief This structure keeps the information needed to autheticate
  229. the user on a remote machine.
  230. The remote machine can either grant or refuse the access according 
  231. to the information provided.
  232. In case the NULL authentication is required, both 'username' and
  233. 'password' can be NULL pointers.
  234. This structure is meaningless if the source is not a remote interface;
  235. in that case, the functions which requires such a structure can accept
  236. a NULL pointer as well.
  237. */
  238. struct pcap_rmtauth
  239. {
  240. /*!
  241. brief Type of the authentication required.
  242. In order to provide maximum flexibility, we can support different types
  243. of authentication based on the value of this 'type' variable. The currently 
  244. supported authentication methods are defined into the
  245. link remote_auth_methods Remote Authentication Methods Sectionendlink.
  246. */
  247. int type;
  248. /*!
  249. brief Zero-terminated string containing the username that has to be 
  250. used on the remote machine for authentication.
  251. This field is meaningless in case of the RPCAP_RMTAUTH_NULL authentication
  252. and it can be NULL.
  253. */
  254. char *username;
  255. /*!
  256. brief Zero-terminated string containing the password that has to be 
  257. used on the remote machine for authentication.
  258. This field is meaningless in case of the RPCAP_RMTAUTH_NULL authentication
  259. and it can be NULL.
  260. */
  261. char *password;
  262. };
  263. /*!
  264. brief This structure defines the information related to sampling.
  265. In case the sampling is requested, the capturing device should read
  266. only a subset of the packets coming from the source. The returned packets depend
  267. on the sampling parameters.
  268. warning The sampling process is applied <strong>after</strong> the filtering process.
  269. In other words, packets are filtered first, then the sampling process selects a
  270. subset of the 'filtered' packets and it returns them to the caller.
  271. */
  272. struct pcap_samp
  273. {
  274. /*!
  275. Method used for sampling. Currently, the supported methods are listed in the
  276. link remote_samp_methods Sampling Methods Sectionendlink.
  277. */
  278. int method;
  279. /*!
  280. This value depends on the sampling method defined. For its meaning, please check
  281. at the link remote_samp_methods Sampling Methods Sectionendlink.
  282. */
  283. int value;
  284. };
  285. //! Maximum lenght of an host name (needed for the RPCAP active mode)
  286. #define RPCAP_HOSTLIST_SIZE 1024
  287. /*!
  288. }
  289. */ // end of public documentation
  290. // Exported functions
  291. /** name New WinPcap functions
  292. This section lists the new functions that are able to help considerably in writing
  293. WinPcap programs because of their easiness of use.
  294.  */
  295. //{
  296. pcap_t *pcap_open(const char *source, int snaplen, int flags, int read_timeout, struct pcap_rmtauth *auth, char *errbuf);
  297. int pcap_createsrcstr(char *source, int type, const char *host, const char *port, const char *name, char *errbuf);
  298. int pcap_parsesrcstr(const char *source, int *type, char *host, char *port, char *name, char *errbuf);
  299. int pcap_findalldevs_ex(char *source, struct pcap_rmtauth *auth, pcap_if_t **alldevs, char *errbuf);
  300. struct pcap_samp *pcap_setsampling(pcap_t *p);
  301. //}
  302. // End of new winpcap functions
  303. /** name Remote Capture functions
  304.  */
  305. //{ 
  306. SOCKET pcap_remoteact_accept(const char *address, const char *port, const char *hostlist, char *connectinghost, struct pcap_rmtauth *auth, char *errbuf);
  307. int pcap_remoteact_list(char *hostlist, char sep, int size, char *errbuf);
  308. int pcap_remoteact_close(const char *host, char *errbuf);
  309. void pcap_remoteact_cleanup();
  310. //}
  311. // End of remote capture functions
  312. #ifdef __cplusplus
  313. }
  314. #endif
  315. #endif