1 (изменено: Indomito, 2016-06-29 03:39:31)

Тема: AHK: Считать и изменит имя сетевого соединения

Приветствую.

Я на AHK выполняю включение или отключение от сети.

  1. Включение:   netsh interface ipv4 set address "Internet" dhcp

  2. Выключение: netsh interface ipv4 set address "Internet"  static 1.0.0.0

Исходник не привожу - он рабочий, но имя сетевого соединения часто меняется, много компов и часто кто-то меняет руками, переустановка OS и т.д.

Ясно, что если имя не Internet, то код не сработает и мне надо идти, и править руками.

Как считать и установить имя сетевого соединения Internet(принудительно)?
Стандартные потоки:  stdin, stdout и stderr имеются, как аналогичные в С/С++.

P.S. OS Windows 7.

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
Для NotePad++(подсветка синтаксиса, автозавершение и плагины(AutoSave и RunMe).
OS Windows 10 x64 Pro

2

Re: AHK: Считать и изменит имя сетевого соединения

Можно получить активное подключение с помощью этой комманды:

netsh interface show interface

И потом:

netsh interface set interface name = "Полученное имя" newname = "Internet"

3 (изменено: Indomito, 2016-06-29 06:55:07)

Re: AHK: Считать и изменит имя сетевого соединения

Malcev Жаль надеялся без парсинга обойдусь.

lChekInternet:
  CmdLine := "netsh interface show interface"
  RunCon(CmdLine, 0, Output)
  MsgBox %Output%
return

Хотя вроде не так сложно... надеюсь.

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
Для NotePad++(подсветка синтаксиса, автозавершение и плагины(AutoSave и RunMe).
OS Windows 10 x64 Pro

4

Re: AHK: Считать и изменит имя сетевого соединения

Через WMI еще можно:
https://autohotkey.com/board/topic/1140 … ddresses/

5

Re: AHK: Считать и изменит имя сетевого соединения

Indomito
А если соединений несколько, тогда что?

6

Re: AHK: Считать и изменит имя сетевого соединения

Malcev пишет:

Через WMI еще можно:...

А это стоит посмотреть, я написал парсер.


Flasher Ты имеешь ввиду, несколько контроллеров на локальном компе или что то иное?

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
Для NotePad++(подсветка синтаксиса, автозавершение и плагины(AutoSave и RunMe).
OS Windows 10 x64 Pro

7

Re: AHK: Считать и изменит имя сетевого соединения

Indomito
Созданных сетевых подключений. А уж на базе скольких контроллеров - не суть важно.

8 (изменено: Indomito, 2016-06-30 03:34:00)

Re: AHK: Считать и изменит имя сетевого соединения

Flasher Я это учитываю и проверяю - код достаточно большой, но до проверки netsh interface ipv4 set address "Internet" dhcp руки не доходили.
Я контролирую только его(выключаю и включаю).

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
Для NotePad++(подсветка синтаксиса, автозавершение и плагины(AutoSave и RunMe).
OS Windows 10 x64 Pro

9

Re: AHK: Считать и изменит имя сетевого соединения

Indomito
Интересно как? У меня просто есть домашняя безконсольная заготовка со смотром папки сетевых подключений через shell и выполнением глагола над подключением. Но тут сетевые диски понадобятся скорее. На своём это, конечно, проще делается. Для удалёнки, netsh, вероятно, оптимальней.

P.S.: По этикету ник помимо пробела желательно отделять запятой или переводом строки.

10

Re: AHK: Считать и изменит имя сетевого соединения

Flasher пишет:

P.S.: По этикету ник помимо пробела желательно отделять запятой или переводом строки.

Flasher, Не знал - учту.

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
Для NotePad++(подсветка синтаксиса, автозавершение и плагины(AutoSave и RunMe).
OS Windows 10 x64 Pro

11 (изменено: Malcev, 2016-06-30 18:58:28)

Re: AHK: Считать и изменит имя сетевого соединения

А если соединений несколько, тогда что?

Может так можно узнать через какое идет доступ к интернету?
Сам проверить не могу.

msgbox % GetLocalIPs()

GetLocalIPs() {
    adaptors := Object()
    ips := Object()
    metric := 500, NetworkName := ""
    objWMIService := ComObjGet("winmgmts:{impersonationLevel = impersonate}!\\.\root\cimv2")
    colItems := objWMIService.ExecQuery("SELECT * FROM Win32_NetworkAdapter")._NewEnum, colItems[objItem]
    While (colItems[objItem])
        adaptors.Insert(objItem.InterfaceIndex,objItem.NetConnectionID)
    For index, name in adaptors {
        colItems := objWMIService.ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE InterfaceIndex = '" index "'")._NewEnum, colItems[objItem]
        If (name && objItem.IPAddress[0]) and (objItem.IPConnectionMetric < metric) and (objItem.IPConnectionMetric >= 0)
        {
            metric := objItem.IPConnectionMetric
            NetworkName := name
        }
    }
    Return NetworkName
}

12 (изменено: Indomito, 2016-07-01 13:31:12)

Re: AHK: Считать и изменит имя сетевого соединения

Malcev пишет:

Может так можно узнать через какое идет доступ к интернету?

Проще, вот так.

+ Get public and local IP addresses
RouterOrServer := "Internet"
MsgBox % GetPublicIP() ;Display the networks public IP
MsgBox % GetLocalIPByAdaptor(RouterOrServer) ;Display the local IP of the adaptor or router or server

For AdaptorName, IP in GetLocalIPs() { ;Display the IPs of all adaptors that have one
    MsgBox, %AdaptorName%: %IP%
}

GetPublicIP() {
    HttpObj := ComObjCreate("WinHttp.WinHttpRequest.5.1")
    HttpObj.Open("GET","https://www.google.com/search?q=what+is+my+ip&num=1")
    HttpObj.Send()
    RegexMatch(HttpObj.ResponseText,"Client IP address: ([\d\.]+)",match)
    Return match1
}

GetLocalIPByAdaptor(adaptorName) {
    objWMIService := ComObjGet("winmgmts:{impersonationLevel = impersonate}!\\.\root\cimv2")
    colItems := objWMIService.ExecQuery("SELECT * FROM Win32_NetworkAdapter WHERE NetConnectionID = '" adaptorName "'")._NewEnum, colItems[objItem]
    colItems := objWMIService.ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE InterfaceIndex = '" objItem.InterfaceIndex "'")._NewEnum, colItems[objItem]
    Return objItem.IPAddress[0]
}

GetLocalIPs() {
    adaptors := Object()
    ips := Object()
    objWMIService := ComObjGet("winmgmts:{impersonationLevel = impersonate}!\\.\root\cimv2")
    colItems := objWMIService.ExecQuery("SELECT * FROM Win32_NetworkAdapter")._NewEnum, colItems[objItem]
    While (colItems[objItem])
        adaptors.Insert(objItem.InterfaceIndex,objItem.NetConnectionID)
    For index, name in adaptors {
        colItems := objWMIService.ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE InterfaceIndex = '" index "'")._NewEnum, colItems[objItem]
        If (name && objItem.IPAddress[0])
            ips.Insert(name,objItem.IPAddress[0])
    }
    Return ips
}

Но при работе с сервером будет путаница, а вот для адаптера/роутера она подойдёт.
А мне же нужно другое, просто человека отключить от сервера, на то бывает много причин.

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
Для NotePad++(подсветка синтаксиса, автозавершение и плагины(AutoSave и RunMe).
OS Windows 10 x64 Pro

13

Re: AHK: Считать и изменит имя сетевого соединения

Я имел в виду ситуацию, как определить название сети через которое идет доступ к интернету без каких-либо дополнительных данных.

14 (изменено: Indomito, 2016-07-01 15:09:49)

Re: AHK: Считать и изменит имя сетевого соединения

Malcev
Да, тогда твоего кода из поста №11 вполне достаточно, но я сижу в ЛС из 4-х компов и только роутер, а твой MsgBox показывает пустое сообщение.

Так и должно быть? Ты не где не ошибся?

P.S. Нужно имя соединения... IMHO.

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
Для NotePad++(подсветка синтаксиса, автозавершение и плагины(AutoSave и RunMe).
OS Windows 10 x64 Pro

15

Re: AHK: Считать и изменит имя сетевого соединения

Не знаю, что такое ЛС.
Но у меня нигде сетки нету, а на обычных компьютерах название сети показывается.
А он вообще перебирает адапторы и сети?

For AdaptorName, IP in GetLocalIPs() { ;Display the IPs of all adaptors that have one
    MsgBox, %AdaptorName%: %IP%
}

GetLocalIPs() {
    adaptors := Object()
    ips := Object()
    objWMIService := ComObjGet("winmgmts:{impersonationLevel = impersonate}!\\.\root\cimv2")
    colItems := objWMIService.ExecQuery("SELECT * FROM Win32_NetworkAdapter")._NewEnum, colItems[objItem]
    While (colItems[objItem])
        adaptors.Insert(objItem.InterfaceIndex,objItem.NetConnectionID)
    For index, name in adaptors {
        colItems := objWMIService.ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE InterfaceIndex = '" index "'")._NewEnum, colItems[objItem]
        If (name && objItem.IPAddress[0])
            ips.Insert(name,objItem.IPAddress[0])
    }
    Return ips
}

16 (изменено: Indomito, 2016-07-01 15:58:48)

Re: AHK: Считать и изменит имя сетевого соединения

Malcev

Ну, ЛС - это Локальная Сеть, т.е. без серверной поддержки, может иметь достут в интернет или не иметь.
У меня она реализована через модем-роутер, т.е. выход в интернет. Хотя можно отключить оный для по MAC-адресу выборочно.

+ MAC-адрес

MAC-адрес (от англ. Media Access Control — управление доступом к среде, также Hardware Address) — уникальный идентификатор, присваиваемый каждой единице активного оборудования или некоторым их интерфейсам в компьютерных сетях Ethernet.

А он вообще перебирает адапторы и сети?

Нет, просто завершается... хотя может перебирает, но мне об этом не говорит.

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
Для NotePad++(подсветка синтаксиса, автозавершение и плагины(AutoSave и RunMe).
OS Windows 10 x64 Pro

17

Re: AHK: Считать и изменит имя сетевого соединения

Понятно. Так скрипт из 15 поста перебирает адапторы и айпи?

18 (изменено: Indomito, 2016-07-01 16:15:40)

Re: AHK: Считать и изменит имя сетевого соединения

Malcev
Залез в роутер.

Параметры сети -> LAN TCP/IP Настройка -> Использовать маршрутизатор в качестве DHCP-сервера(задействован).

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
Для NotePad++(подсветка синтаксиса, автозавершение и плагины(AutoSave и RunMe).
OS Windows 10 x64 Pro

19

Re: AHK: Считать и изменит имя сетевого соединения

А этот работает?

RouterOrServer := "Internet"
MsgBox % GetLocalIPByAdaptor(RouterOrServer) ;Display the local IP of the adaptor or router or server

GetLocalIPByAdaptor(adaptorName) {
    objWMIService := ComObjGet("winmgmts:{impersonationLevel = impersonate}!\\.\root\cimv2")
    colItems := objWMIService.ExecQuery("SELECT * FROM Win32_NetworkAdapter WHERE NetConnectionID = '" adaptorName "'")._NewEnum, colItems[objItem]
    colItems := objWMIService.ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE InterfaceIndex = '" objItem.InterfaceIndex "'")._NewEnum, colItems[objItem]
    Return objItem.IPAddress[0]
}

20 (изменено: Indomito, 2016-07-01 16:29:18)

Re: AHK: Считать и изменит имя сетевого соединения

Malcev пишет:

А этот работает?

Да, т.е. конечно, т.к. имя соединения верное.
P.S. Выдаёт IPS, т.е. локальный IP.
P.P.S.  Можно по MAC узнать, но тут проблематично, т.к. компы могут меняться - это про свои дела.

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
Для NotePad++(подсветка синтаксиса, автозавершение и плагины(AutoSave и RunMe).
OS Windows 10 x64 Pro

21

Re: AHK: Считать и изменит имя сетевого соединения

Может быть прав не хватает, может быть какие-то службы отключены.
Но у меня на 6 компьютерах код из 15 поста работает.
Проверяй с msgbox где затык.

22 (изменено: Indomito, 2016-07-01 16:51:28)

Re: AHK: Считать и изменит имя сетевого соединения

Malcev пишет:

Может быть прав не хватает, может быть какие-то службы отключены.
Но у меня на 6 компьютерах код из 15 поста работает.
Проверяй с msgbox где затык.

С любого компа и все лок.адреса?
Проще обратиться к роутеру по его IP внутреннему, он должен выдать все адреса.

У тебя как организована локалка, т.е. её топология?

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
Для NotePad++(подсветка синтаксиса, автозавершение и плагины(AutoSave и RunMe).
OS Windows 10 x64 Pro

23

Re: AHK: Считать и изменит имя сетевого соединения

У меня не локалка, просто компьютеры подключены к разным рутерам.
Не вижу в чем разница, так как у тебя все-равно же каждый компьютер имеет сетевой адаптер.

24 (изменено: Indomito, 2016-07-01 17:10:48)

Re: AHK: Считать и изменит имя сетевого соединения

Malcev
B ещё каждый компьютер имеет своё имя, не знаю, но это прошибается только через netsh, в данном случае, а на работе и он не очень помогает, т.е. ошибается.

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
Для NotePad++(подсветка синтаксиса, автозавершение и плагины(AutoSave и RunMe).
OS Windows 10 x64 Pro