以一种访问权限不允许的方式做了一个访问套接字的尝试。

zsmj1994 2016-04-14 09:39:17
Socket socket = new Socket(AddressFamily.InterNetworkV6, SocketType.Raw, ProtocolType.Icmp);
这行代码出错 不知为什么 用管理员运行就正常 这是啥原因啊 为啥会权限不足呢
...全文
998 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2016-07-31
  • 打赏
  • 举报
回复
楼主可解决了?我也遇到了
zsmj1994 2016-04-15
  • 打赏
  • 举报
回复
引用 6 楼 tcmakebest 的回复:
找了一个正规的用法

static void displayReply() //显示结果
{
    Ping p1 = new Ping(); //只是演示,没有做错误处理

    PingReply reply = p1.Send("192.168.2.100");

    StringBuilder sbuilder;
    if (reply.Status == IPStatus.Success)
    {
        sbuilder = new StringBuilder();
        sbuilder.AppendLine(string.Format("Address: {0} ", reply.Address.ToString()));
        sbuilder.AppendLine(string.Format("RoundTrip time: {0} ", reply.RoundtripTime));
        sbuilder.AppendLine(string.Format("Time to live: {0} ", reply.Options.Ttl));
        sbuilder.AppendLine(string.Format("Don't fragment: {0} ", reply.Options.DontFragment));
        sbuilder.AppendLine(string.Format("Buffer size: {0} ", reply.Buffer.Length));
        Console.Out.WriteLine(sbuilder.ToString());
    }
    else if (reply.Status == IPStatus.TimedOut)
    {
        Console.Out.WriteLine("超时");
    }
    else
    {
        Console.Out.WriteLine("失败");
    }
}
这是调用ping类的 但是要求用Socket实现
zsmj1994 2016-04-14
  • 打赏
  • 举报
回复
引用 3 楼 tcmakebest 的回复:
正常情况下,只要用到TCP和UDP就够了,楼主这是原始套接字,想干嘛呢
用socket实现ping
RubenLuLu 2016-04-14
  • 打赏
  • 举报
回复
我提出的3种思路 1:找到提升权限的办法。 2:设置应用程序为管理员身份运行。 3:执行异常时提示需要管理员权限运行。
tcmakebest 2016-04-14
  • 打赏
  • 举报
回复
找了一个正规的用法

static void displayReply() //显示结果
{
    Ping p1 = new Ping(); //只是演示,没有做错误处理

    PingReply reply = p1.Send("192.168.2.100");

    StringBuilder sbuilder;
    if (reply.Status == IPStatus.Success)
    {
        sbuilder = new StringBuilder();
        sbuilder.AppendLine(string.Format("Address: {0} ", reply.Address.ToString()));
        sbuilder.AppendLine(string.Format("RoundTrip time: {0} ", reply.RoundtripTime));
        sbuilder.AppendLine(string.Format("Time to live: {0} ", reply.Options.Ttl));
        sbuilder.AppendLine(string.Format("Don't fragment: {0} ", reply.Options.DontFragment));
        sbuilder.AppendLine(string.Format("Buffer size: {0} ", reply.Buffer.Length));
        Console.Out.WriteLine(sbuilder.ToString());
    }
    else if (reply.Status == IPStatus.TimedOut)
    {
        Console.Out.WriteLine("超时");
    }
    else
    {
        Console.Out.WriteLine("失败");
    }
}
tcmakebest 2016-04-14
  • 打赏
  • 举报
回复
正常情况下,只要用到TCP和UDP就够了,楼主这是原始套接字,想干嘛呢
zsmj1994 2016-04-14
  • 打赏
  • 举报
回复
引用 1 楼 guwei4037 的回复:
这是操作系统做了安全性的限制。你可以将你的程序拷贝到除C盘以外的盘里执行。
就是在c盘以外执行的 我的系统是win10 在我的电脑上能调试成功的到了学校机房就不行
全栈极简 2016-04-14
  • 打赏
  • 举报
回复
这是操作系统做了安全性的限制。你可以将你的程序拷贝到除C盘以外的盘里执行。

110,535

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧