[.Net] ๋คํธ์ํฌ ์ด๋ํฐ IP์ฃผ์์ ๊ณ ๊ธ ์์ฑ ๋ณ๊ฒฝํ๊ธฐ(์์ ํฌํจ)
๋คํธ์ํฌ ์ด๋ํฐ IP ์ฃผ์์ ๊ณ ๊ธ ์์ฑ
๋จธ์ ๋น์ ์์ GigE ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํ ๋คํธ์ํฌ ์ค์ ์ ํ์์ ๋๋ค. ์นด๋ฉ๋ผ ์ฐ๊ฒฐ ๋ฐ ๊ด๋ฆฌ๋ฅผ ์ํ ๊ณ ์ IP ์ฃผ์ ์ค์ ์ ๋ฌผ๋ก ์ด๊ณ , ์ํํ ๋ฐ์ดํฐ ์คํธ๋ฆฌ๋ฐ์ ์ํ ์์ฑ ์ค์ ๋ฐ ํํฐ ๋๋ผ์ด๋ฒ(Filter Driver) ์ค์น๋ ๊ผญ ํ์ํ์ฃ .
์ค์ ์ด ํ์ํ ๋คํธ์ํฌ ์์ฑ์ ์ผ๋ฐ์ ์ผ๋ก ๋ค์์ ๋ค ๊ฐ์ง๊ฐ ์์ต๋๋ค.
- ์ ๋ณด ํจํท(Jumbo Packet)
- ์์ ๋ฒํผ(Receive Buffers)
- ์ ์ก ๋ฒํผ(Transmit Buffers)
- ์ธํฐ๋ฝํธ ์กฐ์ ์๋(Interrupt Moderation Rate)
๊ฐ ๋คํธ์ํฌ ์์ฑ์ ์๋ฏธ๋ ์๋ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ์ธ์.
[GigE Interface] GigE๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํ ์ค๋น Part 2.
๊ทธ๋์ IP ์ฃผ์๋ฅผ ๋น๋กฏํ์ฌ, ์์์ ์ธ๊ธํ ์์ฑ์ ์ฝ๋์์ ์ ๊ทผํ๊ธฐ ์ํด์๋ ์ด๋ป๊ฒ ํด์ผ ํ๋์ง ๋ณธ๋ฌธ์์ ๋ค๋ค๋ณด๊ฒ ์ต๋๋ค.
1. ๋คํธ์ํฌ IP ์ฃผ์์ ์๋ธ๋ท ๋ง์คํฌ ์ป๋ ๋ฐฉ๋ฒ
์์คํ
์ ์กด์ฌํ๋ ๋คํธ์ํฌ ์ด๋ํฐ์ ๋ชฉ๋ก๊ณผ IP ์ฃผ์ ๊ทธ๋ฆฌ๊ณ ์๋ธ๋ท ๋ง์คํฌ๋ฅผ ์ป๋ ๋ฐฉ๋ฒ์
๋๋ค. System.Net.NetworkInformation
๋ค์์คํ์ด์ค ์ถ๊ฐํ์ฌ ๊ฐ๋จํ๊ฒ ์ด๋ํฐ์ ์ ๋ณด๋ฅผ ์ป์ ์ ์์ต๋๋ค.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net.NetworkInformation; //NetworkInformation ๋ค์์คํ์ด์ค ์ถ๊ฐ
namespace ExamNetwork
{
class Program
{
static void Main(string[] args)
{
//๋ชจ๋ ๋คํธ์ํฌ ์ธํฐํ์ด์ค ์ป๊ธฐ
foreach (var network in NetworkInterface.GetAllNetworkInterfaces())
{
//IPv4๋ฅผ ์ง์ํ๋ ๋คํธ์ํฌ ํ์ธ
if (network.Supports(NetworkInterfaceComponent.IPv4) == true)
{
//์ด๋๋ท ํ์
ํ์ธ
if (network.NetworkInterfaceType == NetworkInterfaceType.Ethernet)
{
//IP ์์ฑ ์ป๊ธฐ
IPInterfaceProperties properties = network.GetIPProperties();
//Unicast ์ฃผ์๊ฐ ํ ๋น๋ ip ์ป๊ธฐ
foreach (UnicastIPAddressInformation uniIp in network.GetIPProperties().UnicastAddresses)
{
if (uniIp.Address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
{
string ipAddress = uniIp.Address.ToString();
string subNetMask = uniIp.IPv4Mask.ToString();
Console.WriteLine("======================================");
Console.WriteLine($"Name: {network.Name}");
Console.WriteLine($"Description: {network.Description}");
Console.WriteLine($"Type: {network.NetworkInterfaceType}");
Console.WriteLine($"IP: {ipAddress}");
Console.WriteLine($"Subnetmask: {subNetMask}");
}
}
}
}
}
Console.ReadLine();
}
}
}
์ฝ๋๊ฐ ๋๋ฌด ๊ฐ๋จํด์ ๊ทธ๋ค์ง ์ค๋ช ํ ๊ฒ์ด ์์ต๋๋ค. ์คํ ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ ์์ ๋ ์๋ ์ฒจ๋ถ๋ ํ์ผ์ ์ฐธ๊ณ ํ์ธ์.
2. ๋คํธ์ํฌ์ IP ์ฃผ์์ ์๋ธ๋ท ๋ง์คํฌ ์ค์ ํ๋ ๋ฐฉ๋ฒ
์ ๋ฐฉ๋ฒ์ผ๋ก IP์ฃผ์๋ฅผ ์ค์ ํ ์ ์์ผ๋ฉด ์ข๊ฒ ์ง๋ง ์ค์ ๊ธฐ๋ฅ์ ์ง์ํ์ง ์์ต๋๋ค. ๊ทธ๋์ IP ์ฃผ์๋ฅผ ์ค์ ํ๊ธฐ ์ํด์๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ์ฌ์ฉํด์ผ ํฉ๋๋ค. ๋ฐ๋ก WMI ํด๋์ค
๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์
๋๋ค.
WMI
๋ Windows Management Instrumentation์ผ๋ก, ์๋์ฐ ์ด์์ฒด์ ์ ์์คํ
์์์ ๊ด๋ฆฌํ ์ ์๋ ์งํฉ์
๋๋ค. ๋คํธ์ํฌ ์ด๋ํฐ์ IP ์ฃผ์์ ์๋ธ๋ท ๋ง์คํฌ๋ฅผ ์ค์ ํ๊ธฐ ์ํด, WMI ํด๋์ค์ธ Win32_NetworkAdapterConfiguration
๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์
๋๋ค.
์ด ํด๋์ค๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ System.Management
์ด์
๋ธ๋ฆฌ๋ฅผ ์ถ๊ฐํด์ผ ํฉ๋๋ค.
์ฝ๋๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ์ฐธ๊ณ ๋ก, ๋น์ฃผ์ผ ์คํ๋์ค ๋๋ ์คํ ํ๋ก๊ทธ๋จ์ ๊ด๋ฆฌ์ ๊ถํ
์ผ๋ก ์คํํด์ผ ์ค์ ์ด ๊ฐ๋ฅํฉ๋๋ค.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Management; //Managemnet ๋ค์์คํ์ด์ค ์ถ๊ฐ
namespace ExamNetwork
{
class Program
{
static void Main(string[] args)
{
//Win32_NetworkAdapterConfiguration class ์ป๊ธฐ
ManagementClass management = new ManagementClass("Win32_NetworkAdapterConfiguration");
ManagementObjectCollection networks = management.GetInstances();
foreach (ManagementObject network in networks)
{
//๋คํธ์ํฌ ์ด๋ํฐ์ ์ด๋ฆ๊ณผ ์ค๋ช
์ป๊ธฐ
var description = network["Description"];
var caption = network["Caption"];
//EnableStatic Method ์ป๊ธฐ
var objStatic = network.GetMethodParameters("EnableStatic");
//์๋ก ์ง์ ํ IP ์ฃผ์์ ์๋ธ๋ท ๋ง์คํฌ ์ง์ ํ๊ธฐ
objStatic["IPAddress"] = new string[] { "192.168.10.1" };
objStatic["SubnetMask"] = new string[] { "255.255.255.0" };
//EnableStatic Method์ ํ๋ผ๋ฏธํฐ๋ฅผ ๋๊ฒจ ๊ฒฐ๊ณผ ๋ฐํ ๋ฐ๊ธฐ
var result = (uint)network.InvokeMethod("EnableStatic", objStatic, null)["returnValue"];
if (result != 0)
Console.WriteLine("IP ์ค์ ์คํจ.");
}
Console.ReadLine();
}
}
}
์ค์ ์ด ํ์ํ ๋คํธ์ํฌ ์ด๋ํฐ ์ด๋ฆ์ ํ์ธํ ํ IP ์ฃผ์์ ์๋ธ๋ท ๋ง์คํฌ๋ฅผ ์ค์ ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์๋์ ๊ฐ์ด ํ์ธํ ์ ์์ต๋๋ค.
์ ์์ ๋ ์๋ ์ฒจ๋ถ๋ ํ์ผ์ ์ฐธ๊ณ ํ์ธ์.
ํนํ, ์ด ๋ถ๋ถ์ ์๋ ๋ง์ดํฌ๋ก์ํํธ ๋ฌธ์๋ฅผ ์ฐธ๊ณ ํ๋ฉด ๋์์ด ๋ฉ๋๋ค.
3. ๋คํธ์ํฌ ์ด๋ํฐ ๊ณ ๊ธ ์ค์ ๋ณ๊ฒฝํ๊ธฐ
์ฌ์ค ์ด ๋ถ๋ถ์ ์ฐพ๊ธฐ๊ฐ ๊ฐ์ฅ ๊น๋ค๋ก์ ์ต๋๋ค. ์ ๋ณด ํจํท(MTU), ์์ ๋ฒํผ, ์ ์ก ๋ฒํผ ๋ฑ๊ณผ ๊ฐ์ ๊ณ ๊ธ ์ค์ ์ ๋ณ๊ฒฝํ๊ณ ์ถ์๋ฐ, ์ ๊ณตํ๋ ํจ์๋ฅผ ๋์ ํ ์ฐพ์ ์ ์๋๊ตฐ์. ๊ทธ๋ฐ๋ฐ ์๊ณ ๋ณด๋ ์์ฃผ ์ฌ์ด ๋ฐฉ๋ฒ์ด ์์์ต๋๋ค. ๋ฐ๋ก, ๋ ์ง์คํธ๋ฆฌ๋ฅผ ๋ณ๊ฒฝํ๋ ๊ฒ์ด์ฃ .
๋ ์ง์คํธ๋ฆฌ ํธ์ง๊ธฐ์์ ์๋ ๊ฒฝ๋ก๋ก ์ด๋ํ๋ฉด, ์์คํ ์ ์กด์ฌํ๋ ๋คํธ์ํฌ ๋ชฉ๋ก๊ณผ ์ค์ ๊ฐ์ ํ์ธํ ์ ์์ต๋๋ค.
1. Win + R > regedit //๋ ์ง์คํธ๋ฆฌ ํธ์ง๊ธฐ
2. ์์ > ๋ ์ง์คํธ๋ฆฌ ํธ์ง๊ธฐ ์คํ
//๋คํธ์ํฌ ์ด๋ํฐ ๋ชฉ๋ก ์์น
์ปดํจํฐ\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4d36e972-e325-11ce-bfc1-08002be10318}
๋คํธ์ํฌ ์ด๋ํฐ์ ์ฃผ์ ์ค์ ์ด๋ฆ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
ํญ๋ชฉ | ์ด๋ฆ |
Jumbo Packet(์ ๋ณด ํจํท) | *JumboPacket |
Receive Buffers(์์ ๋ฒํผ) | *ReceiveBuffers |
Transmit Buffers(์ ์ก ๋ฒํผ) | *TransmitBuffers |
Interrupt Moderation(์ธํฐ๋ฝํธ ์กฐ์ ) | *InterruptModeration |
Interrupt Moderation Rate(์ธํฐ๋ฝํธ ์กฐ์ ์๋) | ITR |
์ฆ, ์ค์ ์ด ํ์ํ ๋คํธ์ํฌ ์ด๋ํฐ๋ฅผ ์ฐพ์์ ํด๋น ์์น์ ํค(Key) ๊ฐ(Value)์ ๋ณ๊ฒฝํ๋ฉด ๋๋ ๊ฒ์
๋๋ค. ์์ฃผ ๊ฐ๋จํ์ฃ ? ์ด ๋ฐฉ๋ฒ๋ ๋น์ฃผ์ผ ์คํ๋์ค ๋๋ ํ๋ก๊ทธ๋จ์ ๊ด๋ฆฌ์ ๊ถํ
์ผ๋ก ์คํํด์ผ ํฉ๋๋ค.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Win32; //Win32 ๋ค์์คํ์ด์ค ์ถ๊ฐ
namespace ExamNetwork
{
class Program
{
static void Main(string[] args)
{
string network_registry = @"SYSTEM\CurrentControlSet\Control\Class\{4d36e972-e325-11ce-bfc1-08002be10318}";
//๋ ์ง์คํธ๋ฆฌ ์ด๊ธฐ
RegistryKey regNetwork = Registry.LocalMachine.OpenSubKey(network_registry, false);
//ํ์ ํค ์ด๋ฆ ์ป๊ธฐ
var adapters = regNetwork.GetSubKeyNames();
foreach (var adapter in adapters)
{
//์ด๋ํฐ์ ๋ ์ง์คํธ๋ฆฌ ์ป๊ธฐ
RegistryKey regAdapter = Registry.LocalMachine.OpenSubKey(network_registry + "\\" + adapter, true);
//์ด๋ํฐ์ ์ด๋ฆ ์ป๊ธฐ
string deviceInstanceID = regAdapter.GetValue("DriverDesc").ToString();
//์ ๋ณด ํจํท ๊ฐ ์ฝ๊ธฐ
var value = Convert.ToInt32(regAdapter.GetValue("*JumboPacket"));
//์ ๋ณด ํจํท ๊ฐ ์ฐ๊ธฐ
regAdapter.SetValue("*JumboPacket", "9014", RegistryValueKind.String);
}
Console.ReadLine();
}
}
}
์ ์์ ์ฝ๋๋ ์ ๋ณด ํจํท์ ํ์ธํ๊ณ , ๊ฐ์ 9014๋ก ์ค์ ํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค. ๋ค๋ฅธ ์ค์ ๊ฐ๋ ์์ ๊ฐ์ด ์ ์ฉํ๋ฉด ์ค์ ๊ฐ ๋ณ๊ฒฝ์ด ๊ฐ๋ฅํฉ๋๋ค.
์ ์์ ๋ ์๋ ์ฒจ๋ถ๋ ํ์ผ์ ์ฐธ๊ณ ํ์ธ์.
์ ๋ฆฌ
์์์ ๋ณด์ฌ์ค ์ธ ๊ฐ์ง ๋ฐฉ๋ฒ์ ์กฐํฉํ๋ฉด ๋คํธ์ํฌ ๋ชฉ๋ก์ ํ์ธํ๊ณ , IP ์ฃผ์์ ๊ณ ๊ธ ์ค์ ์ ์ํ๋ ๋๋ก ๋ณ๊ฒฝํ ์ ์๋ ๋์์ ๊ตฌํํ ์ ์์ต๋๋ค.
'Programming > .Net' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋๊ธ
์ด ๊ธ ๊ณต์ ํ๊ธฐ
-
๊ตฌ๋
ํ๊ธฐ
๊ตฌ๋ ํ๊ธฐ
-
์นด์นด์คํก
์นด์นด์คํก
-
๋ผ์ธ
๋ผ์ธ
-
ํธ์ํฐ
ํธ์ํฐ
-
Facebook
Facebook
-
์นด์นด์ค์คํ ๋ฆฌ
์นด์นด์ค์คํ ๋ฆฌ
-
๋ฐด๋
๋ฐด๋
-
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
-
Pocket
Pocket
-
Evernote
Evernote
๋ค๋ฅธ ๊ธ
-
[C#] WinForm์ Form ๋์์ด๋๊ฐ ์ฌ๋ผ์ง๋ ๋ฌธ์ ํด๊ฒฐ ๋ฐฉ๋ฒ
[C#] WinForm์ Form ๋์์ด๋๊ฐ ์ฌ๋ผ์ง๋ ๋ฌธ์ ํด๊ฒฐ ๋ฐฉ๋ฒ
2022.10.25 -
[.Net] ์ด๋ฏธ์ง ๋ทฐ์ด๋ ImageGlass๋ก ์ฝ๊ฒ ๊ฐ๋ฐํ๊ธฐ
[.Net] ์ด๋ฏธ์ง ๋ทฐ์ด๋ ImageGlass๋ก ์ฝ๊ฒ ๊ฐ๋ฐํ๊ธฐ
2022.08.13 -
[ASP.NET] ์๋๋ก์ง ๋์ปค(Docker)์์ ์ ๋ ๋์(Selenium) ์๋น์ค ๋ง๋๋ ๋ฐฉ๋ฒ
[ASP.NET] ์๋๋ก์ง ๋์ปค(Docker)์์ ์ ๋ ๋์(Selenium) ์๋น์ค ๋ง๋๋ ๋ฐฉ๋ฒ
2022.05.28 -
[ASP.NET] Core Worker Service๋ก ๋ ๋๋ง์ธ ์ผ๊ฐ์ ์๋๋ก์ง ์ฑ ๋ฉ์์ง๋ก ์๋ฆผ ๋ณด๋ด๊ธฐ
[ASP.NET] Core Worker Service๋ก ๋ ๋๋ง์ธ ์ผ๊ฐ์ ์๋๋ก์ง ์ฑ ๋ฉ์์ง๋ก ์๋ฆผ ๋ณด๋ด๊ธฐ
2022.03.04