社区
网络编程
帖子详情
请教TcpView实现
jackholy
2008-04-16 09:42:33
列出网络连接,能对指定连接中止,具有netstat -ano功能,能像TcpView一样动态实时刷新。
查过很多API :NetSessionEnum;GetTcpTable;SnmpExtensionQuery;NetSessionDel....
但要能实时刷新并能中断指定IP连接,就不知道哪个更好使?特别是要能中止本机对指定IP的连接,而不关闭进程。
那位大侠有思路,能有demo学习学习更好。
...全文
359
6
打赏
收藏
请教TcpView实现
列出网络连接,能对指定连接中止,具有netstat -ano功能,能像TcpView一样动态实时刷新。 查过很多API :NetSessionEnum;GetTcpTable;SnmpExtensionQuery;NetSessionDel.... 但要能实时刷新并能中断指定IP连接,就不知道哪个更好使?特别是要能中止本机对指定IP的连接,而不关闭进程。 那位大侠有思路,能有demo学习学习更好。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
knowledge_Is_Life
2008-05-01
打赏
举报
回复
lz要干嘛?
jackholy
2008-04-16
打赏
举报
回复
自己解决了 谢谢
jackholy
2008-04-16
打赏
举报
回复
这里要指出的一点就是,绝大多数程序都是由于程序编写不完善所造成的死连接,即对 Socket 未能进行完善的管理,导致占用端口导致服务器资源耗尽。当然,很多情况下,程序可能不是我们所写,而由于程序代码的复杂、杂乱等原因所导致难以维护也是我们所需要面对的。
网上有很多文章都提到 Socket 长时间处于 CLOSE_WAIT 状态下的问题,说可以使用 Keepalive 选项设置 TCP 心跳来解决,但是却发现设置选项后未能收到效果 。
因此,这里我分享出自己的解决方案:
Windows 中对于枚举系统网络连接有一些非常方便的 API:
* GetTcpTable : 获得 TCP 连接表
* GetExtendedTcpTable : 获得扩展后的 TCP 连接表,相比 GetTcpTable 更为强大,可以获取与连接的进程 ID
* SetTcpEntry : 设置 TCP 连接状态,但据 MSDN 所述,只能设置状态为 DeleteTcb,即删除连接
相信大多数朋友看到这些 API ,就已经了解到我们下一步要做什么了;枚举所有 TCP 连接,筛选出本进程的连接,最后判断是否 CLOSE_WAIT 状态,如果是,则使用 SetTcpEntry 关闭。
其实 Sysinternal 的 TcpView 工具也是应用上述 API 实现其功能的,此工具为我常用的网络诊断工具,同时也可作为一个简单的手动式网络防火墙
jackholy
2008-04-16
打赏
举报
回复
http://blog.sina.com.cn/s/blog_56ea069101000cet.html
利用iphlpapi.dll所提供的函数实现一个简易防火墙的功能 流云 /2007/10/17/ QQ:52984783 Email:ytmGring@163.com
1.先介绍一下几个重要的数据结构以及相关函数
struct MIB_TCPROW //它用来保存单个TCP连接的信息
{
DWORD dwState;//连接状态
DWORD dwLocalAddr;//本地IP地址
DWORD dwLocalPort;//本地端口
DWORD dwRemoteAddr;//远程IP地址
DWORD dwRemotePort;//远程端口
};
struct MIB_TCPTABLE //用来保存整个计算机内所有的TCP连接的信息.把它称之为TCP连接表
{
DWORD dwNumEntries;//应该是连接数
MIB_TCPROW table[ANY_SIZE];//其中ANY_SIZE为任意大小
};
DWORD GetUdpTable(MIB_TCPTABLE*table,DWORD *size,bool bf);
2.通过上面的函数GetUdpTable()可以获取当前系统内所有的TCP连接的信息
通过在一个循环内不断的调用此函数,可以达到监控系统内TCP连接的目的.
通过比较两次调用上面函数所得的MIB_TCPTABLE结构中的dwNumEntries成员的值.
可以判断出系统内是否有新连接产生.或者有旧的连接被删除.
一般我们要处理的就是当有新的连接产生时的情况.
具体的对连接进行处理的方法通过是对整个TCP连接表进行遍历.来对每一个TCP连接进行操作.
最典型的操作是调用SetTcpEntry()函数来设置TCP连接的状态.
函数原型:
DWORD SetTcpEntry(MIB_TCPROW*tcprow);
#define MIB_TCP_STATE_DELETE_TCB 12
在设置时经常用到的状态为MIB_TCP_STATE_DELETE_TCB(删除连接)
例:
先设置状态等于MIB_TCP_STATE_DELETE_TCB
tcprow->dwState=MIB_TCP_STATE_DELETE_TCB;
然后调用SetTcpEntry()函数来删除该连接
SetTcpEntry(tcprow);
CathySun118
2008-04-16
打赏
举报
回复
没有demo,关注
scq2099yt
2008-04-16
打赏
举报
回复
up
JavaSE基础视频精讲⑳:
TCP
和UDP
实现
网络编程
本课程适用于零基础小白快速入门Java语言技术,通过课程学习可以清晰了解Java
TCP
和UDP
实现
网络编程。课程配套完整的(笔记+代码+作业) 课程主要分为:
细说
TCP
内核参数
TCP
性能的提升不仅考察
TCP
的理论知识,还考察了对于操心系统提供的内核参数的理解与应用。
Android与server通信中的方法(
TCP
)高效的安全完整
我以前一直使用sockets
实现
emulator和PC进行通讯,卡了几天,最后
请教
其它人最终能够连接了。 错误原因是在IP和port,IP要用本机IP(在CMD输入ipconfig。注意:每次开机本机IP都不同,ADSL是动态IP),port用emulator的名称,5554或5556.java sever文件要另外建javaproject执行。在androidprojec...
Android与服务器通信的方法之一(
TCP
)效率高安全性完善
之前一直会用sockets来
实现
emulator和PC进行通讯,卡了几天,最后
请教
其他人终于可以连接了。 错误原因是在IP和端口,IP要用本机IP(在CMD输入ipconfig,注意:每次开机本机IP都不同,ADSL是动态IP),端口用emulator的名称,5554或5556.java sever文件要另外建java工程运行,在android工程运行不了java(run application
001基于Python网站爬虫的设计与
实现
1.1 课题背景网络爬虫,是一种按照一定的规则,自动的抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁,自动索引,模拟程序或者蠕虫。网络检索功能起于互联网内容爆炸性发展所带来的对内容检索的需求。搜索引擎不断的发展,人们的需求也在不断的提高,网络信息搜索已经成为人们每天都要进行的内容.如何使搜索引擎能时刻满足人们的需求。最初的检索功能通过索引站的方式
实现
,而有了网络机器人。但是,这些通用性搜索引擎也存在着一定的局限性。
网络编程
18,356
社区成员
64,214
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章