请问如何编写程序关闭本机中其它程序创建的TCP连接 我能够用程序来扫描出本机打开的TCP端口。请问如何编写代码关闭其它程序打开的TCP端口??谢谢! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 别的程序创建连接打开的端口,一般情况下是无法直接关闭的,只能通过终止建立连接的进程来关闭这个端口。具体方法是调用OpenProcess和TerminateProcess,参考这篇文章:http://news.onlinedown.net/info/15911-1.htm TCPView就可以,但不知是怎么实现的。 搂主的意思是只关闭该TCP连接,不结束该进程吧?屏蔽掉该TCP连接的端口就行了. 参考TCP/IP中的端口筛选,屏蔽端口 谢谢大家的回答,我的意思只是断开本机别的程序打开的TCP连接,并不屏蔽端口,就像TCPView一样。 查了些资料,据说是获取连接句柄,发送rst 包,可我还是不知道怎么做,那位能详细解答一下啊,谢谢了。 http://community.csdn.net/Expert/topic/2975/2975190.xml?temp=.7240106 基本的原理是用winpcap抓取包的拷贝,仿造TCP的ACK包发送一份伪包带RST标志来中断连接。我一年前写过一个帖子是如何中断已有的RST连接,你可以看看。http://search.csdn.net/Expert/topic/2277/2277485.xml?temp=1.098269E-02 close别人用的fd不就可以关了。fd是系统全局的吧 我自己解决了,只是在window下的可以:使用iphelper.dll 中的SetTcpEntry()函数就行了,在使用这个函数之前,先获得TCP连接信息。int main(int argc, char* argv[]){ // Declare and initialize variables PMIB_TCPTABLE pTcpTable = 0; char ipaddress[100]; //pTcpTable = (MIB_TCPTABLE*) malloc(sizeof(MIB_TCPTABLE)); DWORD dwSize = 0; // Make an initial call to GetTcpTable to // get the necessary size into the dwSize variable if( GetTcpTable(pTcpTable, &dwSize, TRUE) == ERROR_INSUFFICIENT_BUFFER ) { pTcpTable = ( MIB_TCPTABLE* ) malloc( (UINT) dwSize ); } // Make a second call to GetTcpTable to get // the actual data we require DWORD dwRetVal; if( (dwRetVal = GetTcpTable( pTcpTable, &dwSize, TRUE )) == NO_ERROR ) { for( int i = 0; i < (int) pTcpTable->dwNumEntries; i++ ) { sprintf( ipaddress, "%d.%d.%d.%d", (pTcpTable->table[i].dwRemoteAddr >> 24) & 0xFF, (pTcpTable->table[i].dwRemoteAddr >> 16) & 0xFF, (pTcpTable->table[i].dwRemoteAddr >> 8) & 0xFF, (pTcpTable->table[i].dwRemoteAddr) & 0xFF ); printf( "%s\n", ipaddress ); // kill the TCP link to 210.51.181.253 if( strcmp(ipaddress, "253.181.51.210") == 0 ) { MIB_TCPROW sKillConn; sKillConn = pTcpTable->table[i]; sKillConn.dwState = MIB_TCP_STATE_DELETE_TCB; // close tcp connection DWORD dwRez = SetTcpEntry( &sKillConn ); } } } else { printf( "\tCall to GetTcpTable failed.\n" ); } if( pTcpTable ) { free( pTcpTable ) ; } return 0;} vc编译的程序必须在管理员权限下运行 菜单的选中标记? 如何阅读一个基于COM的超大系统的源码 项目成功了,会是什么样子? (不爽放分贴) 急,急,急,急,如何在网页中取得它的原始文档数据. 菜鸟问题! 请问如何在程序中设置和菜单的DISABLE,ENABLE属性 请问可以通过FindWindow进行模糊查找吗? Find the process using a Dll ? 求用VC编的计算器小程序的源代码 用opencv 匹配图片出现错误匹配 我的 New ATL Object 的菜单哪里去了? 可以推荐一本书吗?
http://news.onlinedown.net/info/15911-1.htm
屏蔽掉该TCP连接的端口就行了.
我一年前写过一个帖子是如何中断已有的RST连接,你可以看看。
http://search.csdn.net/Expert/topic/2277/2277485.xml?temp=1.098269E-02
使用iphelper.dll 中的SetTcpEntry()函数就行了,在使用这个函数之前,先获得TCP连接信息。int main(int argc, char* argv[])
{ // Declare and initialize variables
PMIB_TCPTABLE pTcpTable = 0;
char ipaddress[100]; //pTcpTable = (MIB_TCPTABLE*) malloc(sizeof(MIB_TCPTABLE));
DWORD dwSize = 0; // Make an initial call to GetTcpTable to
// get the necessary size into the dwSize variable
if( GetTcpTable(pTcpTable, &dwSize, TRUE) == ERROR_INSUFFICIENT_BUFFER )
{
pTcpTable = ( MIB_TCPTABLE* ) malloc( (UINT) dwSize );
} // Make a second call to GetTcpTable to get
// the actual data we require
DWORD dwRetVal;
if( (dwRetVal = GetTcpTable( pTcpTable, &dwSize, TRUE )) == NO_ERROR )
{
for( int i = 0; i < (int) pTcpTable->dwNumEntries; i++ )
{
sprintf( ipaddress, "%d.%d.%d.%d",
(pTcpTable->table[i].dwRemoteAddr >> 24) & 0xFF,
(pTcpTable->table[i].dwRemoteAddr >> 16) & 0xFF,
(pTcpTable->table[i].dwRemoteAddr >> 8) & 0xFF,
(pTcpTable->table[i].dwRemoteAddr) & 0xFF ); printf( "%s\n", ipaddress );
// kill the TCP link to 210.51.181.253
if( strcmp(ipaddress, "253.181.51.210") == 0 )
{
MIB_TCPROW sKillConn;
sKillConn = pTcpTable->table[i];
sKillConn.dwState = MIB_TCP_STATE_DELETE_TCB;
// close tcp connection
DWORD dwRez = SetTcpEntry( &sKillConn );
}
}
} else
{
printf( "\tCall to GetTcpTable failed.\n" );
}
if( pTcpTable )
{
free( pTcpTable ) ;
}
return 0;
}