C# 中的 TraceRoute 和 Ping

2023-12-03

有人有 C# 代码可以方便地对目标计算机执行 ping 和跟踪路由吗?我正在寻找一个纯代码解决方案,而不是我现在正在做的事情,即调用 ping.exe 和tracert.exe 程序并解析输出。我想要更坚固的东西。


鉴于我今天必须编写一个 TraceRoute 类,我想我不妨分享一下源代码。

using System.Collections.Generic;
using System.Net.NetworkInformation;
using System.Text;
using System.Net;

namespace Answer
{  
  public class TraceRoute
  {
    private const string Data = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";

    public static IEnumerable<IPAddress> GetTraceRoute(string hostNameOrAddress)
    {
      return GetTraceRoute(hostNameOrAddress, 1);
    }
    private static IEnumerable<IPAddress> GetTraceRoute(string hostNameOrAddress, int ttl)
    {
      Ping pinger = new Ping();
      PingOptions pingerOptions = new PingOptions(ttl, true);
      int timeout = 10000;
      byte[] buffer = Encoding.ASCII.GetBytes(Data);
      PingReply reply = default(PingReply);

      reply = pinger.Send(hostNameOrAddress, timeout, buffer, pingerOptions);

      List<IPAddress> result = new List<IPAddress>();
      if (reply.Status == IPStatus.Success)
      {
        result.Add(reply.Address);
      }
      else if (reply.Status == IPStatus.TtlExpired || reply.Status == IPStatus.TimedOut)
      {
        //add the currently returned address if an address was found with this TTL
        if (reply.Status == IPStatus.TtlExpired) result.Add(reply.Address);
        //recurse to get the next address...
        IEnumerable<IPAddress> tempResult = default(IEnumerable<IPAddress>);
        tempResult = GetTraceRoute(hostNameOrAddress, ttl + 1);
        result.AddRange(tempResult);
      }
      else
      {
        //failure 
      }

      return result;
    }
  }
}

以及 VB 版本,供任何想要/需要它的人使用

Public Class TraceRoute
    Private Const Data As String = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"

    Public Shared Function GetTraceRoute(ByVal hostNameOrAddress As String) As IEnumerable(Of IPAddress)
        Return GetTraceRoute(hostNameOrAddress, 1)
    End Function
    Private Shared Function GetTraceRoute(ByVal hostNameOrAddress As String, ByVal ttl As Integer) As IEnumerable(Of IPAddress)
        Dim pinger As Ping = New Ping
        Dim pingerOptions As PingOptions = New PingOptions(ttl, True)
        Dim timeout As Integer = 10000
        Dim buffer() As Byte = Encoding.ASCII.GetBytes(Data)
        Dim reply As PingReply

        reply = pinger.Send(hostNameOrAddress, timeout, buffer, pingerOptions)

        Dim result As List(Of IPAddress) = New List(Of IPAddress)
        If reply.Status = IPStatus.Success Then
            result.Add(reply.Address)
        ElseIf reply.Status = IPStatus.TtlExpired Then
            'add the currently returned address
            result.Add(reply.Address)
            'recurse to get the next address...
            Dim tempResult As IEnumerable(Of IPAddress)
            tempResult = GetTraceRoute(hostNameOrAddress, ttl + 1)
            result.AddRange(tempResult)
        Else
            'failure 
        End If

        Return result
    End Function
End Class
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# 中的 TraceRoute 和 Ping 的相关文章

  • 查找c中结构元素的偏移量

    struct a struct b int i float j x struct c int k float l y z 谁能解释一下如何找到偏移量int k这样我们就可以找到地址int i Use offsetof 找到从开始处的偏移量z
  • .NET 中是否有内置函数可以对密码进行哈希处理?

    我看到这个问题加密 散列数据库中的纯文本密码 https stackoverflow com questions 287517 encrypting hashing plain text passwords in database 我知道我
  • Asp.NET WebApi 中类似文件名称的路由

    是否可以在 ASP NET Web API 路由配置中添加一条路由 以允许处理看起来有点像文件名的 URL 我尝试添加以下条目WebApiConfig Register 但这不起作用 使用 URIapi foo 0de7ebfa 3a55
  • 为什么当实例化新的游戏对象时,它没有向它们添加标签? [复制]

    这个问题在这里已经有答案了 using System Collections using System Collections Generic using UnityEngine public class Test MonoBehaviou
  • 如何使用 ICU 解析汉字数字字符?

    我正在编写一个使用 ICU 来解析由汉字数字字符组成的 Unicode 字符串的函数 并希望返回该字符串的整数值 五 gt 5 三十一 gt 31 五千九百七十二 gt 5972 我将区域设置设置为 Locale getJapan 并使用
  • 不同枚举类型的范围和可转换性

    在什么条件下可以从一种枚举类型转换为另一种枚举类型 让我们考虑以下代码 include
  • 将 VSIX 功能添加到 C# 类库

    我有一个现有的单文件生成器 位于 C 类库中 如何将 VSIX 项目级功能添加到此项目 最终目标是编译我的类库项目并获得 VSIX 我实际上是在回答我自己的问题 这与Visual Studio 2017 中的单文件生成器更改 https s
  • C#中如何移动PictureBox?

    我已经使用此代码来移动图片框pictureBox MouseMove event pictureBox Location new System Drawing Point e Location 但是当我尝试执行时 图片框闪烁并且无法识别确切
  • C++ OpenSSL 导出私钥

    到目前为止 我成功地使用了 SSL 但遇到了令人困惑的障碍 我生成了 RSA 密钥对 之前使用 PEM write bio RSAPrivateKey 来导出它们 然而 手册页声称该格式已经过时 实际上它看起来与通常的 PEM 格式不同 相
  • 重载<<的返回值

    include
  • WCF 中 SOAP 消息的数字签名

    我在 4 0 中有一个 WCF 服务 我需要向 SOAP 响应添加数字签名 我不太确定实际上应该如何完成 我相信响应应该类似于下面的链接中显示的内容 https spaces internet2 edu display ISWG Signe
  • 如何在整个 ASP .NET MVC 应用程序中需要授权

    我创建的应用程序中 除了启用登录的操作之外的每个操作都应该超出未登录用户的限制 我应该添加 Authorize 每个班级标题前的注释 像这儿 namespace WebApplication2 Controllers Authorize p
  • 如何在 C 中调用采用匿名结构的函数?

    如何在 C 中调用采用匿名结构的函数 比如这个函数 void func struct int x p printf i n p x 当提供原型的函数声明在范围内时 调用该函数的参数必须具有与原型中声明的类型兼容的类型 其中 兼容 具有标准定
  • 这些作业之间是否存在顺序点?

    以下代码中的两个赋值之间是否存在序列点 f f x 1 1 x 2 不 没有 在这种情况下 标准确实是含糊不清的 如果你想确认这一点 gcc 有这个非常酷的选项 Wsequence point在这种情况下 它会警告您该操作可能未定义
  • 使用 x509 证书签署 json 文档或字符串

    如何使用 x509 证书签署 json 文档或字符串 public static void fund string filePath C Users VIKAS Desktop Data xml Read the file XmlDocum
  • WPF/C# 将自定义对象列表数据绑定到列表框?

    我在将自定义对象列表的数据绑定到ListBox in WPF 这是自定义对象 public class FileItem public string Name get set public string Path get set 这是列表
  • 通过指向其基址的指针删除 POD 对象是否安全?

    事实上 我正在考虑那些微不足道的可破坏物体 而不仅仅是POD http en wikipedia org wiki Plain old data structure 我不确定 POD 是否可以有基类 当我读到这个解释时is triviall
  • 如何将带有 IP 地址的连接字符串放入 web.config 文件中?

    我们当前在 web config 文件中使用以下连接字符串 add name DBConnectionString connectionString Data Source ourServer Initial Catalog ourDB P
  • 如何在Xamarin中删除ViewTreeObserver?

    假设我需要获取并设置视图的高度 在 Android 中 众所周知 只有在绘制视图之后才能获取视图高度 如果您使用 Java 有很多答案 最著名的方法之一如下 取自这个答案 https stackoverflow com a 24035591
  • C# 模拟VolumeMute按下

    我得到以下代码来模拟音量静音按键 DllImport coredll dll SetLastError true static extern void keybd event byte bVk byte bScan int dwFlags

随机推荐

  • Apple 文件系统从照片库读取的权限

    我的 ios 应用程序中有一个 UIWebView 它将响应式网站加载到我的 webview 中 在 asp net 中开发 网站有一个按钮用于从设备照片库中选择视频 另一个按钮用于上传视频 在 ios 版本 10 2 之前 它可以成功地将
  • 在帆和水线中混合使用 AND 和 OR 子句

    如何在 Sailsjs 及其 ORM Waterline 中使用 OR 和 AND 子句 例如我有一张书表 book name author free public Book A Author 1 false true Book B Aut
  • 错误标记主机:等待条件超时 [kubernetes]

    我刚刚开始学习 Kubernetes 我已经通过 Kubernetes YUM 存储库安装了 CentOS 7 5 并禁用了 SELinux 的 kubectl kubeadm 和 kubelet 然而 当我想开始一个kubeadm ini
  • 撇号 cms - 自定义小部件中富文本的内联编辑?

    在某些情况下 我无法将富文本的内联编辑保存回数据库 请耐心等待 这里将粘贴一些代码 因为这是我描述我正在做的事情的唯一方式 我的项目中有两种自定义小部件 一种只有一个小部件实例 通常在lib modules目录 article widget
  • 依赖注入类型选择

    最近我遇到一个问题 我必须根据参数选择类型 例如 用于发送通知的类 应根据输入参数选择正确的渠道 电子邮件 短信等 我看起来像这样 public class NotificationManager IEmail email ISms sms
  • Google URLShortener API 返回 ipRefererBlocked

    我正在尝试将 Google URL 缩短 API 与 PHP 结合使用 apiKey ABC url http www stackoverflow com postData array longUrl gt url jsonData jso
  • 正则表达式匹配除空格之外的单个字符

    我需要匹配一个不是空格的单个字符 但我不知道如何使用正则表达式来做到这一点 以下应该足够了 如果您想将其扩展到除空白之外的任何内容 换行符 制表符 空格 硬空格 s or S Note this is a CAPITAL S
  • 将数据从操作传递到另一个操作

    如何通过 RedirectAction 方法将模型从 GetDate 操作传递到另一个 ProcessP 操作 这是源代码 HttpPost public ActionResult GetDate FormCollection values
  • MobileNetV2 的 Keras 和 TensorFlow Hub 版本之间的差异

    我正在研究一种迁移学习方法 并且在使用 MobileNetV2 时得到了非常不同的结果keras applications以及 TensorFlow Hub 上提供的一个 这对我来说似乎很奇怪 因为两个版本都声称here and here从
  • PHP:如何使用数组索引访问数组元素值[重复]

    这个问题在这里已经有答案了 如何使用数组索引访问数组元素值 我不知道 动态 中有什么 所以我想动态访问 pageCount 值 数组值是您正在寻找的功能 例子
  • 改进多节点集群上的 h2o DRF 运行时

    我目前正在跑步h2o的 DRF 算法是一个 3 节点 EC2 集群 h2o 服务器跨越所有 3 个节点 我的数据集有 100 万行和 41 列 40 个预测变量和 1 个响应 我用R控制集群和 RF 调用的绑定如下 model h2o ra
  • PLS-00306:调用“OUTPUT_ARRAY”时参数的数量或类型错误

    我被这个错误困住了 真的不知道如何修复它 也许我以不正确的方式传递数组 这是主要的 sql 文件 DECLARE v array length NUMBER v array length BEGIN DECLARE TYPE number
  • 在 wpf 中绘图时对线条进行动画处理

    XAML
  • 通过依赖注入模拟 C++ 类

    假设你正在测试课程A它有一个依赖注入 of B其中有一个依赖注入C 所以你嘲笑B但它唯一的构造函数需要注入C 所以你必须嘲笑C以及注入模拟的C进入被嘲笑的地方B然后才将其注入A 如果有 5 个连续的依赖关系怎么办 有哪些替代方案 I use
  • 完美的角色无限旋转

    我正在尝试使用这个角色 代替加载旋转器 这是我到目前为止所得到的 spinner after animation rotating 2s linear infinite content font size 60px display inli
  • 将数字添加到子图

    我是 matplotlib 的新手 正在尝试了解如何将数字添加到子图中 我有三个不同的函数 它们输出一个数字 def plot fig 1 vars args f ax put subplots do something ax plot x
  • 在数组中查找模式的最有效方法?

    最近我尝试使用C来查找一组数字中的众数 当集合很小时 我的代码可以做得很好 这是我的代码 int frequency 10001 This array stores the frequency of a number that betwee
  • 使用灯具加载数据时是否会调用模型 save() 方法?

    我试图在模型为空时从另一个字段自动生成一个模型 这是代码 class Position RichText name models CharField max length 200 slug models SlugField null Tru
  • 格拉姆-施密特正交化

    给定一个具有独立列的矩阵 A 不一定是方阵 我能够应用 Gram Schmidt 迭代并使用 Matlab 函数为其列空间 以正交矩阵 Q 的形式 生成正交基qr A 1 1 1 0 1 2 Q R qr A and then gt gt
  • C# 中的 TraceRoute 和 Ping

    有人有 C 代码可以方便地对目标计算机执行 ping 和跟踪路由吗 我正在寻找一个纯代码解决方案 而不是我现在正在做的事情 即调用 ping exe 和tracert exe 程序并解析输出 我想要更坚固的东西 鉴于我今天必须编写一个 Tr