查找网络中开放的 TCP 端口

2023-11-25

我正在尝试构建一个网络应用程序。我已经成功制作了一个发送和接收包的服务器。到目前为止,测试已经在一台指向127.0.0.1(没有像家这样的地方)的计算机上完成。现在我想切换到网络。如何在 LAN 网络上找到正在侦听我的特定端口的计算机?


该服务需要监听广播消息在一个已知的端口上(如果你想表现得非常好,你可以向 IANA 注册程序和端口号),当它听到广播消息时,它会向发送者回复服务器的 IP 以及服务正在侦听传入连接的端口。

这是上面链接中的一个简单示例,这只是打印到控制台谁连接以及在什么端口上,但您可以使用此信息在两个端点之间建立 TCP 或 UDP 连接。

using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
class RecvBroadcst
{
  public static void Main()
  {
   Socket sock = new Socket(AddressFamily.InterNetwork,
           SocketType.Dgram, ProtocolType.Udp);
   IPEndPoint iep = new IPEndPoint(IPAddress.Any, 9050);
   sock.Bind(iep);
   EndPoint ep = (EndPoint)iep;
   Console.WriteLine("Ready to receive…");
   byte[] data = new byte[1024];
   int recv = sock.ReceiveFrom(data, ref ep);
   string stringData = Encoding.ASCII.GetString(data, 0, recv);
   Console.WriteLine("received: {0} from: {1}",
              stringData, ep.ToString());
   data = new byte[1024];
   recv = sock.ReceiveFrom(data, ref ep);
   stringData = Encoding.ASCII.GetString(data, 0, recv);
   Console.WriteLine("received: {0} from: {1}",
              stringData, ep.ToString());
   sock.Close();
  }
}

作为一个伪示例,这里是我将如何做到这一点的事件顺序。

对于这个例子,假设我们有一个 IP 为192.168.1.0和一个子网255.255.255.0。我们有两台服务器,Server1 at 192.168.1.2服务在端口上监听1234, and Server2 at 192.168.1.3有一个端口4567为了服务。两者均在港口上市3000用于广播消息。客户端连接将位于该IP192.168.1.4

  1. 客户端在其中选择一个随机端口动态端口范围(49152-65535) 并在 UDP(本例中为端口 50123)上绑定到它并侦听。
  2. 客户端广播到其本地子网的广播地址和已知端口(192.168.1.255:3000)使用与他正在侦听的相同端口进行发送。他发送某种有效负载,以便服务器仅发送回您的客户端,而不是发送回与您碰巧使用相同端口的其他人。 (假设它发送字符串Send me your info for XYZ app!)
  3. Server1 接收广播。检查消息是否是Send me your info for XYZ app!并发送UDP消息Name:Server1 IP:192.168.1.2 Port:1234返回发送者源端口和 IP 组合(192.168.1.4:50123)
  4. Server2 也收到广播。检查消息是否是Send me your info for XYZ app!并发送UDP消息Name:Server2 IP:192.168.1.3 Port:4567消息返回发送者源端口和IP组合(192.168.1.4:50123)
  5. 客户端在发送消息的同一端口上接收两个 UDP 消息。他解析回复并向用户显示可连接的两个服务器。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

查找网络中开放的 TCP 端口 的相关文章

随机推荐

  • 有没有办法以编程方式重新启动 azure 函数

    我有一个 Azure 函数每隔几分钟在计时器上运行一次 在运行不同时间后 由于外部 API 每次运行都会开始失败 并在 Azure 门户中手动单击重新启动按钮修复了问题和作业再次工作 有没有办法让 azure 函数自行重新启动 或者让某些东
  • MAMP 将 php.ini 保存在哪里?

    我最近买了一台 mac 但我根本不习惯在 mac 上开发 我有 MAMP Pro 1 9 6 1 我做了一个定位php ini并得到这个 locate php ini Applications MAMP conf php5 2 php in
  • 如何以 html 形式将多个值附加到单个参数?

    假设我有以下形式
  • 使用 dplyr 按组计算百分比计数

    带数据框df像下面这样 df lt data frame colors c red blue green red red blue 我可以使用 dplyr 找出每种颜色的计数 如下所示 df gt group by color gt sum
  • Flutter 设计 Instagram 像气球/工具提示小部件

    在颤振中我想将此布局设计为小部件 当前实现的代码具有以下结果 你能帮我解决这个设计上的一些问题吗 因为高度 重量和角应该是可定制的 我应该可以在其中放入一些小部件 例如 class MessageClipper extends Custom
  • Gson多态序列化

    使用 Gson 2 2 2 我试图序列化 POJO 行为 的数组列表 我有一个适配器 它几乎是我在网上看到的适配器的副本 public class BehaviorAdapter implements JsonSerializer
  • 如何在 Crystal Reports for Visual Studio 中实现数据透视报表?

    除了带有小计的水平线之外 我对任何报告都是菜鸟 我有一个数据集 其中包含汽车在停车场所花费的时间 我必须生成一个表格 其中每小时显示一列 每天显示一行 显示特定日期特定时间的条目数 我会发现在 RDLC 设计器中更容易做到这一点 因为它具有
  • 适用于 Docker 的 Google Cloud Logging 驱动程序

    我无法验证谷歌云驱动程序gcplogs对于 Docker 尽管我已经设置了环境变量GOOGLE APPLICATION CREDENTIALS到我的服务帐户的 JSON 凭据所在的路径 文件 错误信息如下 ERROR for oncrm o
  • 简单布局 vs. 标准布局 vs. POD [重复]

    这个问题在这里已经有答案了 通俗地说 普通类型 标准布局类型和 POD 之间有什么区别 具体来说 我想确定是否new T不同于new T 对于任何模板参数T 属于哪一类特征is trivial is standard layout and
  • 从预安装时运行的 npm 脚本中查找 package.json 文件

    所以我需要阅读package json在通过 npm 安装新包之前 为什么首先要读取 package json 我将 npm 用于单独版本控制并且可以具有相互依赖关系的 CSS 组件 没有提供 JavaScript 寻找一堆依赖项的版本冲突
  • Visual Studio 2013/2015 C++ 项目模板丢失

    我正在尝试为 Visual Studio 2013 专业 C 项目制作一些简单的项目模板 但 Visual Studio 似乎在与我作斗争 我开始使用File gt Export Template 向导 它完成并生成了一个 zip 文件 但
  • Perforce 和 SourceSafe 可以在 Visual Studio 中共存吗?

    更具体地说 是 Visual Studio 2008 我们正在测试迁移到 Perforce 进行源代码控制 因此我想安装 P4SCC 插件来进行测试 不过 我还想继续使用 SourceSafe 的 IDE 功能来处理尚未迁移的项目 两者能否
  • 使用 Nest Client 在 Elasticsearch 中加载完成字段

    我想使用 Nest 将完成建议字段填充到索引中 读完这篇文章后关于实现完成字段的 ElasticSearch 博客文章我发现你可以拥有以下属性 输入数组 单路输出 weight payload 我假设要将此数据加载到索引中 我需要在我的搜索
  • Concat 中的 Group_Concat 不适用于 NULL 值

    我有一张桌子 CREATE TABLE IF NOT EXISTS dept did int 11 NOT NULL dname varchar 50 DEFAULT NULL ENGINE InnoDB DEFAULT CHARSET l
  • 属性名称到 Lambda 表达式 C#

    如何将属性名称转换为 C 中的 Lambda 表达式 像这样 string prop Name to p gt p Name public class Person public string Name get set Thanks 使用表
  • Kohana 3.0.x ORM:读取数据透视表中的附加列

    我正在使用 Kohana v3 和 ORM 我有两个模型 Model A and Model B has many 通过数据透视表关联 该数据透视表有一个附加列 我可以使用第三个参数将数据保存在数据透视表的该列中add 函数 但我不知道如何
  • Java 空字符串的大小

    我听一位同事说 如果我在 Java 类中删除 String 成员 即使 String 为空 我也会支付 24 个字节 准确吗 整数 浮点数 双精度数相同吗 与 int float double 不同 它们分别只有 4 4 和 8 个字节 您
  • 不使用鼠标事件获取当前鼠标下的元素

    WRT 构建 Firefox 插件 是否可以通过某些 XPCOM 或 javascript 方法获取鼠标下的元素 请使用非 js ctypes 因为这需要操作系统的特殊性 I want to detect what is under the
  • 为什么Spring Context要加载两次?

    我有一个带有 Spring 和 Spring security 的 Web 项目 我的 web xml
  • 查找网络中开放的 TCP 端口

    我正在尝试构建一个网络应用程序 我已经成功制作了一个发送和接收包的服务器 到目前为止 测试已经在一台指向127 0 0 1 没有像家这样的地方 的计算机上完成 现在我想切换到网络 如何在 LAN 网络上找到正在侦听我的特定端口的计算机 该服