微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 cygwin 的 bash shell 中调用 windows 的 netsh 时出现问题

如何解决在 cygwin 的 bash shell 中调用 windows 的 netsh 时出现问题

我有 3 台计算机(让我称它们为 N1、N2、N3),其系统如下:

  • N1:Windows 2019 Server Essential 64 位,带有 CYGWIN_NT-10.0 -3.0.7(0.338/5/3) x86_64
  • N2:Windows 10 专业版 64 位,带有 CYGWIN_NT-10.0 - 3.1.7(0.340/5/3) x86_64
  • N3:Windows 10 专业版 64 位,带有 CYGWIN_NT-10.0 - 3.1.7(0.340/5/3) x86_64

从 Linux 机器通过 Cygwin 的 SSHD 访问它们,我可以(远程)在所有这 3 台计算机上运行(windows-)命令,例如

  • /c/Windows/System32/NET start <SERVICENAME>
  • /c/Windows/System32/ATTRIB
  • /c/Windows/System32/HELP
  • /c/Windows/System32/NETSH
  • ...

它们都按预期工作。

N3 上的命令 NETSH 除外!

在 N3 上,调用

/c/Windows/System32/NETSH

什么都不做:没有错误消息,没有命令提示符,即使提供像“?”这样的参数。 (带或不带引号)或任何其他参数,当仅使用完全限定的命令路径或命令名称时,什么也不会发生,如下所示:

  user@machine ~ # /c/Windows/System32/NETSH
  user@machine ~ #      

(注意:在问题机器 N3 上,Cygwin 版本也比最新(实际)版本 CYGWIN_NT-10.0 - 3.1.4(0.340/5/3) x86_64 稍旧,结果是一样)

有没有人有想法?? 谢谢!!

学校

解决方法

问题在于 Mintty 之间的交互和 netsh 需要交互且不是 Cygwin 程序。详情见:

https://github.com/mintty/mintty/wiki/Tips#inputoutput-interaction-with-alien-programs

如果您使用 root 上的 netshCygwin 下运行 Cygwin.bat,则没有问题,因为终端与 CMD

相同
$ netsh
netsh>interface
In zukünftigen Versionen von Windows wird die Netsh-Funktionalität
für TCP/IP von Microsoft entfernt.
..
Unter https://go.microsoft.com/fwlink/?LinkId=217627 finden Sie
weitere Informationen zu PowerShell-Befehlen für TCP/IP.
netsh interface>
netsh interface>quit

Mintty 下的解决方法是使用 winpty 作为中间
https://github.com/rprichard/winpty/releases

假设您使用的是 64 位系统:

$ wget https://github.com/rprichard/winpty/releases/download/0.4.3/winpty-0.4.3-cygwin-2.8.0-x64.tar.gz
$ tar -xf winpty-0.4.3-cygwin-2.8.0-x64.tar.gz
$ cp -r  winpty-0.4.3-cygwin-2.8.0-x64/* /usr/local
$ winpty netsh
netsh>
,

我为我的问题找到了一种快速而简单的解决方法,但它对我来说效果很好。 (我的目标实际上是创建一个 shell 脚本来检查 /var/log/sshd.log 并查找最近几个月刚刚爆发的暴力攻击。然后这个脚本应该创建 Windows 防火墙规则来阻止这些 IP 号码时间。这就是我需要访问“netsh”的目的。)

我针对上述问题的解决方法:

我创建了另一个 shell 脚本

/usr/local/bin/netsh

有这个内容:

#!/bin/bash 
exec  /c/Windows/System32/CMD  /c  "C:\Windows\System32\NETSH $@"

当然这需要一个 PATH 变量,它具有

/usr/local/bin

作为第一个元素。

这样我(和我的脚本)可以透明地使用“netsh”工具。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?