三星Note 8与努比亚z11 三星c9 pro7荣耀9拍照 哪个更强

箱子上获取活动的TCP/UDP连接_互联网/网络_编程通用_或代码
| 文章 >> 编程通用 >> 互联网/网络
箱子上获取活动的TCP/UDP连接
{S0}简介这个库的主要目的是观看的UDP / TCP连接是活跃在您的PC(如netstat命令不),它是主要的IpHelperApi.dll的包装,它实现4,得到有关统计数据的通用函数TCP和UDP连接(GetUdpStats()/ GetTcpStats()),也得到了UDP和TCP连接(GetUdpConnexions()/ GetTcpConnexions())的表。,它也实现了2 IpHelperApi.dll是相似的,除非他们得到连接的processID GetUdpConnexions / GetTcpConnexions无证功能;在WIN 32 API,它们被命名为:AllocateAndGetTcpExTableFromStack AllocateAndGetUdpExTableFromStack。包装的IpHlpAPI.dll库​​被命名为IPHelper和它仅仅是一个包装的P / Invoke机制NET框架在IPHlpAPI32.cs文件中所有的功能和结构的IPHlpApi.dll声明IpHelperAPI.dll使用。使用System.Runtime.InteropServices命名空间的标准属性[DllImport("; iphlpapi.dllquot";,SetLastError = TRUE)]。公共静态外部INT GetUdpStatistics(文献MIB_UDPSTATS pStats); SetLastError = true标志让我们在P / Invoke机制提出任何错误的详细信息,通常返回的错误代码是由API函数,但这个代码不是非常不言自明的,所以我包括一个函数来获取消息说明,使用的FORMATMESSAGE的kernell32.dll功能:公共静态字符串GetAPIErrorMessageDescription(INT ApiErrNumber)
System.Text.StringBuilder sError =新System.Text.StringBuilder(512);INT lErrorMessageLlErrorMessageLength = FORMATMESSAGE(FORMAT_MESSAGE_FROM_SYSTEM
(IntPtr的),0 0,ApiErrNumber,sError,sError.Capacity,(IntPtr的)0);(lErrorMessageLength GT; 0){字符串strgError = sError.ToString();strgError = strgError.Substring(0,strgError.Length - 2);返回strgError"("; ApiErrNumber.ToString())";}返回";}这个函数只是从系统中获取消息的描述,如果没有找到介绍它返回"无"。在MSDN所有文档iphlpapi功能填补自己的结构,使用参数传递;没有数组,指针或嵌套结构的结构简单,它是很容易得到正确填写的结构,但结构复杂,它可能成为更难。
让我们来看看如何做到这一点:获取API调用的结果结构简单包装首先,让我们看看如何为一个简单的函数的结果:GetTcpStats(),这个函数是用来获取有关一样,活动连接数的几个TCP连接信息。在原来的库很喜欢这个typedef结构_MIB_TCPSTATS宣布在C {/ /结构的结果 DWORD dwRtoA
/ / ..其他的DWORD字段 DWORD dwNumC} MIB_TCPSTATS,* PMIB_TCPSTATSDWORD GetTcpStatistics(PMIB_TCPSTATS pStats);这种结构非常简单,可以在C#中的整数取代所有的DWORD字段:[StructLayout(LayoutKind.Sequential)]公共结构MIB_TCPSTATS{ 公众诠释dwRtoA / / ..其他int字段 公众诠释dwNumC}
[DllImport("; iphlpapi.dllquot";,SetLastError = TRUE)]公共静态外部INT GetTcpStatistics(文献MIB_TCPSTATS pStats);注意ref关键字是必需的,因为在C调用,功能要作为参数的结构的指针。在IPHelper类所以你有一个公共的方法,填补了MIB_TCPSTATS结构:公共无效GetTcpStats(){
TcpStats =新MIB_TCPSTATS();&#16
IPHlpAPI32Wrapper.GetTcpStatistics(REF TcpStats);} &#1
非常简单。注意GetUdpStats()函数的作品正是以同样的方式更复杂的结构包装 GetTcpTable()函数获取一个数组的所有活动的TCP连接,包括本地端点,远程端点和连接的状态,这些结果是在2嵌套的结构存储typedef结构_MIB_TCPTABLE {/ /顶层结构/ /举行的第二次结构的数组DWORD dwNumEMIB_TCPROW表[ANY_SIZE] / /未定义大小的数组} MIB_TCPTABLE,PMIB_TCPTABLE;typedef结构_MIB_TCPROW {/ /结构代表/ /在TCP表单列DWORD dwSDWORD dwLocalADWORD dwLocalPDWORD dwRemoteADWORD dwRemotePMIB_TCPROW,* PMIB_TCPROWDWORD GetTcpTable(PMIB_TCPTABLE pTcpTable,PDWORD pdwSize,布尔边界); GetTcpTable函数需要三个PARAMS的结构,将举行结果的指针,缓冲区的大小指出pTcpTable参数(注意,如果缓冲区太小,输出功能设置此参数相等所需的缓冲区大小),和一个bool标志告诉如果我们想要的结果进行排序或不这里的主要问题是,我们不能使用这2个结构直接编组,因为有一个未定义大小的数组,但有几种解决方案来解决这个问题,我选择使用一个简单的通用方法,取代一个字节数组的第一个参数[DllImport("; iphlpapi.dllquot";,SetLastError = TRUE)]。公共静态GetTcpTable(byte []的pTcpTable
出INT pdwSize,BOOL边界);然后我们要使用这个函数在IPHelper类中的GetTcpConnexion成员方法。要做的第一件事是,我们需要得到所有的结果缓冲区(pTcpTable)的大小,这是一个愚蠢的缓冲区调用函数,该函数将返回必要的大小缓冲区pdwSize参数;注意这是可能的,因为功能已经宣布与前pdwSize参数out关键字:公共无效GetTcpConnections(){
INT pdwSize = 20000;
字节[]缓冲区=新的字节[pdwSize]; / /开始与20.000字节/ /左TCP表的信息
INT RES = IPHlpAPI32Wrapper.GetTcpTable(出pdwSize,真正的缓冲区);
(RES = NO_ERROR) &#1
缓冲区=新的字节[pdwSize];
RES = IPHlpAPI32Wrapper.GetTcpTable(缓冲区,出pdwSize,TRUE);
(RES = 0)
返回; / /错误。你应该处理
一旦我们有权利,我们再次调用该函数的缓冲区大小,以获得正确填充的缓冲区,然后,我们只需要解析的字节得到正确的valueTcpConnexion =新IpHlpApidotnet.MIB_TCPTABLE();偏移= 0;/ /在进入数TcpConnexion.dwNumEntries = Convert.ToInt32(缓冲[n偏移]);偏移= 4;TcpConnexion.table =新MIB_TCPROW [TcpConnexion.dwNumEntries];(I = 0; ILT; TcpConnexion.dwNumE我){
60; / /状态
ST = Convert.ToInt32(缓冲[n偏移]);&#160
/ /字符串中的状态
((MIB_TCPROW)(TcpConnexion.table [I]))StrgState = convert_state(ST);
/ /通过ID状态
((MIB_TCPROW)(TcpConnexion.table [I]))iState = ST。
/ /本地地址
字符串LocalAdrr =缓冲器[n偏移]的toString()。
缓冲区[n偏移1]的toString()
缓冲区[n偏移2]的toString()缓冲区[n偏移3]的ToString();
/ /本地端口十进制
INT的LocalPort =(((INT)缓冲区[n偏移])LT,LT; 8)&#
(((int)的缓冲区[n偏移1]))
(((INT)缓冲区[n偏移2])LT,LT; 24)(((int)的缓冲区[n偏移3])LT,LT; 16);
/ /存储远程端点
((MIB_TCPROW)(TcpConnexion.table [I]))。LOCAL =
新IPEndPoint(IPAddress.Parse(LocalAdrr)的LocalPort);
/ /远程地址
;字符串RemoteAdrr =缓冲器[n偏移]的toString()。
缓冲区[n偏移1]的toString()
缓冲区[n偏移2]的toString()缓冲区[n偏移3]的ToString();
= 0(0.0.0.0)/ /如果远程地址远程端口始终为0
/ /否则得到十进制的远程端口
INT RemoteP
(RemoteAdrr =="; 0.0.0.0)
RemotePort = 0;
RemotePort =(((int)的缓冲区[n偏移])LT,LT; 8)
(((int)的缓冲区[n偏移1]))
(((INT)缓冲区[n偏移2])LT,LT; 24)(((int)的缓冲区[n偏移3])LT,LT; 16);&#160
((MIB_TCPROW)(TcpConnexion.table [I]))。远程
新IPEndPoint(IPAddress.Parse(RemoteAdrr),RemotePort);}
这就是我们称为TcpConnexion一个结构,它包含所有的活动连接。这是位运算符的Int16一个DWORD(UINT32)注意,我们必须转换为本地和远程端口形式。 GetUdpConnexion()的作品正是以同样的方式。IpHelperApi无证功能 GetTcpConnexion()和GetUdpConnexion()函数是有用的,但它们不能被用来控制活动的连接,这意味着,我们不能关闭任何连接,甚至获得其中软件的详细信息,使用此连接。为了能够得到控制连接的手段,我们必须知道哪个进程正在连接到它,但是这两个函数只能在Windows XP提供。后几天:寻求一种方式来获得连接一个连接我发现的ipHlpApi一些无证功能的ProcessID AllocateAndGetTcpExTableFromStack和AllocateAndGetUdpExTableFromStack - 这两个函数的行为是完全一样的方式,GetTcpTable和GetUdpTable除非他们获得连接的processID,不问他们为什么不MSDN上的记录,我真的不知道。所以在这里是如何使用它们,让我们来看看如何AllocateAndGetTcpExTableFromStack(AllocateAndGetUdpExTableFromStack以同样的方式)是在彗星的typedef结构_MIB_TCPTABLE_EX声明{DWORD dwNumEMIB_TCPROW_EX表[ANY_SIZE];} MIB_TCPTABLE_EX,* PMIB_TCPTABLE_EX;typedef结构_MIB_TCPROW_EX {DWORD dwSDWORD dwLocalADWORD dwLocalPDWORD dwRemoteADWORD dwRemotePDWORD dwProcessId和;} MIB_TCPROW_EX,* PMIB_TCPROW_EX;AllocateAndGetTcpExTableFromStack(PMIB_TCPTABLE_EX *,
布尔,处理,DWORD,DWORD);
第一个参数是一个保存结果的结构的指针,第二个参数是一个bool标志,为了结果,第三个是一个进程堆的指针和另外两个标志,我不知道的意思。这个函数遵循相同GetTcpTable的模式,结果存储在一个结构中,有一个未定义大小的数组。我用一个解决方案,轻轻不同的实现在C#比我GetTcpTable使用安全的C#版本的指针。不要怕是不那么吓人:)对于那些不熟悉指针让我们(简要),它是什么。指针是一个数据结构存储的内存地址,例如,如果你有一个整数,持有数字"100",这个整数的指针将存储值"100"的地址,而不是本身的价值,希望其明确的。因此,在C#中,在安全的情况下,我们使用IntPtr结构:[DllImport("; iphlpapi.dllquot",SetLastError = TRUE)]公共外部静态INT AllocateAndGetTcpExTableFromStack(
文献的IntPtr pTable,BOOL边界,IntPtr的堆零INT,INT标志);
[DllImport("kernel32,SetLastError = TRUE)] / /这个函数是/ /用于获取指针的过程/ /堆AllocateAndGetTcpExTableFromStack要求公共静态外部的IntPtr GetProcessHeap();
要使用它,我会基本上按照相同的路径,我GetTcpTable:调用函数的第一时间得到的连接数(行),所以要得到正确的缓冲区大小,然后调用函数的第二次得到正确的results.public无效GetExTcpConnections(){
/ /大小MIB_EXTCPROW结构= 6 *的DWORD
rowsize = 24;
INT BUFFERSIZE = 100000;
/ /分配一个愚蠢的内存空间,以便检索联接NB
IntPtr的lpTable = Marshal.AllocHGlobal(BUFFERSIZE);
/ /获取信息相关
INT RES = IPHlpAPI32Wrapper.AllocateAndGetTcpExTableFromStack(
文献lpTable,真实,IPHlpAPI32Wrapper.GetProcessHeap(),0,2);
如果(res! = NO_ERROR)
Debug.WriteLine(
"Erreur:"IPHlpAPI32Wrapper.GetAPIErrorMessageDescription(RES)
返回; / /错误。你应该处理
CurrentIndex = 0;&#160
/ /获取表中的条目数量
INT NumEntries =(INT)Marshal.ReadIntPtr(lpTable);
lpTable = IntPtr.Z
/ /释放分配的内存空间
Marshal.FreeHGlobal(lpTable);
//...........}&#160
因此,我们必须通过一个IntPtr的功能,做的第一件事是定义一个IntPtr指向一个足够大的内存空间来存储所有的结果,因此,正如我所说,我们必须分配一个任意内存空间来调用函数的第一时间,那么我们可以得到连接数:INT NumEntries =(INT)Marshal.ReadIntPtr(lpTable);这里我们使用Marshal类中的函数读出的值所指向指针;最后不要忘记释放以前分配的内存以避免内存泄漏。现在,让我们所有的数据:///////////////////&#1
/ /计算entrie真正的缓冲区大小NB *
/ /每个entrie(24)dwNumEntries的结构尺寸
BUFFERSIZE =(NumEntries * rowsize)4;
/ /结构持有的resullts
TcpExCon​​nexions =新IpHlpApidotnet.MIB_EXTCPTABLE();
/ /分配内存
lpTable = Marshal.AllocHGlobal(BUFFERSIZE);
RES = IPHlpAPI32Wrapper.AllocateAndGetTcpExTableFromStack(
文献lpTable,真实,IPHlpAPI32Wrapper.GetProcessHeap(),0,2);
如果(res! = NO_ERROR)
Debug.WriteLine("Erreur:
#160;IPHlpAPI32Wrapper.GetAPIErrorMessageDescription(RES)
返回; / /错误。你应该处理
/ /新指针迭代认为数据
IntPtr的电流= lpT
160;CurrentIndex = 0;
/ /得到的条目(再次) &#
NumEntries =(INT)Marshal.ReadIntPtr(电流);
60;TcpExCon​​nexions.dwNumEntries = NumE
/ /使数组的条目
TcpExCon​​nexions.table =新MIB_EXTCPROW [NumEntries];
/ /遍历的指针(DWORD的dwNumEntries大小4)
CurrentIndex = 4;
0;电流=(IntPtr的)((INT)电流CurrentIndex);
/ /为每个条目
(I = 0; ILT; NumE我)
/ /联接的状态(字符串)
TcpExCon​​nexions.table [我]。StrgState =
this.convert_state((INT)Marshal.ReadIntPtr(当前));
60; / /联接的状态(编号)
TcpExCon​​nexions.table [我] iState =(INT)Marshal.ReadIntPtr(电流);
/ /遍历指针4
电流=(IntPtr的)((int)的电流4);
60;/ /得到本地地址的联接
UInt32的localAddr =(UINT32)Marshal.ReadIntPtr(电流);
/ /遍历指针4
电流=(IntPtr的)((int)的电流4);
/ /得到本地端口联接
UInt32的的LocalPort =(UINT32)Marshal.ReadIntPtr(电流);
/ /遍历指针4
电流=(IntPtr的)((int)的电流4);&#1
/ /存放在本地端点的结构和
/ /转换十进制的端口(即convert_Port())
TcpExCon​​nexions.table [我]。本地=新IPEndPoint(localAddr
#160;(INT)convert_Port(的LocalPort));
/ /获取远程联接地址
UInt32的RemoteAddr =(UINT32)Marshal.ReadIntPtr(电流);
60;/ /遍历指针4
电流=(IntPtr的)((int)的电流4);
UInt32的RemotePort = 0; &#
= 0(0.0.0.0)/ /如果远程地址远程端口始终为0
/ /其他远程端口
如果(RemoteAddr! = 0)
RemotePort =(UINT32)Marshal.ReadIntPtr(电流);
RemotePort = convert_Port(RemotePort);
电流=(IntPtr的)((int)的电流4);
0; / /存储在结构远程端点
/ /转换十进制的端口(即convert_Port())
60; TcpExCon​​nexions.table [I]。远程=新IPEndPoint( &#160
RemoteAddr,(INT)RemotePort);
/ /存放进程ID
TcpExCon​​nexions.table [I]。dwProcessId和=
(INT)Marshal.ReadIntPtr(电流);
/ /存储和获得进程的名称,在结构
TcpExCon​​nexions.table [I]。ProcessName =
this.get_process_name(TcpExCon​​nexions.table [我] dwProcessId和);
电流=(IntPtr的)((int)的电流4);
Marshal.FreeHGlobal(lpTable);&#
/ /重新初始化指针
电流= IntPtr.Z&
因此,我们再次呼吁正确的缓冲区大小的功能,然后我们将分配的内存的起始地址开始的内存中的"导航"。头奖4个字节的条目数,然后我们进入的每一行的循环连接表中的起始地址4开始,在第一循环中,我们将有相同的机制:,让每个值下令状MIB_TCPROW_EX,遍历每个值4的指针,做的行数尽可能多的时间。就这样,我们有所有的连接和的过程中的ID连接到它,我一个数助手功能的,例如,获得给予的进程ID的进程名称,但他们非常简单的和不言自明的。记住这些功能仅在WinXP下。如何利用图书馆我写了一个小的应用程序测试的lib,它只是显示库中的所有功能,在ListView的结果。这里的lib的方法:GetTcpStats()填补MIB_TCPSTATS结构GetUdpStats()填补MIB_UDPSTATS结构GetTcpConnexions()填补MIB_TCPTABLE结构GetUdpConnexions()填补MIB_UDPTABLE结构GetExTcpConnexions()填补MIB_EXTCPTABLE结构GetExUdpConnexions()填补MIB_EXUDPTABLE结构就是这样,希望这将是有益的。
关于作者:
中国我是一名编程爱好者,谢谢为我们提供一个学习和分享的平台。有什么问题。可以就本内容回复,我看到时。会尽量回复的。
评论会员:
时间:我要限制每个连接使用互联网。我油门一个连接代码[丝毫的帮助]],但我的问题是如何截获的连接和限制使用的带宽在每个连接蜜蜂发现。
任何想法?感谢评论会员:
时间:!过时评论会员:
时间:然后,你为什么不下载和更新,而不是无谓评论评论会员:
时间:对不起,但文章首次发表于日05BEA407F8F0DFDB7A0F1E77F473EE0F 评论会员:
时间:设计的平台上养。不支持拉从64位系统过程的信息或者甚至一些旧的32位系统的评论会员:
时间:你能更新这个项目,所以其与VisualStudio 2008兼容
((MIB_TCPROW)(TcpConnexion.table [I]))StrgState = convert_state(ST); / /通过ID 状态((MIB_TCPROW)(TcpConnexion.table [I]))iState = ST
((MIB_TCPROW)(TcpConnexion.table [I]))本地=新IPEndPoint(IPAddress.Parse(LocalAdrr)的LocalPort);
((MIB_TCPROW)(TcpConnexion.table [I]))远程=新IPEndPoint(IPAddress.Parse(RemoteAdrr),RemotePort);
((MIB_UDPROW)(UdpConnexion.table [I]))本地=新IPEndPoint(IPAddress.Parse(LocalAdrr)的LocalPort);
(MIB_TCPROW)=错误无法修改取消装箱转换结果评论会员:
时间:删除结束了对我来说解决所有的强制转换。所以
((MIB_TCPROW)(TcpConnexion.table[i])) 成为
TcpConnexion.table[i]
像一个冠军编译后我没评论会员:
时间: LAN到LAN 我有2个程序同时发送程序使用UDP技术和局域网连接上收到program.This两个方案的工作非常好,就是发送者和接收者在同一connection.On LAN设置,我用11000端口和IP是一个固定的IP。{ BR}
兰到外面的世界但是当我尝试互联网与局域网设置相同的端口,发送者是在私人网络(LAN)和我尝试传送讯息到接收器(外界)接收机使用动态IP地址(路由器后面),似乎目标 PC无法收到的UDP发送的任何消息。
我敢肯定,有没有防火墙blocking.i已经尝试过的Winsock仍然cannot.i是不允许做的NAT,也不允许做DYNDNS。任何有更好的解决方案,请大家帮我我这个问题,工作6个月
我使用vb.net 2003 评论会员:
时间:嗨,
这的确是一个精彩的文章。谢谢了一堆。我只是想知道如何获得远程机器上的这个信息。我的意思是,给定一个IP地址,它需要获得远程系统的TCP和UDP表。是否有这样做的方式吗? 请提出宝贵的意见。
,KVRN基兰库马尔评论会员:
时间:?人有思想如何获得这个DLL进程的路径
(我可以)这个DLL:远程端口远程地址本地端口本地地址进程ID 进程名称---如何进程的路径??...我的目的是获得该进程的CRC,我需要它的路径..
请帮助..但我真的appriciate这个DLL TNX很多评论会员:
时间: 公共静态无效GetTcpConnections(){IPGlobalProperties属性= IPGlobalProperties.GetIPGlobalProperties()TcpConnectionInformation []连接= properties.GetActiveTcpConnections()
的foreach(TcpConnectionInformation在连接吨)Console.WriteLine("{0,20} \ {1,20} \ T {2}"t.LocalEndPoint.ToString()t.RemoteEndPoint.ToString()t.State )} }
评论会员:
时间:虽然这是​​一个简单得多,也比使用iphlpapi.dll有没有办法反正检索的过程,并与该连接相关联的PID - AFAIK。如果那不是的话,请赐教,功能全面管理和尽可能OFC简单,就是我^ ^ 评论会员:
时间: {A} 评论会员:
时间:两个这些后续消息谈论可能的内存泄漏。这里的最终解决,结合这两个问题。
公共无效GetExTcpConnections(){
/ / MIB_EXTCPROW大小的结构= 6 * DWORD
INT rowsize = 24;
BUFFERSIZE = 100000;
/ /分配一个愚蠢的内存空间,以便检索联接 NB**现在删除这一行...
IntPtr的lpTable = Marshal.AllocHGlobal(BUFFERSIZE)**替换...
IntPtr的lpTable = IntPtr.Z
**这三行...
lpTable = IntPtr.Z
/ /释放分配的内存空间
; Marshal.FreeHGlobal(lpTable);**变动这个...
#160;/ /释放分配的内存空间
Marshal.FreeHGlobal(lpTable);
lpTable = IntPtr.Z }
全部完成。没有更多的内存泄漏,并且代码仍正常工作。
感谢这个伟大的代码示例。这是来真的很方便。 评论会员:
时间: 哦!先生。你是greate男人。昨天,我很伤心和灰色,但今天,我太高兴了。它幸运地找到你的话,哈哈,感谢您,主席先生,有一个愉快的一天。 评论会员:
时间:?嗨,你如何填补PID列
我尝试出口PID列Vb.Net代码。
谢谢。 评论会员:
时间:您好,
我比较从你的代码(即从TCP表)获得连接,并发现它不开每个连接返回。我用Ethereal检查,显然有一些港口的"对话"在抓包这是TCP表中列出。{BR​​}
这一次发生在少数连接。
的TCP表实际上是如何工作?
谢谢! 评论会员:
时间:您好,你知不知道一些简单的使用和理解UDP类。我只是想发挥我的应用​​程序使用UDP。最好的评论会员:
时间: AllocateAndGetTcpExTableFromStack在最后一个参数是地址族。如果通过AF_INET6(23),而不是AF_INET(2),在Win2k3和WinXP盒,你应该看到你的机器上建立IPv6连接设置,
在这种情况下,第一个参数是一个指向一个MIB_TCP6TABLE_OWNER_PID结构的指针的定义为:
typedef结构{
DWORD dwNumE
MIB_TCP6ROW_OWNER_PID表[ANY_SIZE] } MIB_TCP6TABLE_OWNER_PID,* PMIB_TCP6TABLE_OWNER_PID
而MIB_TCP6ROW_OWNER_PID定义为:
typedef结构{
UCHAR ucLocalAddr [16]
DWORD dwLocalScopeId; &#160
DWORD dwLocalP
UCHAR ucRemoteAddr [16]
DWORD dwRemoteScopeId;
DWORD dwRemoteP
DWORD dwOwningP } MIB_TCP6ROW_OWNER_PID,* PMIB_TCP6ROW_OWNER_PID
谢谢你,纳拉扬&#160
;评论会员:
时间:嗨,你知道怎么implemente按钮:杀死连接使用此API函数"SetTcpEntry"?
评论会员:
时间: GetExTcpConnections例如()中的最后两个线应切换,以避免内存泄漏:
公共无效GetExTcpConnections(){
/ / MIB_EXTCPROW大小的结构= 6 * DWORD
INT rowsize = 24;
BUFFERSIZE = 100000;
/ /分配一个愚蠢的内存空间,以便检索联接 NB
IntPtr的lpTable = Marshal.AllocHGlobal(BUFFERSIZE)
/ /获取信息相关
INT RES = IPHlpAPI32Wrapper.AllocateAndGetTcpExTableFromStack(
文献lpTable,真实,IPHlpAPI32Wrapper.GetProcessHeap(),0,2);
(res! = NO_ERROR)
Debug.WriteLine(
"Erreur:"IPHlpAPI32Wrapper.GetAPIErrorMessageDescription(RES)
返回; / /错误。你应该处理
INT CurrentIndex = 0;
/ /获取表中的条目数量
INT NumEntries =(INT)Marshal.ReadIntPtr(lpTable);
/ /释放分配的内存空间 &#1
Marshal.FreeHGlobal(lpTable);
60; lpTable = IntPtr.Z
//...........{ BR}} 评论会员:
时间:您好
如何添加路由与SetIpForwardEntry功能编程?是什么PMIB_IPFORWARDROW的包装?
命名SetIfEntry的功能和PMIB_IFROW结构也一样吗?
感谢 评论会员:
我目前正在同样的事情(编程读/添加/删除Windows路由表信息/)
这一点我是能够获得的数据,但我不能写/删除从路由表中的数据(我总是得到错误代码87 ---参数不正确)。
下面你可以找到我wrapers MIB_IPFORWARDROW和其他(备注"PMIB_IPFORWARDROW""MIB_IPFORWARDROW"仅仅是一个参考,从而等于"文献MIB_IPFORWARDROW")
我认为我所使用的结构确定,因此,我能够在oreder使用他们阅读路由表。的
[StructLayout(LayoutKind.Explicit)] 公共类MIB_IPFORWARDROW {[FieldOffset(0)]公共UINT dwForwardD [FieldOffset(4)]公共UINT dwForwardM [FieldOffset(8)]公共UINT dwForwardP [FieldOffset(12)]公共UINT dwForwardNextH [FieldOffset(16)]公共UINT dwForwardIfI [FieldOffset(20)]公共UINT dwForwardT [FieldOffset(24)]公共UINT dwForwardP [FieldOffset(28)]公共UINT dwForwardA [FieldOffset(32)]公共UINT dwForwardNextHopAS; [FieldOffset(36)]公共UINT dwForwardMetric1; [FieldOffset(40)]公共UINT dwForwardMetric2; [FieldOffset(44)]公共UINT dwForwardMetric3; [FieldOffset(48)]公共UINT dwForwardMetric4; [FieldOffset(52)]公共UINT dwForwardMetric5; }
[StructLayout(LayoutKind.Sequential)] 公共结构MIB_IPFORWARDTABLE {公共INT dwNumE 公共MIB_IPFORWARDROW []表; }
在这个问题上的任何帮助将是非常欢迎我。
最好的问候,铎
&桌面&网页开发&移动开发&数据库&多媒体&编程语言&平台,框架和库&编程通用&图形/设计&开发周期&一般阅读&第三方产品&作者资源&其他
快速解答标签
价值作最多如何以第三方的身份关闭TCP 和 UDP 网络连接?
如何以第三方的身份关闭TCP 和 UDP 网络连接?
发布时间: 5:22:22
编辑:www.fx114.net
本篇文章主要介绍了"如何以第三方的身份关闭TCP 和 UDP 网络连接?
80wang]",主要涉及到如何以第三方的身份关闭TCP 和 UDP 网络连接?
80wang]方面的内容,对于如何以第三方的身份关闭TCP 和 UDP 网络连接?
80wang]感兴趣的同学可以参考一下。
本帖最后由 oyljerry 于
22:02:53 编辑
本人想做一个本地网络连接监视软件,察看本地主机建立的所有网络连接并可以关闭指定网络连接项。
我现在&用&AllocateAndGetTcpTablefromstack&函数获取到了网络连接列表,但是不知道&如何关闭网络连接。
哪位高手知道如何关闭,跪求.友情帮顶,关注此贴。引用&1&楼&wjb_yd&的回复:友情帮顶,关注此贴。
谢谢关注!!!!
牛人都干毛去了??期待中............如何关闭网络连接??&有没有函数&或者&方法.希望大牛们指点迷津..............
自己顶一下!!!!!!!!!ShutDown(m_socket,2);
Close(m_socket);
这样可以不?关闭某个连接套接字你以第三方的身份通知一方关闭不就行了吗引用&4&楼&YI_RIVER_LOVE&的回复:ShutDown(m_socket,2);
Close(m_socket);
这样可以不?关闭某个连接套接字
谢谢提示!!!!!!!
但是我要如何获取这个socket句柄呢??&我也尝试过检索主机中的所有句柄,用ntquerysysteminformation获取所有句柄,看他们是不是socket类型&,如果是,把他们映射到自己的进程中,转化成socket句柄,用getsocketname&getpeername两个函数去获取网络连接信息,然后应该可以用shutdown&函数去关闭。
&但是这种方法有一个问题是:有一些权限高的句柄根本获取不到,比如说PID为4的和0的。。。。
大侠有没有高见??
期待回复,如果分少,我再加!!!&引用&5&楼&grf9527&的回复:你以第三方的身份通知一方关闭不就行了吗
谢谢回复!!
小弟没弄懂,如何发消息通知呢?&引用&6&楼&wang&的回复:引用&4&楼&YI_RIVER_LOVE&的回复:
ShutDown(m_socket,2);
Close(m_socket);
这样可以不?关闭某个连接套接字
谢谢提示!!!!!!!
但是我要如何获取这个socket句柄呢??&我也尝试过检索主机中的所有句柄,用ntquerysysteminformation获取所有句柄,看他们是不是socket类型&,如果是,把他们映射到自己的进……
自己顶,不得到满意答案不罢休................netstat&-b&会展示出所有连接对应的进程PID
看哪个不爽taskkill掉就可以了如果编码可以用System("DOS命令")
netstat&和&taskkill都属于DOS命令引用&10&楼&tiger9991&的回复:如果编码可以用System("DOS命令")
netstat&和&taskkill都属于DOS命令
谢谢大牛指点!!!!谢谢!!!!!
这个CMD命令确实能获取到网络连接....但是好像获取的不全,跟我用gettcptable作的原形比的,,
还有CMD命令获取数据似乎会很慢,我用管道读取过CMD命令,自己编着用可以,但是要产品化有点歉火候。。。。
大牛还有没有好的方法???因为这问题进度差了好多,有点急!!!!
如果能解决,我在加分!!!!再高端的就是WMI编程了,WMI的话是把电脑所有的硬件信息和软件信息存储在一个定制的数据库中,可以用SQL语句查询的。这个数据库已经默认的在你的操作系统中了。
MSDN里面有对WMI编程有很好的解释。直接关闭socket所在的进程不行吗?好像现在的杀毒软件都是这么做的。好像没有这样的函数!
通信套接字信息都在别进程的地址空间,怎么又能关闭呢
第三方消息通知倒是可以,不过需要其它的进程都能接受这样的消息并处理之。re&zhouzhipen:
引用&13&楼&zhouzhipen&的回复:直接关闭socket所在的进程不行吗?好像现在的杀毒软件都是这么做的。
谢谢帮助!!!!
我也想过关闭进程,但是如果这个进程开启了很多连接,那岂不是关闭进程后所用这些连接都会被关掉??&
如果进程涉及到其他系统功能,那岂不其他功能也会被关闭?
这个方法我的问问上级......引用&14&楼&shine159111&的回复:好像没有这样的函数!
通信套接字信息都在别进程的地址空间,怎么又能关闭呢
第三方消息通知倒是可以,不过需要其它的进程都能接受这样的消息并处理之。
re&shine159111:
谢谢提示!!我找到了一个函数。。。settcpentry这个函数可以关闭Tcp连接,但是对应的关闭Udp连接的函数没有找到:setudpentry,又没有可以关闭Udp连接的函数???引用&12&楼&tiger9991&的回复:再高端的就是WMI编程了,WMI的话是把电脑所有的硬件信息和软件信息存储在一个定制的数据库中,可以用SQL语句查询的。这个数据库已经默认的在你的操作系统中了。
MSDN里面有对WMI编程有很好的解释。
re:tiger9991&
wmi吗。我试试,,没怎么用过这个东西,谢谢大牛!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!
二、互相尊重,对自己的言论和行为负责。
本文标题:
本页链接:

我要回帖

更多关于 努比亚z17s对比三星s8 的文章

 

随机推荐