본문 바로가기
공부,일/C# 네트워크

packet 분석기 만들기 (2) HexaViewer , NIC 선택

by fromnothing1 2021. 9. 10.

 

NIC 장치를 선택하는 코드 

using SharpPcap;
using System;
using System.Data;

namespace packat
{
    class Program
    {

        static void Main(string[] args)
        {
            string NICname;
            int itemp;
            ICaptureDevice NIC = null;

            //Console.WriteLine("NIC(랜카드) 장치 숫자  : " + SharpPcap.CaptureDeviceList.Instance.Count.ToString()); 
            itemp = 0;
            foreach (ICaptureDevice item in SharpPcap.CaptureDeviceList.Instance)
            {
                itemp++;
                string Nmae = item.ToString().Split('\n')[1];
                Console.WriteLine("{0}:{1}" ,itemp , Nmae.Substring(Nmae.IndexOf(':') + 1));

            }
            if (0 == itemp)
            {
                Console.WriteLine("검색되는 NIC 가 없어 종료 ");
                return;
            }
            int temp_num;

            for (; ; )
            {
                Console.WriteLine("캡처에 사용할 NIC 를 선택하시오 (1 ~ {0}) : ", itemp);
                temp_num = int.Parse(Console.ReadLine());
                if (temp_num < 0 )
                {
                    continue;
                }
                if (temp_num > itemp)
                {
                    continue;
                }
                NIC = SharpPcap.CaptureDeviceList.Instance[temp_num - 1];
                break;
            }

            Console.WriteLine(NIC);
        }

    }
}

 

HexaViewer ( 헥사 파일프린터 )

using System;
using System.Runtime.CompilerServices;
using SharpPcap;

namespace HexaViewer
{
    class HexaView
    {

        static void DrawHead()
        {
            drawLine();
            Console.Write("ADDRESS  ");
            for (int i = 0; i < 16; i++)
            {
                Console.Write("{0:X02} ", i);
                if (7 == i )
                {
                    Console.Write(" ");
                }
            }
            Console.Write(" ");
            for (int i = 0; i < 16; i++)
            {
                Console.Write("{0:X}", i);
            }


            Console.WriteLine();
            drawLine('-');
        }


        static void drawLine()
        {
            for (int i = 0; i < 75; i++)
            {
                Console.Write("=");
            }
            
            Console.WriteLine();
        }
        static void drawLine(char cChar)
        {
            
            for (int i = 0; i < 75; i++)
            {
                Console.Write(cChar);
            }

            Console.WriteLine();
        }


        public static void Print(byte[] data)
        {


            DrawHead();
            int raw = data.Length / 16;

            for (int i = 0; i < raw; i++)
            {
                Console.Write("{0:X08} ", i*16);
                for (int j = 0; j < 16; j++)
                {
                    Console.Write("{0:X02} ", data[(i*16)+j]);
                    if (j == 7)
                    {
                        Console.Write(" ");
                    }
                }
                Console.Write(" ");
                for (int j = 0; j < 16; j++)
                {
                    if (32 > data[(i * 16) + j] || data[(i * 16) + j] > 127)
                    {
                        Console.Write(".");
                    }
                    else
                    {
                        Console.Write((char)data[(i * 16) + j]);
                    }
                }
                Console.WriteLine();
            }

            // 마지막 줄 예외 처리 
            if (data.Length > raw * 16)
            {
                Console.Write("{0:X08} ", raw * 16);
                for (int i = raw * 16; i < data.Length; i++)
                {
                    Console.Write("{0:X02} ", data[i]);
                    if (i%16 == 7)
                    {
                        Console.Write(" ");
                    }
                }
                Console.Write(" ");
                if (data.Length%16 < 8)
                {
                    Console.Write(" ");
                }
                for (int i = 0; i <(16 - data.Length%16); i++)
                {
                    Console.Write("   ");
                }
                for (int i = raw * 16; i < data.Length; i++)
                {
                    if (32 > data[i] || data[i] > 127)
                    {
                        Console.Write(".");
                    }
                    else
                    {
                        Console.Write((char)data[i]);
                    }
                }
            }
            Console.WriteLine();
            drawLine();
        }

    }
}

 

댓글