【问题标题】:Listening to specific port in C# sockets监听 C# 套接字中的特定端口
【发布时间】:2013-09-10 08:17:22
【问题描述】:

我在监听指定端口时遇到问题。我有以下代码:

Socket = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.Unspecified);
Socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, 1);
Socket.Bind(new IPEndPoint(localAddr, 80));

Socket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.HeaderIncluded, true);
Socket.IOControl(IOControlCode.ReceiveAll, BitConverter.GetBytes(1), BitConverter.GetBytes(0));

Socket.BeginReceive(Buffer, 0, Buffer.Length, SocketFlags.None, new AsyncCallback(ReadCallback), null);

一切似乎都运行良好,我捕获了传入和传出的数据包,我拥有我需要的所有信息,只有一个例外 - 它侦听所有端口,而不仅仅是我在 Bind() 方法中指定的 80 个端口。有谁知道如何在端口 80 上读取这些内容?

【问题讨论】:

  • 是什么让你认为它监听所有端口?
  • 可能是因为浏览器正在使用该端口 80 进行 HTTP
  • Pavel K 我知道是因为我从使用完全不同于 80 端口的应用程序接收数据包,并且它们在 BeginReceive() 中都是“可见的”。
  • 有人吗?我不想通过检查它们要到达的端口来过滤所有数据包,并只用 80 显示这些......

标签: c# .net sockets port


【解决方案1】:

我拥有我需要的所有信息,只有一个例外 - 它侦听所有端口,而不仅仅是我在 Bind() 方法中指定的 80

没有任何例外。从您发布的代码来看,它不可能从端口 80 以外的任何端口读取。

【讨论】:

  • 好吧,当我从数据包中解析数据时,我收到如下信息: 源地址:10.132.0.0 目标地址:10.132.186.191 协议类型:UDP 分段:False 源端口:137 目标端口: 137 Acknlg number: 0 ASCII 数据片段:它似乎也从其他端口获取数据,我可以跟踪来自不同应用程序的数据包,这些应用程序使用一些甚至没有与 HTTP 远程连接的奇异端口...
【解决方案2】:

阅读 Microsoft 的文档 (http://msdn.microsoft.com/en-us/library/windows/desktop/ee309610(v=vs.85).aspx) 告诉我们这一行

Socket.IOControl(IOControlCode.ReceiveAll, BitConverter.GetBytes(1), BitConverter.GetBytes(0));

网络接口控制器将捕获所有局域网上的 IPv4 或 IPv6 流量。我不知道如何通过配置将其限制在某个端口,所以我认为您必须自己过滤数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-26
    • 1970-01-01
    • 2015-11-28
    • 2018-03-18
    • 2011-11-06
    • 2011-09-14
    • 1970-01-01
    • 2012-05-17
    相关资源
    最近更新 更多