Не отвечать на ваш вопрос напрямую, но, боюсь, вы можете стать жертвой так называемой проблемы XY : нет смысла прыгать через такое количество обручей, чтобы просто собрать информацию оконфигурация стека IP целевого хоста - Windows предоставляет специальные средства, называемые WMI , для выполнения таких задач.
Таким образом, вместо вызова psexec.exe
для вызова - на целихост - cmd.exe
для вызова ipconfig.exe
, вы можете просто отложить эту задачу до одного из запросов, поддерживаемых WMI.
Я бы предложил использовать либо Win32_NetworkAdapter
, либо Win32_IP4RouteTable
(или оба) -в зависимости от того, какой тип данных вам действительно нужен (конфигурация сетевых карт или данных маршрутизации).
Рабочий образец, использующий github.com/StackExchange/wmi
:
package main
import (
"log"
"os"
"time"
"github.com/StackExchange/wmi"
)
type win32_NetworkAdapter struct {
AdapterType string
AdapterTypeID uint16
AutoSense bool
Availability uint16
Caption string
ConfigManagerErrorCode uint32
ConfigManagerUserConfig bool
CreationClassName string
Description string
DeviceID string
ErrorCleared bool
ErrorDescription string
GUID string
Index uint32
InstallDate time.Time
Installed bool
InterfaceIndex uint32
LastErrorCode uint32
MACAddress string
Manufacturer string
MaxNumberControlled uint32
MaxSpeed uint64
Name string
NetConnectionID string
NetConnectionStatus uint16
NetEnabled bool
NetworkAddresses []string
PermanentAddress string
PhysicalAdapter bool
PNPDeviceID string
PowerManagementCapabilities []uint16
PowerManagementSupported bool
ProductName string
ServiceName string
Speed uint64
Status string
StatusInfo uint16
SystemCreationClassName string
SystemName string
TimeOfLastReset time.Time
}
type win32_IP4RouteTable struct {
Age int32
Caption string
Description string
Destination string
Information string
InstallDate time.Time
InterfaceIndex int32
Mask string
Metric1 int32
Metric2 int32
Metric3 int32
Metric4 int32
Metric5 int32
Name string
NextHop string
Protocol uint32
Status string
Type uint32
}
func main() {
var compName string
switch len(os.Args) {
case 1:
compName = "."
case 2:
compName = os.Args[1]
default:
log.Fatalf("usage: %s [COMPUTER]", os.Args[0])
}
var dst []win32_NetworkAdapter
//var dst []win32_IP4RouteTable
q := wmi.CreateQuery(&dst, "")
err := wmi.Query(q, &dst, compName)
if err != nil {
log.Fatalf("%#v\n", err)
}
for _, v := range dst {
log.Printf("%#v\n", v)
}
}
Asпредставлен, он запрашивает хост, имя которого передается в командной строке (или, если его не хватает, localhost), для конфигурации NIC.
Чтобы вместо этого получить данные маршрутизации, закомментируйте первый оператор var dst ...
и раскомментируйтевторой.Надеюсь, вы поймете идею.
Соответствующие отправные точки: это и то .