Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.62/130: Рейтинг темы: голосов - 130, средняя оценка - 4.62
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18031 / 7734 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16

Получение локального и внешнего IP-адресов

24.04.2013, 17:07. Показов 24906. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Давайте обсудим разные способы:
  • встроенными командами
  • VBS
  • сторонними утилитами.
1
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.04.2013, 17:07
Ответы с готовыми решениями:

Получение локального IP
Доброе время суток. Как я и предполагал, что имея код For Each address In...

Получение ip адресов
Ребята помогите пожалуйста. Хочу прослушать свои ip адреса исходящие стандартными библиотеками. Получаю ip адрес так s =...

Получение данных с локального веб-сервиса
У меня есть веб сервис, которому отправляется запрос и соответственно получается ответ. Как на JavaScript или Ajax, реализовать отправку...

22
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18031 / 7734 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
24.04.2013, 17:08  [ТС]
1) Локальный IP через Netsh:

Bash
1
2
3
4
5
@echo off
for /f "tokens=2" %%a in ('netsh interface ipv4 show addresses^|find "IP-"') do set LocIP=%%a& Goto extNetsh
:extNetsh
echo %LocIP%
pause
У меня в список попадают в том числе адреса от VMWare... Я беру только самую первую строчку, может это не всегда верно?
Как узнать какой адаптер работает по-умолчанию?
2
Модератор
Эксперт JS
 Аватар для Eva Rosalene
5241 / 2115 / 416
Регистрация: 06.01.2013
Сообщений: 4,846
24.04.2013, 19:08
Ой не знаю, никогда с этим не работал.
Единственный приходящий на ум вариант:
Bash
1
2
3
4
5
6
7
8
9
10
@echo off
setlocal enabledelayedexpansion
set count=1
for /f "tokens=2" %%a in ('netsh interface ipv4 show addresses^|find "IP-"') do (
 set LocIP.!count!=%%a
 set /a count=!count!+1
)
set /a count=!count!-1
for /l %%A IN (1,1,!count!) DO (echo.!LocIP.%%A!)
pause>nul
1
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18031 / 7734 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
24.04.2013, 23:43  [ТС]
Получение внешнего IP

BAT + VBS.

Bash
1
2
3
4
5
@ECHO Off
Setlocal EnableExtensions
For /F %%A in ('cscript //nologo "%~dp0myIP.vbs"') do Set ExtIP=%%A
Echo %ExtIP%
pause>nul
myIP.vbs

Кликните здесь для просмотра всего текста
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
Option Explicit
'On Error Resume Next
 
Dim sIP
 
Sub XMLRequest(sQuery, objRemXML)
    Set objRemXML = CreateObject("Microsoft.XMLDOM")
    objRemXML.async = False
    objRemXML.Load (sQuery)
End Sub
 
 
Sub XMLParse(objRemXML, sNode, sRet)
    Dim objXMLret
    Set objXMLret = objRemXML.SelectSingleNode(sNode)
    If Err.Number <> 0 Then
        'MsgBox "Error of IPRange"
      Else
        If Not objXMLret Is Nothing Then sRet = objXMLret.Text
    End If
End Sub
 
 
Sub GetMyIP(sIP)
    Dim sQuery, objRemXML
 
    sQuery = "http://ip2country.sourceforge.net/ip2c.php?format=XML"
    Call XMLRequest(sQuery, objRemXML)
 
    'Get your IP-address
    Call XMLParse(objRemXML, "/lookup/ip", sIP)
    
    'if Sourceforge is Down
    If Len(sIP) = 0 Then
        Set objRemXML = Nothing
        
        sQuery = "http://wtfismyip.com/xml"
        Call XMLRequest(sQuery, objRemXML)
        
        Call XMLParse(objRemXML, "/wtf/your-fucking-ip-address", sIP) ':)
    End If
    
    Set objRemXML = Nothing
End Sub
 
'Here we go
Call GetMyIP(sIP)
 
WScript.Echo sIP
2
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18031 / 7734 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
24.04.2013, 23:52  [ТС]
Внутренний IP через ipconfig /ALL с разбиением на октеты:

Получение IP-адреса и разбиение его на октеты
1
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18031 / 7734 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
25.04.2013, 00:00  [ТС]
Внешний IP через стороннюю программу LAVResearch Get my IP: http://lavresearch.com/get_my_ip/
1
4340 / 2130 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
27.07.2016, 09:03
Внешнего, с помощью PowerShell:
Windows Batch file
1
powershell "$webClient = New-Object -TypeName System.Net.WebClient; $webClient.DownloadString('http://myexternalip.com/raw')"
.
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18031 / 7734 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
25.11.2016, 23:45  [ТС]
Получение IP-адресов сетевых адаптеров (Ethernet).
0
Покинул форум
3700 / 1483 / 355
Регистрация: 07.05.2015
Сообщений: 2,903
26.11.2016, 20:47
Локальный
Через реестр:
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
@echo off
  setlocal
    set "key=HKLM\SYSTEM\CurrentControlSet\Services"
    set "key=%key%\Tcpip\Parameters\Interfaces"
    set "int=%key%\%%i"
    for /f "tokens=8 delims=" %%i in (
      'reg query %key% ^| findstr /rec:"}"'
    ) do (
      for /f "tokens=3" %%j in (
        '2^>nul reg query %int% /v DhcpIpAddress^
        ^| findstr /irc:"reg_sz"'
      ) do (
        if /i "%%j" neq "" if /i "%%j" neq "0.0.0.0" (
          set "ip=%%j" % rem : ip address
          set "ni=%%i" % rem : network interface
          goto:next
        )
      )
    )
    :next
    set "key=HKLM\SOFTWARE\Microsoft\Windows NT"
    set "key=%key%\CurrentVersion\NetworkCards"
    set "int=%key%\%%i"
    for /f "tokens=7 delims=" %%i in (
      'reg query "%key%"'
    ) do (
      for /f "tokens=3" %%j in (
        'reg query "%int%" /v ServiceName^
        ^| findstr /irc:"reg_sz"'
      ) do (
        if /i "%%j" equ "%ni%" (
          for /f "tokens=2,*" %%k in (
            'reg query "%int%" /v Description'
          ) do set "cd=%%l"
        )
      )
    )
    echo:IP address : %ip%
    echo:Card name  : %cd%
  endlocal
exit /b
Через ipconfig:
Windows Batch file
1
2
3
4
5
6
7
8
@echo off
  setlocal
    for /f "tokens=2 delims=:" %%i in (
      'ipconfig ^| findstr /irc:"ip-"'
    ) do set "ip=%%i"
    echo:%ip:~1%
  endlocal
exit /b
Вообще, штатных средств для извлечения локального IP очень много, например, тот же route print, wmic, powershell и т.д. Что касается сторонних средств... можо использовать NodeJS, в portable варианте это ведь один единственный экзешник:
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
0</* :
@echo off
  setlocal
    2>nul node "%~f0" %*
  endlocal
exit /b */0;
(function() {
  var os = require('os'),
      ni = os.networkInterfaces();
 
  Object.keys(ni).forEach(function (iname) {
    ni[iname].forEach(function (iface) {
      if ('IPv4' !== iface.family || false !== iface.internal) {
        return;
      }
      
      console.log(iface.address);
    });
  });
}());
Также NodeJS можно использовать и для получения внешнего IP (см. официальную документацию).

Внешний
Здесь несколько вариантов: от поднятия своего собственного сервера до обращения к уже существующим сервисам. В последнем случае личное предпочтение - Яндекс, а именно одно из его недокументированных API.
Windows Batch file
1
2
3
4
5
@echo off
  for /f %%i in (
    'curl -# http://ipv4.internet.yandex.net/internet/api/v0/ip'
  ) do echo:%%~i
exit /b
Если резюмировать, то решение данной задачи зависит от:
1) знания штатного инструментария;
2) предпочтений стороннего инструментария;
3) конечной цели и смекалки
А также личного опыта админа\программиста.
4
4340 / 2130 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
26.11.2016, 23:32
С помощью curl можно и покороче:
Windows Batch file
1
2
3
4
@echo off
::curl http:// ipinfo.io
curl http:// ipinfo.io/ip
pause>nul
.

Добавлено через 59 секунд
А, да. Внешний.
0
0 / 0 / 0
Регистрация: 02.12.2016
Сообщений: 1
02.12.2016, 13:03
Через CMD все намного проще, внешний адрес узнать можно, просто пингануть какой нибудь гугл или яндекс, и там увидите от какого адреса идут запросы и все!
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18031 / 7734 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
02.12.2016, 15:31  [ТС]
Aidi, тема про то, как узнать свой адрес, а не IP домена.
0
27 / 26 / 11
Регистрация: 25.03.2014
Сообщений: 217
04.12.2016, 22:45
Написал консольное решение - при запуске выдает внешний и внутренний IP в таком стиле:
Code
1
2
Внешний IP: 10.10.10.10
Внутренний IP: 20.20.20.20
Для работы нужен NetFrameWork 3.0

Исходный код

VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
Module Module1
  Sub Main()
    Dim Client As New Net.WebClient
    Client.Proxy = New System.Net.WebProxy
    Dim Tmp As String = Client.DownloadString("http://ip-address.ru/show")
    Client.Dispose()
    Dim objEntry As Net.IPHostEntry = Net.Dns.GetHostByName(Net.Dns.GetHostName)
    Dim strIP As String = CType(objEntry.AddressList.GetValue(0), Net.IPAddress).ToString
    Console.WriteLine("Внешний IP: " & Tmp)
    Console.WriteLine("Внутренний IP: " & strIP)
  End Sub
End Module
Вложения
Тип файла: zip getip.zip (9.1 Кб, 83 просмотров)
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18031 / 7734 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
04.12.2016, 23:11  [ТС]
Мой вариант утилиты GetExternalIP.exe

В интернет стучаться не будет. Берёт данные через GetIpAddrTable

Совместимость Win 2000 - 10.
Без зависимостей от .NET.
На виртуальных машинах определять IP не будет.

Исходник

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
Option Explicit
 
Private Const STD_OUTPUT_HANDLE = -11&
Private Const STD_ERROR_HANDLE = -12&
 
Private Declare Function GetIpAddrTable Lib "IpHlpApi.dll" (pIPAddrTable As Any, pdwSize As Long, ByVal bOrder As Long) As Long
Private Declare Function StdOut Lib "kernel32" Alias "GetStdHandle" (Optional ByVal HandleType As Long = STD_OUTPUT_HANDLE) As Long
Private Declare Function StdErr Lib "kernel32" Alias "GetStdHandle" (Optional ByVal HandleType As Long = STD_ERROR_HANDLE) As Long
Private Declare Function FreeConsole Lib "kernel32" () As Long
Private Declare Function WriteFile Lib "kernel32" (ByVal hFile As Long, ByVal lpBuffer As Long, ByVal nNumberOfBytesToWrite As Long, lpNumberOfBytesWritten As Long, ByVal lpOverlapped As Long) As Long
Private Declare Sub ExitProcess Lib "kernel32" (ByVal uExitCode As Long)
 
Private cOut As Long
Private cErr As Long
 
Private Sub Main()
    Dim sExternalIP As String
 
    cOut = StdOut()
    cErr = StdErr()
 
    sExternalIP = GetExternalIp()
    
    If Len(sExternalIP) Then WriteC sExternalIP, cOut
    
    FreeConsole
    ExitProcess IIf(Len(sExternalIP), 0, 1)
End Sub
 
Private Function GetExternalIp() As String
    Dim buf(0 To 511) As Byte
    Dim BufSize As Long
    Dim rc As Long
    Dim NrOfEntries As Long
    Dim i As Long
    Dim j As Long
    Dim s As String
   
    BufSize = UBound(buf) + 1
    rc = GetIpAddrTable(buf(0), BufSize, 1)
   
    If rc <> 0 Then WriteC "GetIpAddrTable failed with return value: " & rc, cErr: Exit Function
   
    NrOfEntries = buf(1) * 256& + buf(0)
    If NrOfEntries = 0 Then Exit Function
   
    ReDim IpAddrs(0 To NrOfEntries - 1) As String
   
    For i = 0 To NrOfEntries - 1
        s = ""
        For j = 0 To 3
            s = s & IIf(j > 0, ".", "") & buf(4 + i * 24 + j)
        Next
        IpAddrs(i) = s
    Next
       
    For i = 0 To UBound(IpAddrs)
        If IpAddrs(i) <> "127.0.0.1" And Not isLocalIP(IpAddrs(i)) Then
            GetExternalIp = IpAddrs(i)
        End If
    Next
End Function
 
Private Function isLocalIP(sIP As String)  'rfc1918
    On Error GoTo ErrorHandler
    '10.0.0.0        -   10.255.255.255  (10/8 prefix)
    '172.16.0.0      -   172.31.255.255  (172.16/12 prefix)
    '192.168.0.0     -   192.168.255.255 (192.168/16 prefix)
 
    If StrBeginWith(sIP, "192.168.") Then
        isLocalIP = True
    ElseIf StrBeginWith(sIP, "10.") Then
        isLocalIP = True
    ElseIf StrBeginWith(sIP, "172.") Then
        Dim oct() As String
        oct = Split(sIP, ".")
        If UBound(oct) > 0 Then
            If CLng(oct(1)) >= 16 And CLng(oct(1)) <= 31 Then
                isLocalIP = True
            End If
        End If
    End If
    Exit Function
ErrorHandler:
    WriteC "Error in isLocalIP: " & Err.Number & " - " & Err.Description, cErr
End Function
 
Public Function StrBeginWith(Text As String, BeginPart As String) As Boolean
    StrBeginWith = (StrComp(Left$(Text, Len(BeginPart)), BeginPart, 1) = 0)
End Function
 
Private Sub WriteC(ByVal txt As String, Optional ByVal cHandle As Long)
    Dim dwWritten As Long
    txt = txt & vbNewLine
    WriteFile IIf(cHandle = 0, cOut, cHandle), StrPtr(StrConv(txt, vbFromUnicode)), Len(txt), dwWritten, 0&
    If cHandle = cErr Then Debug.Print txt
End Sub
Вложения
Тип файла: zip GetExternalIP.zip (14.5 Кб, 94 просмотров)
0
430 / 38 / 1
Регистрация: 02.03.2016
Сообщений: 436
23.08.2017, 21:07
А как узнать IP адрес подключенного клиента к терминальному серверу?
0
430 / 38 / 1
Регистрация: 02.03.2016
Сообщений: 436
25.08.2017, 16:16
Ну или хотя бы определить, что пользователь подключен удаленно. Это нужно для того, чтобы при входе в систему удаленно, код в батнике выполнялся, а если пользователь зашел локально, то не выполнялся.
0
0 / 0 / 0
Регистрация: 04.06.2019
Сообщений: 14
04.06.2019, 20:40
Dragokas,

Добрый день, подскажи, пожалуйста, почему программа срабатывает 1 раз, после этого выдает пустое значение, в CMD "echo Off" возвращает. После перезагрузки компа, снова срабатывает 1 раз...
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18031 / 7734 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
04.06.2019, 23:14  [ТС]
Какая программа?
0
 Аватар для bidstrup
419 / 179 / 27
Регистрация: 11.03.2018
Сообщений: 771
05.06.2019, 00:15
Внешний ( public ) адрес:

PowerShell
1
Invoke-RestMethod http://ipinfo.io/json
Code
1
2
3
4
5
6
7
8
ip       : 209.252.40.125
hostname : 209-252-40-125.nat.spd-mgts.ru
city     : Moscow
region   : Moscow City
country  : RU
loc      : 55.7522,37.6156
postal   : 127562
org      : AS25513 OJS Moscow city telephone network
Совместимость:

Windows: PowerShell 3.0 and above.
Powershell Core: YES
0
6977 / 2869 / 1102
Регистрация: 06.06.2017
Сообщений: 9,748
05.06.2019, 06:20
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
'————————————————————————————————————————
' Сравнение FQDN по скорости получения IP
'————————————————————————————————————————
Set oHTTP = CreateObject("Msxml2.XMLHTTP")
For Each Dom In Split("api.ipify.org icanhazip.com ip-address.ru/show ipv4.internet." &_
"yandex.net/internet/api/v0/ip myexternalip.com/raw robvanderwoude.com/wanip.php")
    T = Timer
    If Left(Dom,1) = "m" Then s = "s" : w = "www."
    With oHTTP
        .open "GET", "http" & s & "://" & w & Dom, False
        .send 0 : IP = .responseText : .Abort
    End With
    T = CDbl(Timer - T): If Len(T) < 9 Then T = T & vbTab
    List = List & vbCr & T & vbTab & Dom
Next
Set oHTTP = Nothing
MsgBox "Секунды  " & vbTab & "FQDN" & vbCr & "——————" & vbTab &_
"——————" & List, 64, Space(22) & "Скорость получения IP " & IP
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.06.2019, 06:20
Помогаю со студенческими работами здесь

Получение адресов функций OpenGL
Решил пойти по стопам товарища, что писал на чистом WinApi (то есть без всяких freeglut'ов и GLWF'ов) и наткнулся на одну проблему. Я...

Получение IP-адресов в заданном диапазоне
Здравствуйте. Преподаватель задал простое задание. Побыстрому написать программку которая бы выдавала IP адреса в определенном диапазоне....

Получение email-адресов со страницы
вообщем решил собрать мыла с http://***************/ мыла в HTML коде выглядят таким образом &lt;img...

Получение внешнего IP
Необходимо получить внениий IP - с этом собственно проблем нет, а вот отправить коректный https запроос не получается. собственно как...

Получение внешнего IP
Добрый вечер! Необходимо получить внешний IP адрес и записать в *.txt. Нарыл код, ну та как в C# только первые дни... Прошу помощи...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru