Introduction
This goal of this article is to show how anyone can implement their own firewall using iphlpapi.dll. I have included a BUGGY and not fully functional GUI to show you the way. If you do implement a better GUI, I will be happy to replace the one I included here.
[DllImport("iphlpapi.dll", EntryPoint = "PfCreateInterface")]
public static extern int PfCreateInterface(
int dwName,
PFFORWARD_ACTION inAction,
PFFORWARD_ACTION outAction,
bool UseLog,
bool MustBeUnique,
ref IntPtr ppInterface
);
[DllImport("iphlpapi.dll", EntryPoint = "PfDeleteInterface")]
public static extern int PfDeleteInterface(
IntPtr pInterface
);
[DllImport("iphlpapi.dll", EntryPoint = "PfBindInterfaceToIndex")]
public static extern int PfBindInterfaceToIndex(
IntPtr Interface_handle,
int dwIndex,
PFADDRESSTYPE pfatLinkType,
ref int LinkIPAddress
);
[DllImport("iphlpapi.dll", EntryPoint = "PfBindInterfaceToIPAddress")]
public static extern int PfBindInterfaceToIPAddress(
IntPtr Interface_handle,
PFADDRESSTYPE pfatType,
ref int ip_address
);
[DllImport("iphlpapi.dll", EntryPoint = "PfUnBindInterface")]
public static extern int PfUnBindInterface(
IntPtr pInterface
);
[DllImport("iphlpapi.dll", EntryPoint = "PfAddFiltersToInterface")]
public static extern int PfAddFiltersToInterface(
IntPtr interface_handle,
int cInFilters,
[MarshalAsAttribute(UnmanagedType.Struct)]
ref PPF_FILTER_DESCRIPTOR pfiltIn,
int cOutFilters,
[MarshalAsAttribute(UnmanagedType.Struct)]
ref PPF_FILTER_DESCRIPTOR pfiltOut,
[MarshalAsAttribute(UnmanagedType.Struct)]
ref PPF_FILTER_DESCRIPTOR pfHandle
);
[DllImport("iphlpapi.dll", EntryPoint = "PfRemoveFiltersFromInterface")]
public static extern int PfRemoveFiltersFromInterface(
IntPtr ih,
int cInFilters,
[MarshalAsAttribute(UnmanagedType.Struct)]
ref PPF_FILTER_DESCRIPTOR pfiltIn,
int cOutFilters,
[MarshalAsAttribute(UnmanagedType.Struct)]
ref PPF_FILTER_DESCRIPTOR pfiltOut
);
[DllImport("iphlpapi.dll", EntryPoint = "PfRemoveFilterHandles")]
public static extern int PfRemoveFilterHandles(
IntPtr interface_handle,
int count_Filters,
[MarshalAsAttribute(UnmanagedType.Struct)]
ref PPF_FILTER_DESCRIPTOR pvHandles
);
[DllImport("iphlpapi.dll", EntryPoint = "PfRebindFilters")]
public static extern int PfRebindFilters(
IntPtr pInterface,
[MarshalAsAttribute(UnmanagedType.Struct)]
ref PPF_LATEBIND_INFO pLateBindInfo
);
[DllImport("iphlpapi.dll", EntryPoint = "PPfAddGlobalFilterToInterface")]
public static extern int PfAddGlobalFilterToInterface(
IntPtr interface_handle,
[MarshalAsAttribute(UnmanagedType.Struct)]
ref GLOBAL_FILTER gfFilter
);
[DllImport("iphlpapi.dll", EntryPoint = "PfRemoveGlobalFilterFromInterface")]
public static extern int PfRemoveGlobalFilterFromInterface(
IntPtr interface_handle,
[MarshalAsAttribute(UnmanagedType.Struct)]
ref GLOBAL_FILTER gfFilter
);
[DllImport("iphlpapi.dll", EntryPoint = "SetIpTTL")]
public static extern int SetIpTTL(uint ttl);
History
- 5th January, 2007: Initial post