C#查找套接字ID?

C#查找套接字ID?,c#,winforms,sockets,tcp,C#,Winforms,Sockets,Tcp,最近,我开始开发一个程序,该程序将监视我的一个开源程序的数据包,试图了解更多关于编程和网络的知识。此外,我想在不编辑源代码的情况下向程序添加附加功能,如外部控制面板 (我用WPE Pro过滤数据包,以防你想知道,WireShark对于这么简单的任务来说太麻烦了。)但有一件事困扰着我,套接字ID 我知道它是什么,我以前也问过一个问题,但我不知道如何使用它/分配一个/拦截一个 如果没有正确的套接字ID,我的程序将无法执行任何操作,因此我的问题是,一旦捕获数据包,是否有可能找到套接字使用的套接字ID

最近,我开始开发一个程序,该程序将监视我的一个开源程序的数据包,试图了解更多关于编程和网络的知识。此外,我想在不编辑源代码的情况下向程序添加附加功能,如外部控制面板

(我用WPE Pro过滤数据包,以防你想知道,WireShark对于这么简单的任务来说太麻烦了。)但有一件事困扰着我,套接字ID

我知道它是什么,我以前也问过一个问题,但我不知道如何使用它/分配一个/拦截一个

如果没有正确的套接字ID,我的程序将无法执行任何操作,因此我的问题是,一旦捕获数据包,是否有可能找到套接字使用的套接字ID

如果没有,还有其他方法吗-或者其他可能的语言,比如visualbasic


谢谢您的时间。

如果您所说的套接字ID是指成功调用
socket()
函数的返回值,我想没有办法

您可以获得的最接近的东西是进程ID,因为您可能已经知道,每个IP数据包都有一个由元组(IP地址、端口)描述的目的地,并且在系统中,只有一个套接字可以成功绑定到该元组。像TCPView这样的实用程序能够将一个IP元组映射到一个进程,所以如果这些信息对您来说足够的话,确实存在一种方法

如果不是这种情况,我不知道如果目标应用程序不是协作的,那么有什么方法可以检索所需的套接字ID。

socket()
返回一个文件描述符如果这是您所指的套接字ID,那么在windows上无需进程协作即可获取该ID的方法是有限的。linux open FD上的FWIW在proc文件系统中枚举

也就是说,使用fd唯一能做的就是从套接字发送附加信息。您也可以从fd中读取数据,但以这种方式读取的任何数据都不会发送到拥有套接字的应用程序。如果没有一些协调,这可能不是你想要的,因为你只会得到一些零碎的数据

如果只想在程序中侦听到流量,那么像包过滤之类的东西应该足够了,所以我假设你真的希望能够像中间人一样。 如果是这种情况,那么最好的办法就是将应用程序设置为其他服务的代理

我的意思是,编写一个程序,打开一个侦听端口并接受连接。当连接启动时,它应该立即打开自己与预先配置的IP:端口组合的连接,并开始转发流量。一旦写下这篇文章,在转发之前检查流量并可能修改流量就很简单了

如果您的程序是服务器,请在非标准端口上运行它,将此应用程序配置为打开服务器的正常端口,然后将连接转发到您在本地主机上设置的非标准端口

如果您的程序是客户机,只需将拦截器应用程序指向服务器,然后在您的机器上选择一个随机侦听端口。然后将客户端配置为连接到此侦听端口,就像它是服务器一样

这几乎适用于任何事情。唯一需要注意的是,如果流量被加密,您(显然)将无法检查/修改它。这实际上与将应用程序置于NAT之后是一样的。

此库:承诺使用任何.NET语言(如C#和VB.NET())捕获、注入、分析和构建数据包


这是所使用的库,它肯定可以捕获和分析。

答案的副本有误,SharpPcap无法获取套接字ID。如果我错了,请以答案的形式更正我,因为这是我要找的。首先,感谢您的回复。当使用WPE Pro过滤数据包时,每个数据包都有相同的“套接字id”来唯一标识连接。所以,如果我理解正确,这个套接字id有可能等于程序的进程id,即使它可以随时间而改变?我希望程序的源代码能帮助我,但是我找不到任何与创建套接字连接远程相关的东西。我看了一下WPE Pro,它似乎(也)使用了DLL注入。它没有从数据包中获取套接字ID。那是一个完全不同的故事…我明白了。。不过我确实发现了一个有趣的函数:WSADuplicateSocket(),但我在任何地方都找不到一个合适的例子。正如我在回答中所写的,使用
WSADuplicateSocket()
要求目标应用程序是协作的。我不知道这是您的情况,还是目标应用程序不知道您的程序。事实上,在你的程序和目标应用程序之间需要一个IPC通道,而目标应用程序显然需要处理这个IPC。这正是问题所在,让服务器协同工作的唯一方法是获得正确的套接字ID。但我认为你的第一条评论很中肯,我应该把我的程序挂到DDL上。我想这回答了我的问题,我会把它标记为答案,谢谢。是的,克里斯蒂安就是这么说的。我很感激你的帮助,但不幸的是SharpCap没有这样的选择。