C 프로그래밍 언어와 C++, C# 등 로컬 영역에서 동작하는 프로그램으로는 자신의 외부 아이피를 확인 할 수 없습니다. 특히 공유기를 이용하고 있고 사설 아이피로 IP를 할당 받았다면 더더욱 알수 없죠.
기껏 알수 있는 아이피는 192.168.0.1 수준의 사설 아이피뿐입니다.
![c# 외부 ip 가져오기 로컬 ipv4 아이피 함수 Function 2 c# externalip, c# ipv4 아이피 확인, c# 내 컴퓨터 아이피 확인, c# 로컬 ipv4, c# 외부 ip 가져오기](https://vlog.tion.co.kr/wp-content/uploads/2023/02/image.png)
C# 외부 로컬 ipv4 아이피를 알기 위해서는 아래 함수를 이용하면 바로 확인 할 수 있습니다.
인터넷이 꼭 연결되어져 있어야 합니다.
public static IPAddress GetExternalIp()
{
string ip = string.Empty;
try
{
string sourceURL = string.Empty;
sourceURL = string.Format("https://api.tion.kr");
WebClient client = new WebClient();
client.Encoding = Encoding.UTF8;
string data = client.DownloadString(string.Format("https://api.tion.kr"));
string pattern = "(<myip>)(?<ip>[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}?)(</myip>)";
MatchCollection matches = Regex.Matches(data, pattern);
foreach (Match match in matches)
{
if (match.Groups["ip"].Length > 0)
{
//IP 정상적으로 나오는지 확인하는부분
//MessageBox.Show(match.Groups["ip"].Value);
ip = match.Groups["ip"].Value;
}
}
}
catch (Exception)
{
}
IPAddress externalIp = IPAddress.Parse(ip);
return externalIp;
}
위의 함수 소스코드는 https://api.tion.kr 사이트에서 제공하고있습니다.
위의 사이트도 제가 직접 만든 사이트입니다.
실제로 C#에서 아이피를 가져와야할 일이 많다보니 2013년부터 만들어서 앞으로 계속 사용하기 위해서 만든거라 개발하실때 만드시더라도 특별한 일 없는이상 위의 도메인을 유지할겁니다.
2017년도에 기간연장 10년치 최고 결재라서 10년치 결재했는데 벌써 4년 남았네요.
2년정도 남았을때 다시 10년 기간 연장 해놓겠습니다.
![c# 외부 ip 가져오기 로컬 ipv4 아이피 함수 Function 3 c# externalip, c# ipv4 아이피 확인, c# 내 컴퓨터 아이피 확인, c# 로컬 ipv4, c# 외부 ip 가져오기](https://vlog.tion.co.kr/wp-content/uploads/2023/02/image-3.png)
직접 C# 프로그램으로 제작해보았습니다.
아래는 제가 C#으로 직접 만든 프로그램 입니다.
c# 외부 ip 가져오기 소스코드
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Net;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace ESXi_IP_Monitoring
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
label_ip.Text = String.Format("{0}", GetExternalIp());
}
public static IPAddress GetExternalIp()
{
string ip = string.Empty;
try
{
string sourceURL = string.Empty;
sourceURL = string.Format("https://api.tion.kr");
WebClient client = new WebClient();
client.Encoding = Encoding.UTF8;
string data = client.DownloadString(string.Format("https://api.tion.kr"));
string pattern = "(<myip>)(?<ip>[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}?)(</myip>)";
MatchCollection matches = Regex.Matches(data, pattern);
foreach (Match match in matches)
{
if (match.Groups["ip"].Length > 0)
{
//IP 정상적으로 나오는지 확인하는 부분
//MessageBox.Show(match.Groups["ip"].Value);
ip = match.Groups["ip"].Value;
}
}
}
catch (Exception)
{
}
IPAddress externalIp = IPAddress.Parse(ip);
return externalIp;
}
}
}
![c# 외부 ip 가져오기 로컬 ipv4 아이피 함수 Function 4 c# externalip, c# ipv4 아이피 확인, c# 내 컴퓨터 아이피 확인, c# 로컬 ipv4, c# 외부 ip 가져오기](https://vlog.tion.co.kr/wp-content/uploads/2023/02/image-1.png)
![c# 외부 ip 가져오기 로컬 ipv4 아이피 함수 Function 5 c# externalip, c# ipv4 아이피 확인, c# 내 컴퓨터 아이피 확인, c# 로컬 ipv4, c# 외부 ip 가져오기](https://vlog.tion.co.kr/wp-content/uploads/2023/02/image-2.png)
외부 IP를 잘 가져오는군요.
저는 이렇게 외부 IP를 자동으로 가져와서 ESXi 방화벽에 자동추가하는 시스템을 만들고 있습니다.
외부 어느지역에서도 ESXi 서버에 자유롭게 자동으로 접속하기 위한 시스템이죠.
방화벽으로 특정 IP만 접속 할 수 있도록 만들고 위의 프로그램으로 1분동안 접속 가능하도록 만들고 있습니다.
노트북을 끄는 순간 1분후에 자동으로 제가 사용하던 IP도 차단이 되는 시스템이죠.
![c# 외부 ip 가져오기 로컬 ipv4 아이피 함수 Function 6 c# externalip, c# ipv4 아이피 확인, c# 내 컴퓨터 아이피 확인, c# 로컬 ipv4, c# 외부 ip 가져오기](https://vlog.tion.co.kr/wp-content/uploads/2023/02/image-4.png)
보안으로 인해서 작년 말부터 고생을 하고 있어 이부분을 확실히 하고 있습니다.
보안이 필요하신 분들 계시면 말씀주세요.
목차