내 IP 주소는 무엇입니까?


24

이것이 아직 도전에 빠지지 않은 것에 놀랐습니다.

실행중인 컴퓨터의 IP 주소를 출력하십시오. 로컬 및 외부 IP 주소를 모두 출력해야합니다.

로컬 IP 주소, 즉 기본 형식 192.168.xx

공개 IP 주소는 Google https://www.google.co.uk/search?source=hp&q=whats+my+ip 를 사용하여 확인할 수 있습니다.

출력은 모든 형식이 될 수 있습니다. IPv4 또는 IPv6 또는 각각의 혼합이 허용되지만 유일한 출력이어야합니다. 코드는 전체 프로그램 또는 함수일 수 있습니다.

규칙이 가장 짧은 코드 승리에 적용됩니다.

표준 허점 은 금지되어 있습니다.

편집 : @ 피터 테일러 (Peter Taylor)의 의견에 따라 두 유형의 주소가 모두있는 경우 첫 번째 주소를 출력하거나 액세스 할 수있는 수를 선택할 수 있습니다. 적어도 하나의 지역 및 하나의 대중이 존재하는 한.


3
나는 그 0/1일이 도전에 불필요한 보풀을 더 한다고 생각합니다 .
Mr. Xcoder

5
이것은 지정되지 않았습니다. 특히 여러 개의 로컬 IP 주소 및 / 또는 여러 개의 공용 IP 주소가있는 경우를 명확하게 다루지 않습니다. 또한 여러 개의 공용 IP 주소가 있는지 여부와 신뢰할 수있는 방법을 알 수있는 확실한 방법이 없습니다.
피터 테일러

5
호스트에 RFC 1918 주소가 없으면 어떻게합니까? 적어도 하나의 개인 네트워크가있는 시스템을 제외하고는 이에 대한 확실한 대답이없는 것 같습니다.
Toby Speight

4
... 하나의 네트워크 인터페이스에서도 여러 개의 IP 주소를 가질 수 있습니다.
Kaz

14
실제로, 나는 당신이 명시 적으로 금지 한 표준 허점 중 하나 인 외부 소스에서 가져 오지 않고이 절반을 어떻게 해결할 수 있는지 알지 못합니다 .
Octopus

답변:


18

Bash + curl + iproute2 , 54 50 49 48 33 바이트

ip r g 1|awk '$0=$7'
curl eth0.me

1 바이트를 골라 낸 @DomHastings에게 감사드립니다!

더 짧은 URL을 제공하는 @Sisyphus에게 감사합니다!

9 바이트를 골라 낸 @zeppelin에게 감사드립니다!


@DomHastings 귀하의 마지막 골프 시도는 적어도 우분투 16.04.3 LTS에, IP 주소와 함께 약간의 쓰레기를 반환
Ferrybig

@Ferrybig 예, 1/0부품은 STDERR에 오류를 출력하지만 기본적으로 무시됩니다. 다른 출력이 나오면 ip route내 컴퓨터에서 실행중인 버전 일 수 있습니다. 부끄러움!
Dom Hastings

첫 줄 1000은 나를 위해 인쇄 합니다 ... ip route get 1출력 : ptpb.pw/pixx
Majora320

해당 코드를 실행하면 다음과 같은 결과가 나타납니다.RTNETLINK answers: Network is unreachable
kasperd

1
AWK 표현을 약간 최적화 할 수도 있습니다.awk 'NR<2&&$0=$7'
zeppelin

9

배쉬 37 31 27 바이트

이것은 영감 대답 하여 브루스 포르테 . 이 답변은 IPv4에서만 작동하므로 작동하지 않습니다. IPv6에서 작동하는 버전으로 다시 작성했습니다.

ip r g b::|awk '$0=$9" "$9'

이것은 PPPoE를 통해 연결된 Ubuntu 14.04.5에서 테스트되었으며 IPv6은 NAT없이 사용되도록 설계되었으므로 동일한 IP 주소를 두 번 출력합니다.

-6 덕분 바이트 비행선 , -2 덕분 바이트 Ferrybig을 , -2 덕분 바이트 Markasoftware을 .


내 우분투 16.04.3 LTS에서 나는 명령이 작동 하도록 변경 '{print$11,$11}'해야 '{print$9,$9}'했고, 당신의 명령은 1024를 두 번 반환했으며, 당신의 명령은 내 우분투 16.04.2 컴퓨터에서 작동합니다.
Ferrybig

@Ferrybig 네트워크 구성에 따라 다를 수 있습니다. 라우터 알림에서 주소가 자동 구성되는 네트워크에서 이것을 테스트했습니다.
kasperd

IP 주소를 수동으로 구성되어 기계 (정적)의 경우, ip route출력되지 않는 proto ra부분은, 당신은 당신의 대답은 더 골프 기능으로 사용할 수 있습니다
Ferrybig

@Ferrybig 나는 현재 크기가 커지지 않고 두 경우 모두 작동시킬 수 있는지 고민하고 있습니다. Btw. 그것이 말하는 라우터 광고를 사용하여 구성받은 내 16.04.3 컴퓨터에 proto static하지를 proto ra그 차이가이 코드에 중요하지 않습니다 불구하고.
kasperd

약간 골프를 치려면 awk '$0=$9" "$9'대신을 사용하십시오 {print$11,$11}. 많은 시스템 (내 Arch 1을 포함)은 9 번째 단어를 사용하므로 11보다 짧
으며이

7

매스 매 티카, 17 바이트

Mathematica에는 모든 것이 내장되어 있습니다

$MachineAddresses

설명서에 설명 된 대로이 기본 제공 명령은 장치와 관련된 모든 IP 주소 (로컬 및 외부 모두)를 나열합니다.


이 문서에는 외부 주소에 대한 언급이 없습니다.
kasperd

이 명령은 또한 IPv6의 주소를 나열하면, 당신은 IPv6의 주소가 예상 된 결과라고 할 수 있습니다
Ferrybig

5
이것은 나를 위해 여러 IP 주소 목록을 생성하지만 그 중 어느 것도 내 외부 주소가 아닌 것 같습니다. 그래도 제대로 해석하지 못할 수도 있습니다. 외부 IP 주소 WolframAlpha["ip address", {{"IPAddress:InternetData", 1}, "ComputableData"}][[1,2]]를 얻을 수는 있지만 더 직접 얻는 방법을 모르겠습니다.
Mark S.

@점수. 이상하다. 명령을 실행할 때 외부 IP 주소를 얻습니다 (마지막 항목이 나타납니다). 그러나 Wolfram Sandbox에서는이 명령이 작동하지 않습니다. 아마도 이것은 버그입니다. 어떤 OS 및 Mathematica 버전을 사용하고 있습니까?
JungHwan Min

@JungHwanMin 11.1.1.0 Student Edition은 IPv6, 192.168.0.104, 그리고 169.254로 시작하는 3 개의 주소라고 가정합니다. 그러나 나의 외부 연설은 69로 시작합니다.
Mark S.

6

AutoIt, 56 53 바이트

#include<Inet.au3>
ConsoleWrite(@IPAddress1&_GetIP())

@IPAddress1 반환하는 매크로입니다

첫 번째 네트워크 어댑터의 IP 주소

_GetIP() 보고

공개 IP 주소


@ mınxomaτ 덕분에 -3 바이트


3
Neat, 동료 AutoIt (IT 아님) -er. 이 코드에서 공백을 삭제할 수 있습니다.
mınxomaτ

@ mınxomaτ 수정 해 주셔서 감사합니다 :)
Daniel

6

C #을 196 194 188 163 바이트

namespace System.Net.Sockets{using Linq;_=>Dns.GetHostEntry("").AddressList.First(i=>(int)i.AddressFamily==2)+" "+new WebClient().DownloadString("http://eth0.me")}

@Xynos 덕분에 2 바이트가 절약되었습니다.
@Nick 덕분에 25 바이트를 절약했습니다.

풀 / 포맷 버전 :

namespace System.Net.Sockets
{
    using Linq;

    class P
    {
        static void Main()
        {
            Func<object, string> f = _ =>
                Dns.GetHostEntry(Dns.GetHostName())
                    .AddressList
                    .First(i => (int)i.AddressFamily == 2) + " " + new WebClient().DownloadString("http://eth0.me");

            Console.WriteLine(f(null));

            Console.ReadLine();
        }
    }
}

== 주위의 공백을 제거하여 두 바이트를 저장할 수 없습니다.
MysticVagabond

@Xynos 물론, 그것을 제거하지 않았다는 것을 몰랐습니다.
TheLethalCoder

골프 버전은 컴파일되지 않으며 독립형 기능이 아닙니다. 독립형 함수를 Sockets 네임 스페이스를 사용하는 바로 가기와 혼합하는 것은 공정하지 않은 것 같습니다. 따라서 하나의 옵션을 선택하고 함께 진행하는 것이 좋습니다. 즉, 주조하여 일부 바이트를 저장할 수 있습니다 말했다 i.AddressFamily으로 int대신 캐스팅 2AddressFamily, 당신은 대체 할 수있는 Dns.GetHostName()빈 문자열.
Nick

@ Nick 기회가 생기면 namespaceC #에 대한 트릭이 상당히 일반적입니다. 당신이 그것을 허용해서는 안된다고 생각한다면 그것에 대해 메타에 게시 할 수 있지만 현재는 공정한 게임이며 usings 를 단축하는 깔끔한 트릭입니다 .
TheLethalCoder

6

PowerShell v4 +, 40 36 바이트

NetIPAddress|% IPA*
iwr eth0.me|% C*

(Server 2012 R2 이상 또는 Windows 8.1 이상에서만 작동합니다. TIO에서는 작동하지 않습니다.)

주석에 정확히 말한 것을 수행합니다. 로컬 네트워크 IP 주소를 IPA가져와 해당 주소 부분 만 선택합니다 (예 : 서브넷 마스크, 게이트웨이 등을 필터링).

두 번째는가 Invoke-WebRequesthttp://eth0.me있는 간단히 얻을 Content를 그; 즉, 공개 IP 주소입니다.


언 골프 버전 :

(Get-NetIPAddress).IPAddress
(Invoke-WebRequest eth0.me).content

익명의 사용자가 제거를 제안합니다Get-
Stephen

@StepHen 참으로. 잘 작동합니다.
AdmBorkBork

4

유닉스 쉘 + stunclient , 40 바이트

stunclient stun.vo.lu|cut -d: -f2|sed 1d

STUN 프로토콜을 사용 합니다 .

STUN (Session Traversal Utilities for NAT)은 NAT (Network Address Translator) 순회를 처리 할 때 다른 프로토콜을위한 도구 역할을하는 프로토콜입니다. 엔드 포인트가 NAT에 의해 할당 된 IP 주소 및 포트를 판별하기 위해 사용할 수 있습니다.

STUN 서버 이름은 Public STUN 서버 목록에 있습니다.

출력 형식은 다음과 같습니다.

 LOCAL IPV4 ADDRESS
 PUBLIC IPV4 ADDRESS

두 줄 모두 단일 공백으로 들여 쓰기되지만 출력 규칙이 작성된대로 위반되지는 않습니다.

샘플 출력 :

  192.168.1.100    
  209.85.233.147

4

컬 (bash one-liner) : 27 바이트

curl -w%{local_ip} eth0.me

결과가 인쇄 stdout되고 다음과 같습니다.

1.2.3.4
192.168.0.10
# no trailing newline, use "curl -w%{local_ip}\\n eth0.me" for it

curl 버전 7.29.0 이상이어야합니다 (2013 년 2 월 6 일부터).

답변은 /codegolf//a/139538/66016을 기반으로 합니다.


4

Go, MacOS 전용, 10 바이트

macOS에서는이 killswitch를 사용할 수 있으며 현재 개인 활성 IP 및 공용 IP를 인쇄 할 수 있습니다.

$ killswitch 
Interface  MAC address         IP
en1        bc:34:36:d2:81:ba   192.168.2.10

Public IP address: 179.43.176.99

No VPN interface found, verify VPN is connected

이 도구는 기본 제공 도구는 아니지만 적절한 IP를 찾는 프로세스를 단순화하려고합니다.

다음과 같은 명령을 사용하여 출력을 얻을 수 있습니다.

$ route get 0.0.0.0

$ ifconfig | pcregrep -M -o '^[^\t:]+:([^\n]|\n\t)*status: active'

$ networksetup -listnetworkserviceorder

$ scutil --dns

공개 IP :

$ dig o-o.myaddr.l.google.com @ns.google.com txt +short

2
안녕! PPCG에 오신 것을 환영합니다! 이 질문은 code-golf 태그로 지정 됩니다. 골프 코드에 언어와 바이트 수를 제공 할 수 있습니까?
Stephen

3

PowerShell v3 + (Windows 7+에 대한 대체 답변)

((ipconfig) -match "v4").split(":")[1]
Invoke-RestMethod eth0.me

2
PPCG에 오신 것을 환영합니다!
Stephen

1
주변의 공백을 제거하여 -match몇 바이트를 저장할 수 있습니다 .
AdmBorkBork

3

Bash + Awk + Curl, 43 바이트

Mac 및 Linux 용 내장 도구 만 사용

ifconfig|awk '/bro/{print $2}';curl eth0.me

1
* bash 당신은 의미합니다.
Suici Doga

bash + awk + curl
Alex Nikiforov

bash는 macos뿐만 아니라 Linux 노트북에서도 작동하기 때문에 bash라고하는 질문을 편집했습니다
Suici Doga

thx, bash는 쉘 자체이기 때문에 개선되었습니다 (tcsh, sh 및 기타 쉘에서 작동해야 함). ifconfig, awk 및 curl도 필요합니다.
Alex Nikiforov

1
이것은 "MacOS / Linux"가 아니라 Bash입니다. 그렇게 표시하십시오.
LyricLy

2

파이썬 3 124 133 바이트

from urllib2 import urlopen
import socket
a=urlopen('http://eth0.me').read()
b=socket.gethostbyname(socket.gethostname())
print a,b

당신은 또한 필요하지 print a,b않습니까? 흥미롭게도 이것은 내 시스템 (Win7)에서 두 개의 IP를 출력하지만 그중 어느 것도 내 실제 로컬 IP 주소가 아닙니다. b실제로 내 로컬 영역 연결이 아닌 가상 어댑터의 IP입니다 .
Octopus

그럼에도 불구하고, 그것은 여전히 로컬 IP 주소 입니다. 나는 그것에 대한 설명을 요청하기 위해 질문에 대한 의견을 남겼습니다.
Octopus

@Octopus 당신은 인쇄에 대해 옳습니다, 업데이트
Teo

제안 된 편집에서 @David는 이것을 제안했습니다 : 113 bytes ( Review here )
Stephen

2

Node.js를 (자바 스크립트) 224 223 194 175 173 130 바이트

r=require,l=console.log,r('dns').lookup(r('os').hostname(),(a,b)=>l(b));r('http').get('http://eth0.me',a=>a.on('data',c=>l(c+"")))

언 골프 버전 :

require('dns').lookup(require('os').hostname(), (err, loc, fam) => console.log(loc));
require('http').get('http://eth0.me', res => {
    res.on('data', chunk => console.log(chunk + ""));
});

  • 1 바이트를 저장했습니다 (불필요한 세미콜론으로 인해).
  • @AndrewLi (더 짧은 코드에 사용되는 화살표 기능) 덕분에 29 바이트가 절약 되었습니다.
  • @MiniGod 덕분에 19 바이트가 절약되었습니다 ( .get()대신 사용됨 .request()- .end();제거됨).
  • @ Zacharý 덕분에 2 바이트가 절약되었습니다 (화살표 함수의 고독 매개 변수는 괄호가 필요하지 않습니다).
  • @Birjolaxew 덕분에 43 바이트를 저장 했습니다 (저장 requireconsole.log단일 문자 변수로 url을으로 직접 전달 require('http').get하고 data이벤트 에서 직접 출력을 기록함 ).

더 짧은 코드에 화살표 기능을 사용할 수 없습니까?
Andrew Li

@AndrewLi 감사합니다. :)

.get()대신 사용할 수 있습니다 .request(). 그런 다음도 필요하지 않습니다 .end();.
MiniGod

1
화살표 함수의 고독 매개 변수 주위에 괄호가 필요하지 않습니다. ( (a)=>=> a=>), IIRC.
Zacharý

1
@AndrewLi 흠, 문제는 코드가 REPL에서 실행될 때 질문에 금지 된 추가 정보 (예 : 요청 정보)를 인쇄한다는 것입니다. 이 출력을 숨기려면 추가 코드를 추가 할 수 있지만 require호출 을 종료하여 발생하는 바이트 감소를 막을 수 있으므로 지금은 그대로 두겠습니다. 어쨌든 제안에 감사드립니다.

1

Windows의 배치 파일 , 116 바이트

@for /f "tokens=1-2 delims=:" %%a in ('ipconfig^|find "v4"')do @echo%%b
@powershell -Command "(iwr eth0.me).content"

첫 번째 줄은 실행 결과를 반복 ipconfig하여 로컬 IPv4 주소를 얻습니다.

퍼블릭 IP 부분의 경우, 필자가 아는 한 배치 스크립트 만 사용하여 머신의 퍼블릭 IP를 얻을 수있는 방법이 없기 때문에 놀라운 Powershell 답변 에서 약간 훔쳐 야했습니다 .

우리는 @부호로 시작 하여 프롬프트의 에코를 억제하고 ( C:\...\path>) Powershell 명령 Invoke-WebRequest(별명으로 iwr) 을 실행하고 그 content일부를 추출합니다 .

나는 배치를 사용 하지(...).content 않고 대신 명령을 실행하고 완전한 출력에서 ​​실제 정보를 추출하는 것으로 실험했습니다 . 그러나 그것은이 솔루션보다 길다는 것이 입증되었으므로 계속 유지했습니다.

Windows 10.0.15063에서 테스트되었습니다.


1

R, 142 , 140 , 137 바이트

library(magrittr);system("ipconfig",int=T)%>%regmatches(.,regexpr("v4.+",.))%>%{a=nchar(.);substr(.,a-14,a)};readLines("http://eth0.me")

win10 및 R (3.4.1)에서 테스트되었습니다.
URL이 짧은 @ Bruce-Forte에 감사드립니다.

언 골프 버전 :

library(magrittr)
system("ipconfig",int=T) %>% 
     regmatches(.,regexpr("v4.+",.)) %>% 
      {a <- nchar(.)
       substr(., a - 14, a)}
readLines("http://eth0.me")


@BLT 좋은 해결책. 다음 a <- nchar(x)과 같이 바꾸면 3 바이트를 절약 할 수 있습니다.a=nchar(x)
AndriusZ

@AndruisZ 감사합니다, 그러나 그것은 정말로 당신의 해결책입니다.
BLT

1

파이썬 2.7.13 128 바이트

print __import__("urllib").urlopen("http://eth0.me").read(),__import__("socket").gethostbyname(__import__("socket").getfqdn())

1

배쉬 + 컬, 24 바이트

hostname -i;curl eth0.me

매뉴얼 페이지에서 : " 이 옵션은 모든 네트워크 인터페이스에서 구성된 모든 주소를 열거합니다. [...] 출력 순서에 대해 어떤 가정도하지 마십시오."
ბიმო

-I (자본)가 -i (소문자) 와 다른 용도로 사용 되지 않습니다 . 인용 한 비트는 -I 섹션 에서 가져온 것 입니다.
아마

사실, 미안합니다. 그러나 더 나쁘게도 " 이 옵션을 사용하지 마십시오 "라고 말하면 이것이 작동하지 않습니다 (적어도 내 컴퓨터에서는).
ბიმო

물론, 게시하기 전에 전체 문서를 읽지 않았습니다. 이상하게도 내 컴퓨터 중 일부에서 제대로 작동하는 것 같습니다. 그러나 이러한 불일치로 인해이 솔루션을 신뢰할 수 없게 만들 수 있습니다.
아마

1

MS-SQL, 59 바이트

SELECT TOP 1 local_net_address
FROM sys.dm_exec_connections

쿼리를 실행하는 SQL 인스턴스의 클라이언트 쪽 IP 주소를 반환합니다.


0

VBA, 58 바이트

으악, 로컬 주소를 처리하지 않습니다-수정 진행 중

참고 : 용도에 참조

Microsoft Internet Controls

Internet Explorer 창을 통해 입력하지 않고 사용자의 IP 주소를 출력하는 익명 VBE 즉시 창 기능

Set i=New InternetExplorer:i.Visible=1:i.Navigate"eth0.me"
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.