昨天我又看了一下Port_Spy.rar其中只能控制TCP/ICMP连接而对SMTP/POP3, UDP, and IPX/SPX好象不行, 其中控制开启关闭端口主要是调用了两个iphlpapi.dll中的api, GetTcpTable及SetTcpEntry 其中的 GetTcpTable函数能返回当前系统中全部有效的 TCP连接。其定义为: DWORD GetTcpTable( PMIB_TCPTABLE pTcpTable, // buffer for the connection table PDWORD pdwSize, // size of the buffer BOOL bOrder // sort the table? ); 其中参数一是 TCP连接表缓冲区的指针,参数二是缓冲区大小(当缓冲区不够大时,该参数返回实际需要的大小),参数三指示连接表是否需要按“Local IP”、“Localport”、“Remote IP”、“Remote port”依次进行排序。而 SetTcpEntry函数可以删除连接。其定义为: DWORD SetTcpEntry( PMIB_TCPROW pTcpRow // pointer to struct. with new state info ); 在调用此函数之前,应将欲删连接的状态置为 MIB_TCP_STATE_DELETE_TCB(删除)。MIB_TCP_STATE_DELETE_TCB也是目前唯一可在运行时设置的状态。 程序中放了一个定时器,定时检测连接,如果检测到的连接所用的端口是你要关闭的端口则立即调用settcpentry将其删除,达到所谓"关闭"端口听目地.在源程序的frmMain中有一个定时器事件 Private Sub tmr1_Timer() ' CheckTcp End Sub 其是CheckTcp就是用于这一目的的. 其中你所说的关闭端口的程序就是CheckTcp 此程序在模块NetStat.bas中.
我看还是死了这条心吧。。我昨天看了一下资料,看到这么一段话:Windows下的个人防火墙都是基于对数据报的拦截技术之上。当然在具体的实现方式上它们却有很大的不同。总的来说可分为用户级和内核级数据报拦截两类。其中内核级主要是TDI过滤驱动程序,NDIS中间层过滤驱动程序,NDIS过滤钩子驱动程序等,它们都是利用网络驱动来实现的;而用户级的过滤包括SPI接口,Windows2000包过滤接口等。
那就是说,完全禁止网络访问你还是必须开发驱动。
如果你用SPI,应该可以禁止TCP,UDP一类的东西。。但是别人还是能够ping你
其中控制开启关闭端口主要是调用了两个iphlpapi.dll中的api,
GetTcpTable及SetTcpEntry
其中的 GetTcpTable函数能返回当前系统中全部有效的 TCP连接。其定义为:
DWORD GetTcpTable(
PMIB_TCPTABLE pTcpTable, // buffer for the connection table
PDWORD pdwSize, // size of the buffer
BOOL bOrder // sort the table?
); 其中参数一是 TCP连接表缓冲区的指针,参数二是缓冲区大小(当缓冲区不够大时,该参数返回实际需要的大小),参数三指示连接表是否需要按“Local IP”、“Localport”、“Remote IP”、“Remote port”依次进行排序。而 SetTcpEntry函数可以删除连接。其定义为:
DWORD SetTcpEntry(
PMIB_TCPROW pTcpRow // pointer to struct. with new state info
);
在调用此函数之前,应将欲删连接的状态置为 MIB_TCP_STATE_DELETE_TCB(删除)。MIB_TCP_STATE_DELETE_TCB也是目前唯一可在运行时设置的状态。 程序中放了一个定时器,定时检测连接,如果检测到的连接所用的端口是你要关闭的端口则立即调用settcpentry将其删除,达到所谓"关闭"端口听目地.在源程序的frmMain中有一个定时器事件
Private Sub tmr1_Timer() '
CheckTcp
End Sub
其是CheckTcp就是用于这一目的的.
其中你所说的关闭端口的程序就是CheckTcp 此程序在模块NetStat.bas中.