C 프로그래밍 언어와 C++, C# 등 로컬 영역에서 동작하는 프로그램으로는 자신의 외부 아이피를 확인 할 수 없습니다. 특히 공유기를 이용하고 있고 사설 아이피로 IP를 할당 받았다면 더더욱 알수 없죠.
기껏 알수 있는 아이피는 192.168.0.1 수준의 사설 아이피뿐입니다.
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# 프로그램으로 제작해보았습니다.
아래는 제가 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;
}
}
}
외부 IP를 잘 가져오는군요.
저는 이렇게 외부 IP를 자동으로 가져와서 ESXi 방화벽에 자동추가하는 시스템을 만들고 있습니다.
외부 어느지역에서도 ESXi 서버에 자유롭게 자동으로 접속하기 위한 시스템이죠.
방화벽으로 특정 IP만 접속 할 수 있도록 만들고 위의 프로그램으로 1분동안 접속 가능하도록 만들고 있습니다.
노트북을 끄는 순간 1분후에 자동으로 제가 사용하던 IP도 차단이 되는 시스템이죠.
보안으로 인해서 작년 말부터 고생을 하고 있어 이부분을 확실히 하고 있습니다.
보안이 필요하신 분들 계시면 말씀주세요.
목차