我需要编写一个程序来显示这些信息:
我已经有了其中的大部分,但是我在 route print 和 arp -a 方面遇到了问题。我不想使用 Process.Start() 执行此命令,因为它看起来不太壮观:
Process p = new Process ();
p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
p.StartInfo.UseShellExecute = false;
p.StartInfo.FileName = "route";
p.StartInfo.Arguments = "PRINT";
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.CreateNoWindow = true;
p.StartInfo.StandardOutputEncoding = Encoding.Default;
p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
p.Start();
TextBox1.Text = p.StandardOutput.ReadToEnd();
我想使用 foreach 循环将数据放入 ListView 或 DataGrid 列中。有没有人能帮助我?我怎样才能将这些数据放入每一列:目的地、网络掩码、网关、接口(interface)、指标和永久路由?对于 ARP, 物理地址的互联网地址类型?
最佳答案
非常感谢。我已经用 WMI CODER CREATOR 编写了指导和 IPv4routetable 以下代码:
private void button1_Click(object sender, EventArgs e)
{
try
{
ManagementObjectSearcher searcher = new ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM Win32_IP4RouteTable");
ListViewItem buf;
foreach (ManagementObject queryObj in searcher.Get())
{
string destination = queryObj["Destination"].ToString();
string mask = queryObj["Mask"].ToString();
string metric = queryObj["Metric1"].ToString();
string interfaceIndex = queryObj["InterfaceIndex"].ToString();
string nexthop = queryObj["NextHop"].ToString();
string protocol = queryObj["Protocol"].ToString();
string type = queryObj["Type"].ToString();
string status;
if (queryObj["Status"] != null)
{
status = queryObj["Status"].ToString();
}
else
{
status = string.Empty;
}
buf = new ListViewItem(new string[] { destination, mask, metric, interfaceIndex, nexthop, protocol, status, type });
list_route.Items.Add(buf);
}
}
catch (ManagementException ex)
{
MessageBox.Show("An error occurred while querying for WMI data: " + ex.Message);
}
}
只是不知道在哪个类上我找了关于arp-a的资料,在google上找不到。如果有人知道他在问答案。如果哪位有WMI Coder Creator等其他有用的辅助工具,不胜感激。
我找到了一些资料。关于 GetIpNetTable 但我不能在 GUI 应用程序中使用此函数,将结果传递给 ListView 。 :(
using System;
using System.Runtime.InteropServices;
using System.ComponentModel;
using System.Net;
namespace GetIpNetTable
{
class Program
{
// The max number of physical addresses.
const int MAXLEN_PHYSADDR = 8;
// Define the MIB_IPNETROW structure.
[StructLayout(LayoutKind.Sequential)]
struct MIB_IPNETROW
{
[MarshalAs(UnmanagedType.U4)]
public int dwIndex;
[MarshalAs(UnmanagedType.U4)]
public int dwPhysAddrLen;
[MarshalAs(UnmanagedType.U1)]
public byte mac0;
[MarshalAs(UnmanagedType.U1)]
public byte mac1;
[MarshalAs(UnmanagedType.U1)]
public byte mac2;
[MarshalAs(UnmanagedType.U1)]
public byte mac3;
[MarshalAs(UnmanagedType.U1)]
public byte mac4;
[MarshalAs(UnmanagedType.U1)]
public byte mac5;
[MarshalAs(UnmanagedType.U1)]
public byte mac6;
[MarshalAs(UnmanagedType.U1)]
public byte mac7;
[MarshalAs(UnmanagedType.U4)]
public int dwAddr;
[MarshalAs(UnmanagedType.U4)]
public int dwType;
}
// Declare the GetIpNetTable function.
[DllImport("Iphlpapi.dll")]
[Return: MarshalAs(UnmanagedType.U4)]
static extern int GetIpNetTable(
IntPtr pIpNetTable,
[MarshalAs (UnmanagedType.U4)]
pdwSize ref int,
bool border);
// The Insufficient buffer error.
const int ERROR_INSUFFICIENT_BUFFER = 122;
static void Main(string[] args)
{
// The number of bytes needed.
bytesNeeded int = 0;
// The result from the API call.
int result = GetIpNetTable(IntPtr.Zero, ref bytesNeeded, false);
// Call the function, expecting an Insufficient buffer.
if (result! = ERROR_INSUFFICIENT_BUFFER)
{
// Throw an exception.
throw new Win32Exception(result);
}
// Allocate the memory, do it in a try / finally block, to ensure code
// That it is released.
IntPtr buffer = IntPtr.Zero;
// Try / finally.
try
{
// Allocate the memory.
buffer = Marshal.AllocCoTaskMem(bytesNeeded);
// Make the call again.If it did not Succeed, then
// Raise an error.
result = GetIpNetTable(buffer, ref bytesNeeded, false);
// If the result is not 0(no error), then throw an exception.
if (result! = 0)
{
// Throw an exception.
throw new Win32Exception(result);
}
// Now we have the buffer, the have to marshal it. We can read
// The first 4 bytes to get the length of the buffer.
int entries = Marshal.ReadInt32(buffer);
// Increment the memory pointer by the size of the int.
IntPtr = new IntPtr currentBuffer(buffer.ToInt64() +
Marshal.SizeOf(typeof(int)));
// Allocate an array of entries.
MIB_IPNETROW[] table = new MIB_IPNETROW[entries];
// Cycle through the entries.
for (int index = 0; index < entries; index ++)
{
// Call PtrToStructure, getting the information structure.
table[index] = (MIB_IPNETROW)Marshal.PtrToStructure(new
IntPtr(currentBuffer.ToInt64() + (index *
Marshal.SizeOf(typeof(MIB_IPNETROW)))), typeof(MIB_IPNETROW));
}
for (int index = 0; index < entries; index + +)
{
IPAddress ip = new IPAddress(table[index].DwAddr);
Console.Write("IP:" + ip.ToString() + "\ t \ TMAC");
byte b;
b = table[index].mac0;
if (b < 0x10)
{
Console.Write("0");
}
else
{
Console.Write("");
}
Console.Write(b.ToString("X"));
b = table[index].mac1;
if (b < 0x10)
{
Console.Write("-0");
}
else
{
Console.Write("-");
}
Console.Write(b.ToString("X"));
b = table[index].mac2;
if (b < 0x10)
{
Console.Write("-0");
}
else
{
Console.Write("-");
}
Console.Write(b.ToString("X"));
b = table[index].mac3;
if (b < 0x10)
{
Console.Write("-0");
}
else
{
Console.Write("-");
}
Console.Write(b.ToString("X"));
b = table[index].mac4;
if (b < 0x10)
{
Console.Write("-0");
}
else
{
Console.Write("-");
}
Console.Write(b.ToString("X"));
b = table[index].mac5;
if (b < 0x10)
{
Console.Write("-0");
}
else
{
Console.Write("-");
}
Console.Write(b.ToString("X"));
Console.WriteLine();
}
}
finally
{
// Release the elephant.
Marshal.FreeCoTaskMem(buffer);
}
}
}
}
关于c# - arp -a 和路由打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4946505/
Rails2.3可以选择随时使用RouteSet#add_configuration_file添加更多路由。是否可以在Rails3项目中做同样的事情? 最佳答案 在config/application.rb中:config.paths.config.routes在Rails3.2(也可能是Rails3.1)中,使用:config.paths["config/routes"] 关于ruby-on-rails-Rails3中的多个路由文件,我们在StackOverflow上找到一个类似的问题
我是一个Rails初学者,但我想从我的RailsView(html.haml文件)中查看Ruby变量的内容。我试图在ruby中打印出变量(认为它会在终端中出现),但没有得到任何结果。有什么建议吗?我知道Rails调试器,但更喜欢使用inspect来打印我的变量。 最佳答案 您可以在View中使用puts方法将信息输出到服务器控制台。您应该能够在View中的任何位置使用Haml执行以下操作:-puts@my_variable.inspect 关于ruby-on-rails-如何在我的R
如何在ruby中调用C#dll? 最佳答案 我能想到几种可能性:为您的DLL编写(或找人编写)一个COM包装器,如果它还没有,则使用Ruby的WIN32OLE库来调用它;看看RubyCLR,其中一位作者是JohnLam,他继续在Microsoft从事IronRuby方面的工作。(估计不会再维护了,可能不支持.Net2.0以上的版本);正如其他地方已经提到的,看看使用IronRuby,如果这是您的技术选择。有一个主题是here.请注意,最后一篇文章实际上来自JohnLam(看起来像是2009年3月),他似乎很自在地断言RubyCL
我正在尝试在Ruby中复制Convert.ToBase64String()行为。这是我的C#代码:varsha1=newSHA1CryptoServiceProvider();varpasswordBytes=Encoding.UTF8.GetBytes("password");varpasswordHash=sha1.ComputeHash(passwordBytes);returnConvert.ToBase64String(passwordHash);//returns"W6ph5Mm5Pz8GgiULbPgzG37mj9g="当我在Ruby中尝试同样的事情时,我得到了相同sha
我没有找到太多关于如何执行此操作的信息,尽管有很多关于如何使用像这样的redirect_to将参数传递给重定向的建议:action=>'something',:controller=>'something'在我的应用程序中,我在路由文件中有以下内容match'profile'=>'User#show'我的表演Action是这样的defshow@user=User.find(params[:user])@title=@user.first_nameend重定向发生在同一个用户Controller中,就像这样defregister@title="Registration"@user=Use
我真的为这个而疯狂。我一直在搜索答案并尝试我找到的所有内容,包括相关问题和stackoverflow上的答案,但仍然无法正常工作。我正在使用嵌套资源,但无法使表单正常工作。我总是遇到错误,例如没有路线匹配[PUT]"/galleries/1/photos"表格在这里:/galleries/1/photos/1/edit路线.rbresources:galleriesdoresources:photosendresources:galleriesresources:photos照片Controller.rbdefnew@gallery=Gallery.find(params[:galle
C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.
Rails中有没有一种方法可以提取与路由关联的HTTP动词?例如,给定这样的路线:将“users”匹配到:“users#show”,通过:[:get,:post]我能实现这样的目标吗?users_path.respond_to?(:get)(显然#respond_to不是正确的方法)我最接近的是通过执行以下操作,但它似乎并不令人满意。Rails.application.routes.routes.named_routes["users"].constraints[:request_method]#=>/^GET$/对于上下文,我有一个设置cookie然后执行redirect_to:ba
路由有如下代码:resources:orders,only:[:create],defaults:{format:'json'}resources:users,only:[:create,:update],defaults:{format:'json'}resources:delivery_types,only:[:index],defaults:{format:'json'}resources:time_corrections,only:[:index],defaults:{format:'json'}是否可以使用1个字符串为所有资源设置默认格式,每行不带“默认值”散列?谢谢。
classPacketdefinitialize(name,age,number,array)@name=name@age=age@number=number@neighbors=arrayendendp1=Packet.new("n1",5,2,[1,2,3,4])putsp1.name我有上面的代码,但是每当我执行puts语句时,我都会收到nameisnotamethod的错误。我不知道任何其他方式来打印p1的名称。如何打印姓名? 最佳答案 这里的问题是,虽然您拥有实例变量,但您并未使它们可访问。attr_reader:vari