Flyff Paketfilter Source C++

    • Flyff Paketfilter Source C++

      Hallo Leute ich habe vor einigen Tagen eine Source von einem Paketfilter released.
      Jetzt dachte da einige ihren eingenen Paketfilter basteln wollen
      stelle ich sie hier jetzt auch in den Bereich, da viele ja nicht in den C++ Bereich schauen.
      Jetzt auch inklusive IP Blocker von mir...
      mehr kann ich nich in C++ xD
      Packetfilter.cpp

      C-Quellcode

      1. /******************************************************************************
      2. PacketFilter.cpp - PacketFilter class implemenation.
      3. Mahesh S
      4. swatkat_thinkdigit@yahoo.co.in
      5. http://swatrant.blogspot.com/
      6. ******************************************************************************/
      7. #include "PacketFilter.h"
      8. /******************************************************************************
      9. PacketFilter::PacketFilter() - Constructor
      10. *******************************************************************************/
      11. PacketFilter::PacketFilter()
      12. {
      13. try
      14. {
      15. // Initialize member variables.
      16. m_hEngineHandle = NULL;
      17. ::ZeroMemory( &m_subLayerGUID, sizeof( GUID ) );
      18. }
      19. catch(...)
      20. {
      21. }
      22. }
      23. /******************************************************************************
      24. PacketFilter::~PacketFilter() - Destructor
      25. *******************************************************************************/
      26. PacketFilter::~PacketFilter()
      27. {
      28. try
      29. {
      30. // Stop firewall before closing.
      31. StopFirewall();
      32. }
      33. catch(...)
      34. {
      35. }
      36. }
      37. /******************************************************************************
      38. PacketFilter::CreateDeleteInterface - This method creates or deletes a packet
      39. filter interface.
      40. *******************************************************************************/
      41. DWORD PacketFilter::CreateDeleteInterface( bool bCreate )
      42. {
      43. DWORD dwFwAPiRetCode = ERROR_BAD_COMMAND;
      44. try
      45. {
      46. if( bCreate )
      47. {
      48. // Create packet filter interface.
      49. dwFwAPiRetCode = ::FwpmEngineOpen0( NULL,
      50. RPC_C_AUTHN_WINNT,
      51. NULL,
      52. NULL,
      53. &m_hEngineHandle );
      54. }
      55. else
      56. {
      57. if( NULL != m_hEngineHandle )
      58. {
      59. // Close packet filter interface.
      60. dwFwAPiRetCode = ::FwpmEngineClose0( m_hEngineHandle );
      61. m_hEngineHandle = NULL;
      62. }
      63. }
      64. }
      65. catch(...)
      66. {
      67. }
      68. return dwFwAPiRetCode;
      69. }
      70. /******************************************************************************
      71. PacketFilter::BindUnbindInterface - This method binds to or unbinds from a
      72. packet filter interface.
      73. *******************************************************************************/
      74. DWORD PacketFilter::BindUnbindInterface( bool bBind )
      75. {
      76. DWORD dwFwAPiRetCode = ERROR_BAD_COMMAND;
      77. try
      78. {
      79. if( bBind )
      80. {
      81. RPC_STATUS rpcStatus = {0};
      82. FWPM_SUBLAYER0 SubLayer = {0};
      83. // Create a GUID for our packet filter layer.
      84. rpcStatus = ::UuidCreate( &SubLayer.subLayerKey );
      85. if( NO_ERROR == rpcStatus )
      86. {
      87. // Save GUID.
      88. ::CopyMemory( &m_subLayerGUID,
      89. &SubLayer.subLayerKey,
      90. sizeof( SubLayer.subLayerKey ) );
      91. // Populate packet filter layer information.
      92. SubLayer.displayData.name = FIREWALL_SUBLAYER_NAMEW;
      93. SubLayer.displayData.description = FIREWALL_SUBLAYER_NAMEW;
      94. SubLayer.flags = 0;
      95. SubLayer.weight = 0x100;
      96. // Add packet filter to our interface.
      97. dwFwAPiRetCode = ::FwpmSubLayerAdd0( m_hEngineHandle,
      98. &SubLayer,
      99. NULL );
      100. }
      101. }
      102. else
      103. {
      104. // Delete packet filter layer from our interface.
      105. dwFwAPiRetCode = ::FwpmSubLayerDeleteByKey0( m_hEngineHandle,
      106. &m_subLayerGUID );
      107. ::ZeroMemory( &m_subLayerGUID, sizeof( GUID ) );
      108. }
      109. }
      110. catch(...)
      111. {
      112. }
      113. return dwFwAPiRetCode;
      114. }
      115. /******************************************************************************
      116. PacketFilter::AddRemoveFilter - This method adds or removes a filter to an
      117. existing interface.
      118. *******************************************************************************/
      119. DWORD PacketFilter::AddRemoveFilter( bool bAdd )
      120. {
      121. DWORD dwFwAPiRetCode = ERROR_BAD_COMMAND;
      122. try
      123. {
      124. if( bAdd )
      125. {
      126. if( m_lstFilters.size() )
      127. {
      128. IPFILTERINFOLIST::iterator itFilters;
      129. for( itFilters = m_lstFilters.begin(); itFilters != m_lstFilters.end(); itFilters++ )
      130. {
      131. if( ( NULL != itFilters->bIpAddrToBlock ) && ( 0 != itFilters->uHexAddrToBlock ) )
      132. {
      133. FWPM_FILTER0 Filter = {0};
      134. FWPM_FILTER_CONDITION0 Condition = {0};
      135. FWP_V4_ADDR_AND_MASK AddrMask = {0};
      136. // Prepare filter condition.
      137. Filter.subLayerKey = m_subLayerGUID;
      138. Filter.displayData.name = FIREWALL_SERVICE_NAMEW;
      139. Filter.layerKey = FWPM_LAYER_INBOUND_TRANSPORT_V4;
      140. Filter.action.type = FWP_ACTION_BLOCK;
      141. Filter.weight.type = FWP_EMPTY;
      142. Filter.filterCondition = &Condition;
      143. Filter.numFilterConditions = 1;
      144. // Remote IP address should match itFilters->uHexAddrToBlock.
      145. Condition.fieldKey = FWPM_CONDITION_IP_REMOTE_ADDRESS;
      146. Condition.matchType = FWP_MATCH_EQUAL;
      147. Condition.conditionValue.type = FWP_V4_ADDR_MASK;
      148. Condition.conditionValue.v4AddrMask = &AddrMask;
      149. // Add IP address to be blocked.
      150. AddrMask.addr = itFilters->uHexAddrToBlock;
      151. AddrMask.mask = VISTA_SUBNET_MASK;
      152. // Add filter condition to our interface. Save filter id in itFilters->u64VistaFilterId.
      153. dwFwAPiRetCode = ::FwpmFilterAdd0( m_hEngineHandle,
      154. &Filter,
      155. NULL,
      156. &(itFilters->u64VistaFilterId) );
      157. }
      158. }
      159. }
      160. }
      161. else
      162. {
      163. if( m_lstFilters.size() )
      164. {
      165. IPFILTERINFOLIST::iterator itFilters;
      166. for( itFilters = m_lstFilters.begin(); itFilters != m_lstFilters.end(); itFilters++ )
      167. {
      168. if( ( NULL != itFilters->bIpAddrToBlock ) && ( 0 != itFilters->uHexAddrToBlock ) )
      169. {
      170. // Delete all previously added filters.
      171. dwFwAPiRetCode = ::FwpmFilterDeleteById0( m_hEngineHandle,
      172. itFilters->u64VistaFilterId );
      173. itFilters->u64VistaFilterId = 0;
      174. }
      175. }
      176. }
      177. }
      178. }
      179. catch(...)
      180. {
      181. }
      182. return dwFwAPiRetCode;
      183. }
      184. /******************************************************************************
      185. PacketFilter::ParseIPAddrString - This is an utility method to convert
      186. IP address in string format to byte array and
      187. hex formats.
      188. *******************************************************************************/
      189. bool PacketFilter::ParseIPAddrString( char* szIpAddr, UINT nStrLen, BYTE* pbHostOrdr, UINT nByteLen, ULONG& uHexAddr )
      190. {
      191. bool bRet = true;
      192. try
      193. {
      194. UINT i = 0;
      195. UINT j = 0;
      196. UINT nPack = 0;
      197. char szTemp[2];
      198. // Build byte array format from string format.
      199. for( ; ( i < nStrLen ) && ( j < nByteLen ); )
      200. {
      201. if( '.' != szIpAddr[i] )
      202. {
      203. ::StringCchPrintf( szTemp, 2, "%c", szIpAddr[i] );
      204. nPack = (nPack*10) + ::atoi( szTemp );
      205. }
      206. else
      207. {
      208. pbHostOrdr[j] = nPack;
      209. nPack = 0;
      210. j++;
      211. }
      212. i++;
      213. }
      214. if( j < nByteLen )
      215. {
      216. pbHostOrdr[j] = nPack;
      217. // Build hex format from byte array format.
      218. for( j = 0; j < nByteLen; j++ )
      219. {
      220. uHexAddr = ( uHexAddr << 8 ) + pbHostOrdr[j];
      221. }
      222. }
      223. }
      224. catch(...)
      225. {
      226. }
      227. return bRet;
      228. }
      229. /******************************************************************************
      230. PacketFilter::AddToBlockList - This public method allows caller to add
      231. IP addresses which need to be blocked.
      232. *******************************************************************************/
      233. void PacketFilter::AddToBlockList( char* szIpAddrToBlock )
      234. {
      235. try
      236. {
      237. if( NULL != szIpAddrToBlock )
      238. {
      239. IPFILTERINFO stIPFilter = {0};
      240. // Get byte array format and hex format IP address from string format.
      241. ParseIPAddrString( szIpAddrToBlock,
      242. ::lstrlen( szIpAddrToBlock ),
      243. stIPFilter.bIpAddrToBlock,
      244. BYTE_IPADDR_ARRLEN,
      245. stIPFilter.uHexAddrToBlock );
      246. // Push the IP address information to list.
      247. m_lstFilters.push_back( stIPFilter );
      248. }
      249. }
      250. catch(...)
      251. {
      252. }
      253. }
      254. /******************************************************************************
      255. PacketFilter::StartFirewall - This public method starts firewall.
      256. *******************************************************************************/
      257. BOOL PacketFilter::StartFirewall()
      258. {
      259. BOOL bStarted = FALSE;
      260. try
      261. {
      262. // Create packet filter interface.
      263. if( ERROR_SUCCESS == CreateDeleteInterface( true ) )
      264. {
      265. // Bind to packet filter interface.
      266. if( ERROR_SUCCESS == BindUnbindInterface( true ) )
      267. {
      268. // Add filters.
      269. AddRemoveFilter( true );
      270. bStarted = TRUE;
      271. }
      272. }
      273. }
      274. catch(...)
      275. {
      276. }
      277. return bStarted;
      278. }
      279. /******************************************************************************
      280. PacketFilter::StopFirewall - This method stops firewall.
      281. *******************************************************************************/
      282. BOOL PacketFilter::StopFirewall()
      283. {
      284. BOOL bStopped = FALSE;
      285. try
      286. {
      287. // Remove all filters.
      288. AddRemoveFilter( false );
      289. m_lstFilters.clear();
      290. // Unbind from packet filter interface.
      291. if( ERROR_SUCCESS == BindUnbindInterface( false ) )
      292. {
      293. // Delete packet filter interface.
      294. if( ERROR_SUCCESS == CreateDeleteInterface( false ) )
      295. {
      296. bStopped = TRUE;
      297. }
      298. }
      299. }
      300. catch(...)
      301. {
      302. }
      303. return bStopped;
      304. }
      305. #ifdef SAMPLE_APP
      306. /******************************************************************************
      307. main - Entry point.
      308. *******************************************************************************/
      309. void main()
      310. {
      311. try
      312. {
      313. PacketFilter pktFilter;
      314. // Add IP addresses which are to be blocked.
      315. pktFilter.AddToBlockList( "209.160.73.61" );
      316. pktFilter.AddToBlockList( "69.10.233.10" );
      317. // Start firewall.
      318. if( pktFilter.StartFirewall() )
      319. {
      320. printf( "\nFirewall started successfully...\n" );
      321. }
      322. else
      323. {
      324. printf( "\nError starting firewall. GetLastError() 0x%x", ::GetLastError() );
      325. }
      326. // Wait.
      327. printf( "\nPress any key to stop firewall...\n" );
      328. _getch();
      329. // Stop firewall.
      330. if( pktFilter.StopFirewall() )
      331. {
      332. printf( "\nFirewall stopped successfully...\n" );
      333. }
      334. else
      335. {
      336. printf( "\nError stopping firewall. GetLastError() 0x%x", ::GetLastError() );
      337. }
      338. // Quit.
      339. printf( "\nPress any key to exit...\n" );
      340. _getch();
      341. }
      342. catch(...)
      343. {
      344. }
      345. }
      346. #endif //SAMPLE_APP
      Alles anzeigen




      Packetfilter.h

      C-Quellcode

      1. /******************************************************************************
      2. PacketFilter.h - PacketFilter class declaration.
      3. Mahesh S
      4. swatkat_thinkdigit@yahoo.co.in
      5. http://swatrant.blogspot.com/
      6. ******************************************************************************/
      7. #ifndef _PACKETFILTER_H_
      8. #define _PACKETFILTER_H_
      9. #define SAMPLE_APP // Comment this line to disable the main().
      10. // Standard includes.
      11. #include <Winsock2.h>
      12. #include <windows.h>
      13. #include <stdio.h>
      14. #include <conio.h>
      15. #include <strsafe.h>
      16. #include <fwpmu.h>
      17. #include <list>
      18. // Firewall sub-layer names.
      19. #define FIREWALL_SUBLAYER_NAME "MyVistaFirewall"
      20. #define FIREWALL_SUBLAYER_NAMEW L"MyVistaFirewall"
      21. #define FIREWALL_SERVICE_NAMEW FIREWALL_SUBLAYER_NAMEW
      22. // Byte array IP address length
      23. #define BYTE_IPADDR_ARRLEN 4
      24. // String format IP address length
      25. #define STR_IPADDR_LEN 32
      26. // Vista subnet mask
      27. #define VISTA_SUBNET_MASK 0xffffffff
      28. // Structure to store IP address filter.
      29. typedef struct _IPFILTERINFO {
      30. BYTE bIpAddrToBlock[BYTE_IPADDR_ARRLEN];
      31. ULONG uHexAddrToBlock;
      32. UINT64 u64VistaFilterId;
      33. } IPFILTERINFO, *PIPFILTERINFO;
      34. // List of filters.
      35. typedef std::list<IPFILTERINFO> IPFILTERINFOLIST;
      36. class PacketFilter
      37. {
      38. private:
      39. // Firewall engine handle.
      40. HANDLE m_hEngineHandle;
      41. // Firewall sublayer GUID.
      42. GUID m_subLayerGUID;
      43. // List of filters.
      44. IPFILTERINFOLIST m_lstFilters;
      45. // Method to get byte array format and hex format IP address from string format.
      46. bool ParseIPAddrString( char* szIpAddr, UINT nStrLen, BYTE* pbHostOrdr, UINT nByteLen, ULONG& uHexAddr );
      47. // Method to create/delete packet filter interface.
      48. DWORD CreateDeleteInterface( bool bCreate );
      49. // Method to bind/unbind to/from packet filter interface.
      50. DWORD BindUnbindInterface( bool bBind );
      51. // Method to add/remove filter.
      52. DWORD AddRemoveFilter( bool bAdd );
      53. public:
      54. // Constructor.
      55. PacketFilter();
      56. // Destructor.
      57. ~PacketFilter();
      58. // Method to add IP addresses to m_lstFilters list.
      59. void AddToBlockList( char* szIpAddrToBlock );
      60. // Method to start packet filter.
      61. BOOL StartFirewall();
      62. // Method to stop packet filter.
      63. BOOL StopFirewall();
      64. };
      65. #endif
      Alles anzeigen
    • Werbung zur Unterstützung des Forums ( Bitte AddBlocker deaktivieren )

    • Jok3r;119693 schrieb:

      Hallo Leute ich habe vor einigen Tagen eine Source von einem Paketfilter released.
      Jetzt dachte da einige ihren eingenen Paketfilter basteln wollen
      stelle ich sie hier jetzt auch in den Bereich, da viele ja nicht in den C++ Bereich schauen.
      Jetzt auch inklusive IP Blocker von mir...
      mehr kann ich nich in C++ xD
      Packetfilter.cpp

      C-Quellcode

      1. /******************************************************************************
      2. PacketFilter.cpp - PacketFilter class implemenation.
      3. Mahesh S
      4. swatkat_thinkdigit@yahoo.co.in
      5. http://swatrant.blogspot.com/
      6. ******************************************************************************/
      7. #include "PacketFilter.h"
      8. /******************************************************************************
      9. PacketFilter::PacketFilter() - Constructor
      10. *******************************************************************************/
      11. PacketFilter::PacketFilter()
      12. {
      13. try
      14. {
      15. // Initialize member variables.
      16. m_hEngineHandle = NULL;
      17. ::ZeroMemory( &m_subLayerGUID, sizeof( GUID ) );
      18. }
      19. catch(...)
      20. {
      21. }
      22. }
      23. /******************************************************************************
      24. PacketFilter::~PacketFilter() - Destructor
      25. *******************************************************************************/
      26. PacketFilter::~PacketFilter()
      27. {
      28. try
      29. {
      30. // Stop firewall before closing.
      31. StopFirewall();
      32. }
      33. catch(...)
      34. {
      35. }
      36. }
      37. /******************************************************************************
      38. PacketFilter::CreateDeleteInterface - This method creates or deletes a packet
      39. filter interface.
      40. *******************************************************************************/
      41. DWORD PacketFilter::CreateDeleteInterface( bool bCreate )
      42. {
      43. DWORD dwFwAPiRetCode = ERROR_BAD_COMMAND;
      44. try
      45. {
      46. if( bCreate )
      47. {
      48. // Create packet filter interface.
      49. dwFwAPiRetCode = ::FwpmEngineOpen0( NULL,
      50. RPC_C_AUTHN_WINNT,
      51. NULL,
      52. NULL,
      53. &m_hEngineHandle );
      54. }
      55. else
      56. {
      57. if( NULL != m_hEngineHandle )
      58. {
      59. // Close packet filter interface.
      60. dwFwAPiRetCode = ::FwpmEngineClose0( m_hEngineHandle );
      61. m_hEngineHandle = NULL;
      62. }
      63. }
      64. }
      65. catch(...)
      66. {
      67. }
      68. return dwFwAPiRetCode;
      69. }
      70. /******************************************************************************
      71. PacketFilter::BindUnbindInterface - This method binds to or unbinds from a
      72. packet filter interface.
      73. *******************************************************************************/
      74. DWORD PacketFilter::BindUnbindInterface( bool bBind )
      75. {
      76. DWORD dwFwAPiRetCode = ERROR_BAD_COMMAND;
      77. try
      78. {
      79. if( bBind )
      80. {
      81. RPC_STATUS rpcStatus = {0};
      82. FWPM_SUBLAYER0 SubLayer = {0};
      83. // Create a GUID for our packet filter layer.
      84. rpcStatus = ::UuidCreate( &SubLayer.subLayerKey );
      85. if( NO_ERROR == rpcStatus )
      86. {
      87. // Save GUID.
      88. ::CopyMemory( &m_subLayerGUID,
      89. &SubLayer.subLayerKey,
      90. sizeof( SubLayer.subLayerKey ) );
      91. // Populate packet filter layer information.
      92. SubLayer.displayData.name = FIREWALL_SUBLAYER_NAMEW;
      93. SubLayer.displayData.description = FIREWALL_SUBLAYER_NAMEW;
      94. SubLayer.flags = 0;
      95. SubLayer.weight = 0x100;
      96. // Add packet filter to our interface.
      97. dwFwAPiRetCode = ::FwpmSubLayerAdd0( m_hEngineHandle,
      98. &SubLayer,
      99. NULL );
      100. }
      101. }
      102. else
      103. {
      104. // Delete packet filter layer from our interface.
      105. dwFwAPiRetCode = ::FwpmSubLayerDeleteByKey0( m_hEngineHandle,
      106. &m_subLayerGUID );
      107. ::ZeroMemory( &m_subLayerGUID, sizeof( GUID ) );
      108. }
      109. }
      110. catch(...)
      111. {
      112. }
      113. return dwFwAPiRetCode;
      114. }
      115. /******************************************************************************
      116. PacketFilter::AddRemoveFilter - This method adds or removes a filter to an
      117. existing interface.
      118. *******************************************************************************/
      119. DWORD PacketFilter::AddRemoveFilter( bool bAdd )
      120. {
      121. DWORD dwFwAPiRetCode = ERROR_BAD_COMMAND;
      122. try
      123. {
      124. if( bAdd )
      125. {
      126. if( m_lstFilters.size() )
      127. {
      128. IPFILTERINFOLIST::iterator itFilters;
      129. for( itFilters = m_lstFilters.begin(); itFilters != m_lstFilters.end(); itFilters++ )
      130. {
      131. if( ( NULL != itFilters->bIpAddrToBlock ) && ( 0 != itFilters->uHexAddrToBlock ) )
      132. {
      133. FWPM_FILTER0 Filter = {0};
      134. FWPM_FILTER_CONDITION0 Condition = {0};
      135. FWP_V4_ADDR_AND_MASK AddrMask = {0};
      136. // Prepare filter condition.
      137. Filter.subLayerKey = m_subLayerGUID;
      138. Filter.displayData.name = FIREWALL_SERVICE_NAMEW;
      139. Filter.layerKey = FWPM_LAYER_INBOUND_TRANSPORT_V4;
      140. Filter.action.type = FWP_ACTION_BLOCK;
      141. Filter.weight.type = FWP_EMPTY;
      142. Filter.filterCondition = &Condition;
      143. Filter.numFilterConditions = 1;
      144. // Remote IP address should match itFilters->uHexAddrToBlock.
      145. Condition.fieldKey = FWPM_CONDITION_IP_REMOTE_ADDRESS;
      146. Condition.matchType = FWP_MATCH_EQUAL;
      147. Condition.conditionValue.type = FWP_V4_ADDR_MASK;
      148. Condition.conditionValue.v4AddrMask = &AddrMask;
      149. // Add IP address to be blocked.
      150. AddrMask.addr = itFilters->uHexAddrToBlock;
      151. AddrMask.mask = VISTA_SUBNET_MASK;
      152. // Add filter condition to our interface. Save filter id in itFilters->u64VistaFilterId.
      153. dwFwAPiRetCode = ::FwpmFilterAdd0( m_hEngineHandle,
      154. &Filter,
      155. NULL,
      156. &(itFilters->u64VistaFilterId) );
      157. }
      158. }
      159. }
      160. }
      161. else
      162. {
      163. if( m_lstFilters.size() )
      164. {
      165. IPFILTERINFOLIST::iterator itFilters;
      166. for( itFilters = m_lstFilters.begin(); itFilters != m_lstFilters.end(); itFilters++ )
      167. {
      168. if( ( NULL != itFilters->bIpAddrToBlock ) && ( 0 != itFilters->uHexAddrToBlock ) )
      169. {
      170. // Delete all previously added filters.
      171. dwFwAPiRetCode = ::FwpmFilterDeleteById0( m_hEngineHandle,
      172. itFilters->u64VistaFilterId );
      173. itFilters->u64VistaFilterId = 0;
      174. }
      175. }
      176. }
      177. }
      178. }
      179. catch(...)
      180. {
      181. }
      182. return dwFwAPiRetCode;
      183. }
      184. /******************************************************************************
      185. PacketFilter::ParseIPAddrString - This is an utility method to convert
      186. IP address in string format to byte array and
      187. hex formats.
      188. *******************************************************************************/
      189. bool PacketFilter::ParseIPAddrString( char* szIpAddr, UINT nStrLen, BYTE* pbHostOrdr, UINT nByteLen, ULONG& uHexAddr )
      190. {
      191. bool bRet = true;
      192. try
      193. {
      194. UINT i = 0;
      195. UINT j = 0;
      196. UINT nPack = 0;
      197. char szTemp[2];
      198. // Build byte array format from string format.
      199. for( ; ( i < nStrLen ) && ( j < nByteLen ); )
      200. {
      201. if( '.' != szIpAddr[i] )
      202. {
      203. ::StringCchPrintf( szTemp, 2, "%c", szIpAddr[i] );
      204. nPack = (nPack*10) + ::atoi( szTemp );
      205. }
      206. else
      207. {
      208. pbHostOrdr[j] = nPack;
      209. nPack = 0;
      210. j++;
      211. }
      212. i++;
      213. }
      214. if( j < nByteLen )
      215. {
      216. pbHostOrdr[j] = nPack;
      217. // Build hex format from byte array format.
      218. for( j = 0; j < nByteLen; j++ )
      219. {
      220. uHexAddr = ( uHexAddr << 8 ) + pbHostOrdr[j];
      221. }
      222. }
      223. }
      224. catch(...)
      225. {
      226. }
      227. return bRet;
      228. }
      229. /******************************************************************************
      230. PacketFilter::AddToBlockList - This public method allows caller to add
      231. IP addresses which need to be blocked.
      232. *******************************************************************************/
      233. void PacketFilter::AddToBlockList( char* szIpAddrToBlock )
      234. {
      235. try
      236. {
      237. if( NULL != szIpAddrToBlock )
      238. {
      239. IPFILTERINFO stIPFilter = {0};
      240. // Get byte array format and hex format IP address from string format.
      241. ParseIPAddrString( szIpAddrToBlock,
      242. ::lstrlen( szIpAddrToBlock ),
      243. stIPFilter.bIpAddrToBlock,
      244. BYTE_IPADDR_ARRLEN,
      245. stIPFilter.uHexAddrToBlock );
      246. // Push the IP address information to list.
      247. m_lstFilters.push_back( stIPFilter );
      248. }
      249. }
      250. catch(...)
      251. {
      252. }
      253. }
      254. /******************************************************************************
      255. PacketFilter::StartFirewall - This public method starts firewall.
      256. *******************************************************************************/
      257. BOOL PacketFilter::StartFirewall()
      258. {
      259. BOOL bStarted = FALSE;
      260. try
      261. {
      262. // Create packet filter interface.
      263. if( ERROR_SUCCESS == CreateDeleteInterface( true ) )
      264. {
      265. // Bind to packet filter interface.
      266. if( ERROR_SUCCESS == BindUnbindInterface( true ) )
      267. {
      268. // Add filters.
      269. AddRemoveFilter( true );
      270. bStarted = TRUE;
      271. }
      272. }
      273. }
      274. catch(...)
      275. {
      276. }
      277. return bStarted;
      278. }
      279. /******************************************************************************
      280. PacketFilter::StopFirewall - This method stops firewall.
      281. *******************************************************************************/
      282. BOOL PacketFilter::StopFirewall()
      283. {
      284. BOOL bStopped = FALSE;
      285. try
      286. {
      287. // Remove all filters.
      288. AddRemoveFilter( false );
      289. m_lstFilters.clear();
      290. // Unbind from packet filter interface.
      291. if( ERROR_SUCCESS == BindUnbindInterface( false ) )
      292. {
      293. // Delete packet filter interface.
      294. if( ERROR_SUCCESS == CreateDeleteInterface( false ) )
      295. {
      296. bStopped = TRUE;
      297. }
      298. }
      299. }
      300. catch(...)
      301. {
      302. }
      303. return bStopped;
      304. }
      305. #ifdef SAMPLE_APP
      306. /******************************************************************************
      307. main - Entry point.
      308. *******************************************************************************/
      309. void main()
      310. {
      311. try
      312. {
      313. PacketFilter pktFilter;
      314. // Add IP addresses which are to be blocked.
      315. pktFilter.AddToBlockList( "209.160.73.61" );
      316. pktFilter.AddToBlockList( "69.10.233.10" );
      317. // Start firewall.
      318. if( pktFilter.StartFirewall() )
      319. {
      320. printf( "\nFirewall started successfully...\n" );
      321. }
      322. else
      323. {
      324. printf( "\nError starting firewall. GetLastError() 0x%x", ::GetLastError() );
      325. }
      326. // Wait.
      327. printf( "\nPress any key to stop firewall...\n" );
      328. _getch();
      329. // Stop firewall.
      330. if( pktFilter.StopFirewall() )
      331. {
      332. printf( "\nFirewall stopped successfully...\n" );
      333. }
      334. else
      335. {
      336. printf( "\nError stopping firewall. GetLastError() 0x%x", ::GetLastError() );
      337. }
      338. // Quit.
      339. printf( "\nPress any key to exit...\n" );
      340. _getch();
      341. }
      342. catch(...)
      343. {
      344. }
      345. }
      346. #endif //SAMPLE_APP
      Alles anzeigen




      Packetfilter.h

      C-Quellcode

      1. /******************************************************************************
      2. PacketFilter.h - PacketFilter class declaration.
      3. Mahesh S
      4. swatkat_thinkdigit@yahoo.co.in
      5. http://swatrant.blogspot.com/
      6. ******************************************************************************/
      7. #ifndef _PACKETFILTER_H_
      8. #define _PACKETFILTER_H_
      9. #define SAMPLE_APP // Comment this line to disable the main().
      10. // Standard includes.
      11. #include <Winsock2.h>
      12. #include <windows.h>
      13. #include <stdio.h>
      14. #include <conio.h>
      15. #include <strsafe.h>
      16. #include <fwpmu.h>
      17. #include <list>
      18. // Firewall sub-layer names.
      19. #define FIREWALL_SUBLAYER_NAME "MyVistaFirewall"
      20. #define FIREWALL_SUBLAYER_NAMEW L"MyVistaFirewall"
      21. #define FIREWALL_SERVICE_NAMEW FIREWALL_SUBLAYER_NAMEW
      22. // Byte array IP address length
      23. #define BYTE_IPADDR_ARRLEN 4
      24. // String format IP address length
      25. #define STR_IPADDR_LEN 32
      26. // Vista subnet mask
      27. #define VISTA_SUBNET_MASK 0xffffffff
      28. // Structure to store IP address filter.
      29. typedef struct _IPFILTERINFO {
      30. BYTE bIpAddrToBlock[BYTE_IPADDR_ARRLEN];
      31. ULONG uHexAddrToBlock;
      32. UINT64 u64VistaFilterId;
      33. } IPFILTERINFO, *PIPFILTERINFO;
      34. // List of filters.
      35. typedef std::list<IPFILTERINFO> IPFILTERINFOLIST;
      36. class PacketFilter
      37. {
      38. private:
      39. // Firewall engine handle.
      40. HANDLE m_hEngineHandle;
      41. // Firewall sublayer GUID.
      42. GUID m_subLayerGUID;
      43. // List of filters.
      44. IPFILTERINFOLIST m_lstFilters;
      45. // Method to get byte array format and hex format IP address from string format.
      46. bool ParseIPAddrString( char* szIpAddr, UINT nStrLen, BYTE* pbHostOrdr, UINT nByteLen, ULONG& uHexAddr );
      47. // Method to create/delete packet filter interface.
      48. DWORD CreateDeleteInterface( bool bCreate );
      49. // Method to bind/unbind to/from packet filter interface.
      50. DWORD BindUnbindInterface( bool bBind );
      51. // Method to add/remove filter.
      52. DWORD AddRemoveFilter( bool bAdd );
      53. public:
      54. // Constructor.
      55. PacketFilter();
      56. // Destructor.
      57. ~PacketFilter();
      58. // Method to add IP addresses to m_lstFilters list.
      59. void AddToBlockList( char* szIpAddrToBlock );
      60. // Method to start packet filter.
      61. BOOL StartFirewall();
      62. // Method to stop packet filter.
      63. BOOL StopFirewall();
      64. };
      65. #endif
      Alles anzeigen


      Damit kann hier eh 99% nichts anfangen. :>
      Naja ist ja nett das du den nicht Programmierern helfen willst, aber wer nichtmal einen Simplen Packet Filter hinkriegt sollte auch deinen Code nicht viel bringen.
      mfg. seeby
    • Wobei hier wiederum die Frage nach dem Grund ist...
      An alle, die es wohl nicht verstehen:

      Dieser Filter kann bestimmte IPs / Ranges / Protokolle etc blockieren und funktioniert quasi wie eine Firewall.
      Schädigende Packets wie z.b. Penya Bug oder invalid Namechange können nicht verhindert werden. ^^

      Alle Features hier sind ohne Probleme auch mit der Windoof-Firewall zu bewerkstelligen.