具有多个参数的 C# Process.Start() 不起作用 (nmap)
C# Process.Start() with multiple arguments do not work (nmap)
描述
目前我正在尝试通过 C# Process.Start() 调用“nmap”。但我无法让它与我想要的输入参数一起工作。
在 Process.Start() 处,它似乎对参数进行了错误的解析。
你知道我必须如何编写我的命令是 运行 的 ArgumentList 吗?
在命令行中,相同的命令就像魅力...
谢谢!
例子
我的简单例子:(编辑:雷洋的建议)
using System.Diagnostics;
namespace MyApp // Note: actual namespace depends on the project name.
{
public class Program
{
public static void Main(string[] args)
{
using var myprocess = Process.Start
(
new ProcessStartInfo
{
FileName = "/bin/zsh",
ArgumentList = {"-c nmap -p 8000-9000 -oG - 192.168.178.37/24 | awk -F'[/ ]' '{h=; for(i=1;i<=NF;i++){if($i==\"open\"){print h,$(i-1)}}}'" }
}
);
myprocess.WaitForExit();
}
}
}
此命令的输出:
zsh: bad option string: '-c nmap -p 8000-9000 -oG - 192.168.178.37/24 | awk -F'[/ ]' '{h=; for(i=1;i<=NF;i++){if($i=="open"){print h,$(i-1)}}}''
期望的输出:
192.168.178.1 8089
192.168.178.1 8181
192.168.178.1 8182
192.168.178.1 8183
192.168.178.1 8184
192.168.178.1 8185
192.168.178.1 8186
192.168.178.43 8080
在你的帮助下我可以解决这个问题。
谢谢!
有同样问题的人的解决方案:
变体 1:
直接方式:
using System.Diagnostics;
namespace MyApp // Note: actual namespace depends on the project name.
{
public class Program
{
public static void Main(string[] args)
{
using var myprocess = Process.Start
(
new ProcessStartInfo
{
FileName = "/bin/zsh",
ArgumentList = { "-c", "nmap -p 8000-9000 -oG - 192.168.178.37/24 | awk -F'[/ ]' '{h=; for(i=1;i<=NF;i++){if($i==\"open\"){print h,$(i-1)}}}'" }
}
);
myprocess.WaitForExit();
}
}
}
变体 2:
绕行:Shell脚本
(也许更简单的方法)
C#:
using System.Diagnostics;
namespace MyApp // Note: actual namespace depends on the project name.
{
public class Program
{
public static void Main(string[] args)
{
using var myprocess = Process.Start
(
new ProcessStartInfo
{
FileName = "/bin/zsh",
ArgumentList = {"/home/alexander/tst.sh"}
}
);
myprocess.WaitForExit();
}
}
}
Shell 脚本:
#!/bin/zsh
nmap -p 8000-9000 -oG - 192.168.178.37/24 | awk -F'[/ ]' '{h=; for(i=1;i<=NF;i++){if($i=="open"){print h,$(i-1)}}}'
两种变体的输出:
192.168.178.1 8089
192.168.178.1 8181
192.168.178.1 8182
192.168.178.1 8183
192.168.178.1 8184
192.168.178.1 8185
192.168.178.1 8186
192.168.178.43 8080
描述
目前我正在尝试通过 C# Process.Start() 调用“nmap”。但我无法让它与我想要的输入参数一起工作。 在 Process.Start() 处,它似乎对参数进行了错误的解析。 你知道我必须如何编写我的命令是 运行 的 ArgumentList 吗? 在命令行中,相同的命令就像魅力...
谢谢!
例子
我的简单例子:(编辑:雷洋的建议)
using System.Diagnostics;
namespace MyApp // Note: actual namespace depends on the project name.
{
public class Program
{
public static void Main(string[] args)
{
using var myprocess = Process.Start
(
new ProcessStartInfo
{
FileName = "/bin/zsh",
ArgumentList = {"-c nmap -p 8000-9000 -oG - 192.168.178.37/24 | awk -F'[/ ]' '{h=; for(i=1;i<=NF;i++){if($i==\"open\"){print h,$(i-1)}}}'" }
}
);
myprocess.WaitForExit();
}
}
}
此命令的输出:
zsh: bad option string: '-c nmap -p 8000-9000 -oG - 192.168.178.37/24 | awk -F'[/ ]' '{h=; for(i=1;i<=NF;i++){if($i=="open"){print h,$(i-1)}}}''
期望的输出:
192.168.178.1 8089
192.168.178.1 8181
192.168.178.1 8182
192.168.178.1 8183
192.168.178.1 8184
192.168.178.1 8185
192.168.178.1 8186
192.168.178.43 8080
在你的帮助下我可以解决这个问题。 谢谢!
有同样问题的人的解决方案:
变体 1: 直接方式:
using System.Diagnostics;
namespace MyApp // Note: actual namespace depends on the project name.
{
public class Program
{
public static void Main(string[] args)
{
using var myprocess = Process.Start
(
new ProcessStartInfo
{
FileName = "/bin/zsh",
ArgumentList = { "-c", "nmap -p 8000-9000 -oG - 192.168.178.37/24 | awk -F'[/ ]' '{h=; for(i=1;i<=NF;i++){if($i==\"open\"){print h,$(i-1)}}}'" }
}
);
myprocess.WaitForExit();
}
}
}
变体 2: 绕行:Shell脚本 (也许更简单的方法) C#:
using System.Diagnostics;
namespace MyApp // Note: actual namespace depends on the project name.
{
public class Program
{
public static void Main(string[] args)
{
using var myprocess = Process.Start
(
new ProcessStartInfo
{
FileName = "/bin/zsh",
ArgumentList = {"/home/alexander/tst.sh"}
}
);
myprocess.WaitForExit();
}
}
}
Shell 脚本:
#!/bin/zsh
nmap -p 8000-9000 -oG - 192.168.178.37/24 | awk -F'[/ ]' '{h=; for(i=1;i<=NF;i++){if($i=="open"){print h,$(i-1)}}}'
两种变体的输出:
192.168.178.1 8089
192.168.178.1 8181
192.168.178.1 8182
192.168.178.1 8183
192.168.178.1 8184
192.168.178.1 8185
192.168.178.1 8186
192.168.178.43 8080