Gelişmiş Ağ Tarama ve Yasaklama & DxAntiFirewall

Eratronos

Yazılım Ekibi Asistan
8 Kas 2021
153
69
(LPSTR)"dxeiz.exe";
image-1.png

DxAntiFirewall
Gelişmiş Ağ Tarama ve Yasaklama

Merhabalar, bu sizlere geliştirmiş olduğum bir uygulamayı tanıtacağım. Bu projenin amacı seçtiğiniz sürücüde ki, ağları izlemeniz ve istemediğiniz IP adresinden gelen paketleri yasaklamanızı sağlar. Hadi o zaman çalışma şekline geçelim:


I Kısım


C#:
using SharpPcap         // Version: 4.5.0
using PacketDotNet;     // Version: 0.16.0
using NetFwTypeLib;
      Pcap.Net.x86     // Version: 1.0.4.1


İlk olarak Interface adında bir WinForms oluşturuyoruz ve buraya görseldeki elementleri ekliyoruz:
Screenshot-2.png


List View,
Button













Ardından kodlama kısmına geçiyoruz. LibPcapLiveDevice'ı List şeklinde kullanmamız için kodumuzun üst kısmına ekliyoruz.
C#:
List<LibPcapLiveDevice> libPcapLiveDevices = new List<LibPcapLiveDevice>();

public Interface()
{
    InitializeComponent();
    StartWriting();
}

Sonra ListView'e sürücüleri yazması için bir fonksiyon yazıyoruz.
C#:
private void StartWriting()
{
    LibPcapLiveDeviceList liveDevices = LibPcapLiveDeviceList.Instance;

    foreach (LibPcapLiveDevice liveDevice in liveDevices)
    {
        if (!liveDevice.Interface.Addresses.Exists(before => before != null
                                                   && before.Addr != null
                                                   && before.Addr.ipAddress != null))
            continue;

        var deviceInterface = liveDevice.Interface;
        var friendlyName = liveDevice.Interface?.FriendlyName ?? "Yok";
        var description = liveDevice.Interface?.Description ?? "Yok";
        var macAddress = liveDevice.Interface?.MacAddress?.ToString() ?? "Yok";
        var ipAddress = liveDevice.Interface?.Addresses[0].Addr?.ToString() ?? "Yok";

        libPcapLiveDevices.Add(liveDevice);

        ListViewItem items = new ListViewItem();
        items.Text = friendlyName;
        items.SubItems.Add(description);
        items.SubItems.Add(FormatMacAddress(macAddress));
        items.SubItems.Add(ipAddress);
        listView1.Items.Add(items);
    }
}

Çıktımızı alırken MAC adresinin düzgün bir şekilde görünmesi için küçük bir kod parçası yazıyoruz bu isteğe bağlıdır fakat diğer türlü görüntü olarak benim hoşuma gitmediği için bu şekilde yapıyorum.
C#:
public static string FormatMacAddress(string macAddress)
{
    if (macAddress.Length != 12)
    {
        throw new ArgumentException("ERROR");
    }

    var sb = new StringBuilder();
    for (int i = 0; i < macAddress.Length; i += 2)
    {
        sb.Append($"{macAddress[i]}{macAddress[i + 1]}:");
    }

    sb.Remove(sb.Length - 1, 1);

    return sb.ToString();
}

Son addımlarımız olarak ise ara yüzde yerleşen butona iki kere tıklayarak bizim için bir Click eventi oluşturmasını sağlıyoruz ve içerisine ise bu kodları entegre ediyoruz. Bunun amacı kullanıcının seçtiği sürücün bilgisini ana form'a göndermek ve ana menüye geçiştir.
C#:
private void button1_Click(object sender, EventArgs e)
{
    foreach (ListViewItem item in listView1.SelectedItems)
    {
        Siniffer siniffer = new Siniffer(libPcapLiveDevices, item.Index);
        Hide();
        siniffer.Show();
    }
}


II Kısmı

Screenshot-3.png
Bu kısımda, kodumuzun ana fonksiyonlarını yazacağız. Seçmiş olduğumuz sürücünün içerisinde ki, paketleri görmemiz ve istediğim IP adresini blok lamayı halledeceğiz. Kodlar uzun olduğu için gerekli kısımları anlatacağım kodun tam hale en aşağıda belirleteceğim Github adresimde yer almaktadır.

Önemli olaylarımızdan birisi, listelenen paket listesinin üzerine tıkladığımız zaman hangi protokolümüzü seçtiğimizi anlasın ve ona göre bilgileri versin. Burada kullanacağımız protokoller; TCP, UDP, ARP, ICMP ve IGMP.
C#:
string protocol = e.Item.SubItems[4].Text;
int key = Int32.Parse(e.Item.SubItems[0].Text);
Packet packet;
bool getPacket = keyValuePairs.TryGetValue(key, out packet);

switch (protocol)
{
    case "TCP":
        if (getPacket)
        {
            var pkgTCP = (TcpPacket)packet.Extract(typeof(TcpPacket));

            if (pkgTCP != null)
            {
                int portSrc = pkgTCP.SourcePort;
                int portDst = pkgTCP.SourcePort;
                int checksum = pkgTCP.Checksum;

                listView2.Clear();

                string[] columnHeaders = {
                    "Packet Number",
                    "Type",
                    "Source Port",
                    "Destination Port",
                    "TCP Header Size",
                    "Window Size",
                    "Checksum",
                    "TCP Checksum",
                    "Sequence Number",
                    "Acknowledgment Number",
                    "Urgent Pointer",
                    "ACK Flag",
                    "PSH Flag",
                    "RST Flag",
                    "SYN Flag",
                    "FIN Flag",
                    "ECN Flag",
                    "CWR Flag",
                    "NS Flag"
                    };

                listView2.Columns.Add("Attributes").Width = 125;
                listView2.Columns.Add("Values").Width = 120;

                for (int i = 0; i < columnHeaders.Length; i++)
                {
                    ListViewItem item = new ListViewItem();

                    item.Text = columnHeaders[i];
                    item.SubItems.Add("");

                    listView2.Items.Add(item);
                }

                listView2.Items[0].SubItems[1].Text = key.ToString();
                listView2.Items[1].SubItems[1].Text = "TCP";
                listView2.Items[2].SubItems[1].Text = portSrc.ToString();
                listView2.Items[3].SubItems[1].Text = portDst.ToString();
                listView2.Items[4].SubItems[1].Text = pkgTCP.DataOffset.ToString();
                listView2.Items[5].SubItems[1].Text = pkgTCP.WindowSize.ToString();
                listView2.Items[6].SubItems[1].Text = (checksum.ToString() ?? "none") + (pkgTCP.ValidChecksum ? ", valid" : ", invalid");
                listView2.Items[7].SubItems[1].Text = pkgTCP.ValidChecksum ? "valid" : "invalid";
                listView2.Items[8].SubItems[1].Text = pkgTCP.SequenceNumber.ToString();
                listView2.Items[9].SubItems[1].Text = (pkgTCP.AcknowledgmentNumber.ToString() ?? "none") + (pkgTCP.Ack ? ", valid" : ", invalid");
                listView2.Items[10].SubItems[1].Text = pkgTCP.Urg ? "valid" : "invalid";
                listView2.Items[11].SubItems[1].Text = pkgTCP.Ack ? "1" : "0";
                listView2.Items[12].SubItems[1].Text = pkgTCP.Psh ? "1" : "0";
                listView2.Items[13].SubItems[1].Text = pkgTCP.Rst ? "1" : "0";
                listView2.Items[14].SubItems[1].Text = pkgTCP.Syn ? "1" : "0";
                listView2.Items[15].SubItems[1].Text = pkgTCP.Fin ? "1" : "0";
                listView2.Items[16].SubItems[1].Text = pkgTCP.ECN ? "1" : "0";
                listView2.Items[17].SubItems[1].Text = pkgTCP.CWR ? "1" : "0";
                listView2.Items[18].SubItems[1].Text = pkgTCP.NS ? "1" : "0";
            }
        }
        break;

    case "UDP":
        if (getPacket)
        {
            var pkgUDP = (UdpPacket)packet.Extract(typeof(UdpPacket));
            if (pkgUDP != null)
            {
                int portSrc = pkgUDP.SourcePort;
                int portDst = pkgUDP.SourcePort;
                int checksum = pkgUDP.Checksum;

                listView2.Clear();

                string[] columnHeaders = {
                    "Packet Number",
                    "Type",
                    "Source Port",
                    "Destination Port",
                    "Checksum",
                    "Valid UDP Checksum"
                    };

                listView2.Columns.Add("Attributes").Width = 125;
                listView2.Columns.Add("Values").Width = 120;

                for (int i = 0; i < columnHeaders.Length; i++)
                {
                    ListViewItem item = new ListViewItem();

                    item.Text = columnHeaders[i];
                    item.SubItems.Add("");

                    listView2.Items.Add(item);
                }

                listView2.Items[0].SubItems[1].Text = key.ToString();
                listView2.Items[1].SubItems[1].Text = "UDP";
                listView2.Items[2].SubItems[1].Text = portSrc.ToString();
                listView2.Items[3].SubItems[1].Text = portDst.ToString();
                listView2.Items[4].SubItems[1].Text = checksum.ToString();
                listView2.Items[5].SubItems[1].Text = pkgUDP.ValidUDPChecksum.ToString();
            }
        }
        break;

    case "ARP":
        if (getPacket)
        {
            var pkgARP = (ARPPacket)packet.Extract(typeof(ARPPacket));
            if (pkgARP != null)
            {
                IPAddress ipAddress = pkgARP.SenderProtocolAddress;
                IPAddress targetAddress = pkgARP.TargetProtocolAddress;

                System.Net.NetworkInformation.PhysicalAddress ipHardwareAddress = pkgARP.SenderHardwareAddress;
                System.Net.NetworkInformation.PhysicalAddress targetHardwareAddress = pkgARP.TargetHardwareAddress;

                listView2.Clear();

                string[] columnHeaders = {
                    "Packet Number",
                    "Type",
                    "Hardware Address Length",
                    "Protocol Address Length",
                    "Operation",
                    "Sender Protocol Address",
                    "Target Protocol Address",
                    "Sender Hardware Address",
                    "Target Hardware Address",
                };

                listView2.Columns.Add("Attributes").Width = 125;
                listView2.Columns.Add("Values").Width = 120;

                for (int i = 0; i < columnHeaders.Length; i++)
                {
                    ListViewItem item = new ListViewItem();

                    item.Text = columnHeaders[i];
                    item.SubItems.Add("");

                    listView2.Items.Add(item);

                    listView2.Items[0].SubItems[1].Text = key.ToString();
                    listView2.Items[1].SubItems[1].Text = "ARP";
                    listView2.Items[2].SubItems[1].Text = pkgARP.HardwareAddressLength.ToString();
                    listView2.Items[3].SubItems[1].Text = pkgARP.ProtocolAddressLength.ToString();
                    listView2.Items[4].SubItems[1].Text = pkgARP.Operation.ToString();
                    listView2.Items[5].SubItems[1].Text = ipAddress.ToString();
                    listView2.Items[6].SubItems[1].Text = targetAddress.ToString();
                    listView2.Items[7].SubItems[1].Text = ipHardwareAddress.ToString();
                    listView2.Items[8].SubItems[1].Text = targetHardwareAddress.ToString();
                }
            }
        }
        break;

    case "ICMP":
        if (getPacket)
        {
            var pkgICMP = (ICMPv4Packet)packet.Extract(typeof(ICMPv4Packet));
            if (pkgICMP != null)
            {
                listView2.Clear();

                string[] columnHeaders = {
                    "Packet Number",
                    "Type",
                    "Type Code",
                    "Checksum",
                    "ID",
                    "Sequence Number",
                };

                listView2.Columns.Add("Attributes").Width = 125;
                listView2.Columns.Add("Values").Width = 120;

                for (int i = 0; i < columnHeaders.Length; i++)
                {
                    ListViewItem item = new ListViewItem();

                    item.Text = columnHeaders[i];
                    item.SubItems.Add("");

                    listView2.Items.Add(item);

                    listView2.Items[0].SubItems[1].Text = key.ToString();
                    listView2.Items[1].SubItems[1].Text = "ICMP v4";
                    listView2.Items[2].SubItems[1].Text = "0x" + pkgICMP.TypeCode.ToString("x");
                    listView2.Items[3].SubItems[1].Text = pkgICMP.Checksum.ToString("x");
                    listView2.Items[4].SubItems[1].Text = pkgICMP.ID.ToString("x");
                    listView2.Items[5].SubItems[1].Text = pkgICMP.Sequence.ToString("x");
                }
            }
        }
        break;

    case "IGMP":
        if (getPacket)
        {
            var pkgIGMP = (IGMPv2Packet)packet.Extract(typeof(IGMPv2Packet));
            if (pkgIGMP != null)
            {
                listView2.Clear();

                string[] columnHeaders = {
                    "Packet Number",
                    "Type",
                    "TypeV2",
                    "Group Address",
                    "Max Response Time",
                };

                listView2.Columns.Add("Attributes").Width = 125;
                listView2.Columns.Add("Values").Width = 120;

                for (int i = 0; i < columnHeaders.Length; i++)
                {
                    ListViewItem item = new ListViewItem();

                    item.Text = columnHeaders[i];
                    item.SubItems.Add("");

                    listView2.Items.Add(item);

                    listView2.Items[0].SubItems[1].Text = key.ToString();
                    listView2.Items[1].SubItems[1].Text = "IGMP v2";
                    listView2.Items[2].SubItems[1].Text = pkgIGMP.Type.ToString();
                    listView2.Items[3].SubItems[1].Text = pkgIGMP.GroupAddress.ToString();
                    listView2.Items[4].SubItems[1].Text = pkgIGMP.MaxResponseTime.ToString();
                }
            }
        }
        break;

    default:
        listView2.Clear();
        break;
}

IP adresini engellemek ve bu engeli kaldırmak içinde ilk önce kendi namespace oluşturuyoruz ve main dosyamızda bunu kullanıyoruz.
C#:
private void blockStripMenuItem_Click(object sender, EventArgs e)
{
    if (listView1.SelectedItems.Count > 0)
    {
        string ipToBlock = listView1.SelectedItems[0].SubItems[2].Text;

        Firewall.BlockIP(ipToBlock);
        MessageBox.Show($"{ipToBlock} IP adresi engellendi.");
        LoadFirewallRules();
    }
}

private void unblockStripMenuItem_Click(object sender, EventArgs e)
{
    if (listView1.SelectedItems.Count > 0)
    {
        string ipToBlock = listView1.SelectedItems[0].SubItems[2].Text;

        Firewall.UnblockIP(ipToBlock);
        MessageBox.Show($"{ipToBlock} IP adresin engeli kaldırıldı.");
        LoadFirewallRules();
    }
}


Bu kısımda artık konuyu çok uzatmak ve okuyucuları yormak istemiyorum. Bu yüzden kodun açık kaynak şeklinde paylaşacağım isteyen kişiler geliştirmek veya kullanmak amaçlı kullana bilirler.
 

şıkk

Üye
24 Eki 2023
112
51
image-1.png

DxAntiFirewall
Gelişmiş Ağ Tarama ve Yasaklama

Merhabalar, bu sizlere geliştirmiş olduğum bir uygulamayı tanıtacağım. Bu projenin amacı seçtiğiniz sürücüde ki, ağları izlemeniz ve istemediğiniz IP adresinden gelen paketleri yasaklamanızı sağlar. Hadi o zaman çalışma şekline geçelim:


I Kısım


C#:
using SharpPcap         // Version: 4.5.0
using PacketDotNet;     // Version: 0.16.0
using NetFwTypeLib;
      Pcap.Net.x86     // Version: 1.0.4.1


İlk olarak Interface adında bir WinForms oluşturuyoruz ve buraya görseldeki elementleri ekliyoruz:
Screenshot-2.png


List View,
Button













Ardından kodlama kısmına geçiyoruz. LibPcapLiveDevice'ı List şeklinde kullanmamız için kodumuzun üst kısmına ekliyoruz.
C#:
List<LibPcapLiveDevice> libPcapLiveDevices = new List<LibPcapLiveDevice>();

public Interface()
{
    InitializeComponent();
    StartWriting();
}

Sonra ListView'e sürücüleri yazması için bir fonksiyon yazıyoruz.
C#:
private void StartWriting()
{
    LibPcapLiveDeviceList liveDevices = LibPcapLiveDeviceList.Instance;

    foreach (LibPcapLiveDevice liveDevice in liveDevices)
    {
        if (!liveDevice.Interface.Addresses.Exists(before => before != null
                                                   && before.Addr != null
                                                   && before.Addr.ipAddress != null))
            continue;

        var deviceInterface = liveDevice.Interface;
        var friendlyName = liveDevice.Interface?.FriendlyName ?? "Yok";
        var description = liveDevice.Interface?.Description ?? "Yok";
        var macAddress = liveDevice.Interface?.MacAddress?.ToString() ?? "Yok";
        var ipAddress = liveDevice.Interface?.Addresses[0].Addr?.ToString() ?? "Yok";

        libPcapLiveDevices.Add(liveDevice);

        ListViewItem items = new ListViewItem();
        items.Text = friendlyName;
        items.SubItems.Add(description);
        items.SubItems.Add(FormatMacAddress(macAddress));
        items.SubItems.Add(ipAddress);
        listView1.Items.Add(items);
    }
}

Çıktımızı alırken MAC adresinin düzgün bir şekilde görünmesi için küçük bir kod parçası yazıyoruz bu isteğe bağlıdır fakat diğer türlü görüntü olarak benim hoşuma gitmediği için bu şekilde yapıyorum.
C#:
public static string FormatMacAddress(string macAddress)
{
    if (macAddress.Length != 12)
    {
        throw new ArgumentException("ERROR");
    }

    var sb = new StringBuilder();
    for (int i = 0; i < macAddress.Length; i += 2)
    {
        sb.Append($"{macAddress[i]}{macAddress[i + 1]}:");
    }

    sb.Remove(sb.Length - 1, 1);

    return sb.ToString();
}

Son addımlarımız olarak ise ara yüzde yerleşen butona iki kere tıklayarak bizim için bir Click eventi oluşturmasını sağlıyoruz ve içerisine ise bu kodları entegre ediyoruz. Bunun amacı kullanıcının seçtiği sürücün bilgisini ana form'a göndermek ve ana menüye geçiştir.
C#:
private void button1_Click(object sender, EventArgs e)
{
    foreach (ListViewItem item in listView1.SelectedItems)
    {
        Siniffer siniffer = new Siniffer(libPcapLiveDevices, item.Index);
        Hide();
        siniffer.Show();
    }
}


II Kısmı

Screenshot-3.png
Bu kısımda, kodumuzun ana fonksiyonlarını yazacağız. Seçmiş olduğumuz sürücünün içerisinde ki, paketleri görmemiz ve istediğim IP adresini blok lamayı halledeceğiz. Kodlar uzun olduğu için gerekli kısımları anlatacağım kodun tam hale en aşağıda belirleteceğim Github adresimde yer almaktadır.

Önemli olaylarımızdan birisi, listelenen paket listesinin üzerine tıkladığımız zaman hangi protokolümüzü seçtiğimizi anlasın ve ona göre bilgileri versin. Burada kullanacağımız protokoller; TCP, UDP, ARP, ICMP ve IGMP.
C#:
string protocol = e.Item.SubItems[4].Text;
int key = Int32.Parse(e.Item.SubItems[0].Text);
Packet packet;
bool getPacket = keyValuePairs.TryGetValue(key, out packet);

switch (protocol)
{
    case "TCP":
        if (getPacket)
        {
            var pkgTCP = (TcpPacket)packet.Extract(typeof(TcpPacket));

            if (pkgTCP != null)
            {
                int portSrc = pkgTCP.SourcePort;
                int portDst = pkgTCP.SourcePort;
                int checksum = pkgTCP.Checksum;

                listView2.Clear();

                string[] columnHeaders = {
                    "Packet Number",
                    "Type",
                    "Source Port",
                    "Destination Port",
                    "TCP Header Size",
                    "Window Size",
                    "Checksum",
                    "TCP Checksum",
                    "Sequence Number",
                    "Acknowledgment Number",
                    "Urgent Pointer",
                    "ACK Flag",
                    "PSH Flag",
                    "RST Flag",
                    "SYN Flag",
                    "FIN Flag",
                    "ECN Flag",
                    "CWR Flag",
                    "NS Flag"
                    };

                listView2.Columns.Add("Attributes").Width = 125;
                listView2.Columns.Add("Values").Width = 120;

                for (int i = 0; i < columnHeaders.Length; i++)
                {
                    ListViewItem item = new ListViewItem();

                    item.Text = columnHeaders[i];
                    item.SubItems.Add("");

                    listView2.Items.Add(item);
                }

                listView2.Items[0].SubItems[1].Text = key.ToString();
                listView2.Items[1].SubItems[1].Text = "TCP";
                listView2.Items[2].SubItems[1].Text = portSrc.ToString();
                listView2.Items[3].SubItems[1].Text = portDst.ToString();
                listView2.Items[4].SubItems[1].Text = pkgTCP.DataOffset.ToString();
                listView2.Items[5].SubItems[1].Text = pkgTCP.WindowSize.ToString();
                listView2.Items[6].SubItems[1].Text = (checksum.ToString() ?? "none") + (pkgTCP.ValidChecksum ? ", valid" : ", invalid");
                listView2.Items[7].SubItems[1].Text = pkgTCP.ValidChecksum ? "valid" : "invalid";
                listView2.Items[8].SubItems[1].Text = pkgTCP.SequenceNumber.ToString();
                listView2.Items[9].SubItems[1].Text = (pkgTCP.AcknowledgmentNumber.ToString() ?? "none") + (pkgTCP.Ack ? ", valid" : ", invalid");
                listView2.Items[10].SubItems[1].Text = pkgTCP.Urg ? "valid" : "invalid";
                listView2.Items[11].SubItems[1].Text = pkgTCP.Ack ? "1" : "0";
                listView2.Items[12].SubItems[1].Text = pkgTCP.Psh ? "1" : "0";
                listView2.Items[13].SubItems[1].Text = pkgTCP.Rst ? "1" : "0";
                listView2.Items[14].SubItems[1].Text = pkgTCP.Syn ? "1" : "0";
                listView2.Items[15].SubItems[1].Text = pkgTCP.Fin ? "1" : "0";
                listView2.Items[16].SubItems[1].Text = pkgTCP.ECN ? "1" : "0";
                listView2.Items[17].SubItems[1].Text = pkgTCP.CWR ? "1" : "0";
                listView2.Items[18].SubItems[1].Text = pkgTCP.NS ? "1" : "0";
            }
        }
        break;

    case "UDP":
        if (getPacket)
        {
            var pkgUDP = (UdpPacket)packet.Extract(typeof(UdpPacket));
            if (pkgUDP != null)
            {
                int portSrc = pkgUDP.SourcePort;
                int portDst = pkgUDP.SourcePort;
                int checksum = pkgUDP.Checksum;

                listView2.Clear();

                string[] columnHeaders = {
                    "Packet Number",
                    "Type",
                    "Source Port",
                    "Destination Port",
                    "Checksum",
                    "Valid UDP Checksum"
                    };

                listView2.Columns.Add("Attributes").Width = 125;
                listView2.Columns.Add("Values").Width = 120;

                for (int i = 0; i < columnHeaders.Length; i++)
                {
                    ListViewItem item = new ListViewItem();

                    item.Text = columnHeaders[i];
                    item.SubItems.Add("");

                    listView2.Items.Add(item);
                }

                listView2.Items[0].SubItems[1].Text = key.ToString();
                listView2.Items[1].SubItems[1].Text = "UDP";
                listView2.Items[2].SubItems[1].Text = portSrc.ToString();
                listView2.Items[3].SubItems[1].Text = portDst.ToString();
                listView2.Items[4].SubItems[1].Text = checksum.ToString();
                listView2.Items[5].SubItems[1].Text = pkgUDP.ValidUDPChecksum.ToString();
            }
        }
        break;

    case "ARP":
        if (getPacket)
        {
            var pkgARP = (ARPPacket)packet.Extract(typeof(ARPPacket));
            if (pkgARP != null)
            {
                IPAddress ipAddress = pkgARP.SenderProtocolAddress;
                IPAddress targetAddress = pkgARP.TargetProtocolAddress;

                System.Net.NetworkInformation.PhysicalAddress ipHardwareAddress = pkgARP.SenderHardwareAddress;
                System.Net.NetworkInformation.PhysicalAddress targetHardwareAddress = pkgARP.TargetHardwareAddress;

                listView2.Clear();

                string[] columnHeaders = {
                    "Packet Number",
                    "Type",
                    "Hardware Address Length",
                    "Protocol Address Length",
                    "Operation",
                    "Sender Protocol Address",
                    "Target Protocol Address",
                    "Sender Hardware Address",
                    "Target Hardware Address",
                };

                listView2.Columns.Add("Attributes").Width = 125;
                listView2.Columns.Add("Values").Width = 120;

                for (int i = 0; i < columnHeaders.Length; i++)
                {
                    ListViewItem item = new ListViewItem();

                    item.Text = columnHeaders[i];
                    item.SubItems.Add("");

                    listView2.Items.Add(item);

                    listView2.Items[0].SubItems[1].Text = key.ToString();
                    listView2.Items[1].SubItems[1].Text = "ARP";
                    listView2.Items[2].SubItems[1].Text = pkgARP.HardwareAddressLength.ToString();
                    listView2.Items[3].SubItems[1].Text = pkgARP.ProtocolAddressLength.ToString();
                    listView2.Items[4].SubItems[1].Text = pkgARP.Operation.ToString();
                    listView2.Items[5].SubItems[1].Text = ipAddress.ToString();
                    listView2.Items[6].SubItems[1].Text = targetAddress.ToString();
                    listView2.Items[7].SubItems[1].Text = ipHardwareAddress.ToString();
                    listView2.Items[8].SubItems[1].Text = targetHardwareAddress.ToString();
                }
            }
        }
        break;

    case "ICMP":
        if (getPacket)
        {
            var pkgICMP = (ICMPv4Packet)packet.Extract(typeof(ICMPv4Packet));
            if (pkgICMP != null)
            {
                listView2.Clear();

                string[] columnHeaders = {
                    "Packet Number",
                    "Type",
                    "Type Code",
                    "Checksum",
                    "ID",
                    "Sequence Number",
                };

                listView2.Columns.Add("Attributes").Width = 125;
                listView2.Columns.Add("Values").Width = 120;

                for (int i = 0; i < columnHeaders.Length; i++)
                {
                    ListViewItem item = new ListViewItem();

                    item.Text = columnHeaders[i];
                    item.SubItems.Add("");

                    listView2.Items.Add(item);

                    listView2.Items[0].SubItems[1].Text = key.ToString();
                    listView2.Items[1].SubItems[1].Text = "ICMP v4";
                    listView2.Items[2].SubItems[1].Text = "0x" + pkgICMP.TypeCode.ToString("x");
                    listView2.Items[3].SubItems[1].Text = pkgICMP.Checksum.ToString("x");
                    listView2.Items[4].SubItems[1].Text = pkgICMP.ID.ToString("x");
                    listView2.Items[5].SubItems[1].Text = pkgICMP.Sequence.ToString("x");
                }
            }
        }
        break;

    case "IGMP":
        if (getPacket)
        {
            var pkgIGMP = (IGMPv2Packet)packet.Extract(typeof(IGMPv2Packet));
            if (pkgIGMP != null)
            {
                listView2.Clear();

                string[] columnHeaders = {
                    "Packet Number",
                    "Type",
                    "TypeV2",
                    "Group Address",
                    "Max Response Time",
                };

                listView2.Columns.Add("Attributes").Width = 125;
                listView2.Columns.Add("Values").Width = 120;

                for (int i = 0; i < columnHeaders.Length; i++)
                {
                    ListViewItem item = new ListViewItem();

                    item.Text = columnHeaders[i];
                    item.SubItems.Add("");

                    listView2.Items.Add(item);

                    listView2.Items[0].SubItems[1].Text = key.ToString();
                    listView2.Items[1].SubItems[1].Text = "IGMP v2";
                    listView2.Items[2].SubItems[1].Text = pkgIGMP.Type.ToString();
                    listView2.Items[3].SubItems[1].Text = pkgIGMP.GroupAddress.ToString();
                    listView2.Items[4].SubItems[1].Text = pkgIGMP.MaxResponseTime.ToString();
                }
            }
        }
        break;

    default:
        listView2.Clear();
        break;
}

IP adresini engellemek ve bu engeli kaldırmak içinde ilk önce kendi namespace oluşturuyoruz ve main dosyamızda bunu kullanıyoruz.
C#:
private void blockStripMenuItem_Click(object sender, EventArgs e)
{
    if (listView1.SelectedItems.Count > 0)
    {
        string ipToBlock = listView1.SelectedItems[0].SubItems[2].Text;

        Firewall.BlockIP(ipToBlock);
        MessageBox.Show($"{ipToBlock} IP adresi engellendi.");
        LoadFirewallRules();
    }
}

private void unblockStripMenuItem_Click(object sender, EventArgs e)
{
    if (listView1.SelectedItems.Count > 0)
    {
        string ipToBlock = listView1.SelectedItems[0].SubItems[2].Text;

        Firewall.UnblockIP(ipToBlock);
        MessageBox.Show($"{ipToBlock} IP adresin engeli kaldırıldı.");
        LoadFirewallRules();
    }
}


Bu kısımda artık konuyu çok uzatmak ve okuyucuları yormak istemiyorum. Bu yüzden kodun açık kaynak şeklinde paylaşacağım isteyen kişiler geliştirmek veya kullanmak amaçlı kullana bilirler.
eline sağlık
 

StrongsAire.exe

Black Hat Junior
15 Tem 2010
753
102
image-1.png

DxAntiFirewall
Gelişmiş Ağ Tarama ve Yasaklama

Merhabalar, bu sizlere geliştirmiş olduğum bir uygulamayı tanıtacağım. Bu projenin amacı seçtiğiniz sürücüde ki, ağları izlemeniz ve istemediğiniz IP adresinden gelen paketleri yasaklamanızı sağlar. Hadi o zaman çalışma şekline geçelim:


I Kısım


C#:
using SharpPcap         // Version: 4.5.0
using PacketDotNet;     // Version: 0.16.0
using NetFwTypeLib;
      Pcap.Net.x86     // Version: 1.0.4.1


İlk olarak Interface adında bir WinForms oluşturuyoruz ve buraya görseldeki elementleri ekliyoruz:
Screenshot-2.png


List View,
Button













Ardından kodlama kısmına geçiyoruz. LibPcapLiveDevice'ı List şeklinde kullanmamız için kodumuzun üst kısmına ekliyoruz.
C#:
List<LibPcapLiveDevice> libPcapLiveDevices = new List<LibPcapLiveDevice>();

public Interface()
{
    InitializeComponent();
    StartWriting();
}

Sonra ListView'e sürücüleri yazması için bir fonksiyon yazıyoruz.
C#:
private void StartWriting()
{
    LibPcapLiveDeviceList liveDevices = LibPcapLiveDeviceList.Instance;

    foreach (LibPcapLiveDevice liveDevice in liveDevices)
    {
        if (!liveDevice.Interface.Addresses.Exists(before => before != null
                                                   && before.Addr != null
                                                   && before.Addr.ipAddress != null))
            continue;

        var deviceInterface = liveDevice.Interface;
        var friendlyName = liveDevice.Interface?.FriendlyName ?? "Yok";
        var description = liveDevice.Interface?.Description ?? "Yok";
        var macAddress = liveDevice.Interface?.MacAddress?.ToString() ?? "Yok";
        var ipAddress = liveDevice.Interface?.Addresses[0].Addr?.ToString() ?? "Yok";

        libPcapLiveDevices.Add(liveDevice);

        ListViewItem items = new ListViewItem();
        items.Text = friendlyName;
        items.SubItems.Add(description);
        items.SubItems.Add(FormatMacAddress(macAddress));
        items.SubItems.Add(ipAddress);
        listView1.Items.Add(items);
    }
}

Çıktımızı alırken MAC adresinin düzgün bir şekilde görünmesi için küçük bir kod parçası yazıyoruz bu isteğe bağlıdır fakat diğer türlü görüntü olarak benim hoşuma gitmediği için bu şekilde yapıyorum.
C#:
public static string FormatMacAddress(string macAddress)
{
    if (macAddress.Length != 12)
    {
        throw new ArgumentException("ERROR");
    }

    var sb = new StringBuilder();
    for (int i = 0; i < macAddress.Length; i += 2)
    {
        sb.Append($"{macAddress[i]}{macAddress[i + 1]}:");
    }

    sb.Remove(sb.Length - 1, 1);

    return sb.ToString();
}

Son addımlarımız olarak ise ara yüzde yerleşen butona iki kere tıklayarak bizim için bir Click eventi oluşturmasını sağlıyoruz ve içerisine ise bu kodları entegre ediyoruz. Bunun amacı kullanıcının seçtiği sürücün bilgisini ana form'a göndermek ve ana menüye geçiştir.
C#:
private void button1_Click(object sender, EventArgs e)
{
    foreach (ListViewItem item in listView1.SelectedItems)
    {
        Siniffer siniffer = new Siniffer(libPcapLiveDevices, item.Index);
        Hide();
        siniffer.Show();
    }
}


II Kısmı

Screenshot-3.png
Bu kısımda, kodumuzun ana fonksiyonlarını yazacağız. Seçmiş olduğumuz sürücünün içerisinde ki, paketleri görmemiz ve istediğim IP adresini blok lamayı halledeceğiz. Kodlar uzun olduğu için gerekli kısımları anlatacağım kodun tam hale en aşağıda belirleteceğim Github adresimde yer almaktadır.

Önemli olaylarımızdan birisi, listelenen paket listesinin üzerine tıkladığımız zaman hangi protokolümüzü seçtiğimizi anlasın ve ona göre bilgileri versin. Burada kullanacağımız protokoller; TCP, UDP, ARP, ICMP ve IGMP.
C#:
string protocol = e.Item.SubItems[4].Text;
int key = Int32.Parse(e.Item.SubItems[0].Text);
Packet packet;
bool getPacket = keyValuePairs.TryGetValue(key, out packet);

switch (protocol)
{
    case "TCP":
        if (getPacket)
        {
            var pkgTCP = (TcpPacket)packet.Extract(typeof(TcpPacket));

            if (pkgTCP != null)
            {
                int portSrc = pkgTCP.SourcePort;
                int portDst = pkgTCP.SourcePort;
                int checksum = pkgTCP.Checksum;

                listView2.Clear();

                string[] columnHeaders = {
                    "Packet Number",
                    "Type",
                    "Source Port",
                    "Destination Port",
                    "TCP Header Size",
                    "Window Size",
                    "Checksum",
                    "TCP Checksum",
                    "Sequence Number",
                    "Acknowledgment Number",
                    "Urgent Pointer",
                    "ACK Flag",
                    "PSH Flag",
                    "RST Flag",
                    "SYN Flag",
                    "FIN Flag",
                    "ECN Flag",
                    "CWR Flag",
                    "NS Flag"
                    };

                listView2.Columns.Add("Attributes").Width = 125;
                listView2.Columns.Add("Values").Width = 120;

                for (int i = 0; i < columnHeaders.Length; i++)
                {
                    ListViewItem item = new ListViewItem();

                    item.Text = columnHeaders[i];
                    item.SubItems.Add("");

                    listView2.Items.Add(item);
                }

                listView2.Items[0].SubItems[1].Text = key.ToString();
                listView2.Items[1].SubItems[1].Text = "TCP";
                listView2.Items[2].SubItems[1].Text = portSrc.ToString();
                listView2.Items[3].SubItems[1].Text = portDst.ToString();
                listView2.Items[4].SubItems[1].Text = pkgTCP.DataOffset.ToString();
                listView2.Items[5].SubItems[1].Text = pkgTCP.WindowSize.ToString();
                listView2.Items[6].SubItems[1].Text = (checksum.ToString() ?? "none") + (pkgTCP.ValidChecksum ? ", valid" : ", invalid");
                listView2.Items[7].SubItems[1].Text = pkgTCP.ValidChecksum ? "valid" : "invalid";
                listView2.Items[8].SubItems[1].Text = pkgTCP.SequenceNumber.ToString();
                listView2.Items[9].SubItems[1].Text = (pkgTCP.AcknowledgmentNumber.ToString() ?? "none") + (pkgTCP.Ack ? ", valid" : ", invalid");
                listView2.Items[10].SubItems[1].Text = pkgTCP.Urg ? "valid" : "invalid";
                listView2.Items[11].SubItems[1].Text = pkgTCP.Ack ? "1" : "0";
                listView2.Items[12].SubItems[1].Text = pkgTCP.Psh ? "1" : "0";
                listView2.Items[13].SubItems[1].Text = pkgTCP.Rst ? "1" : "0";
                listView2.Items[14].SubItems[1].Text = pkgTCP.Syn ? "1" : "0";
                listView2.Items[15].SubItems[1].Text = pkgTCP.Fin ? "1" : "0";
                listView2.Items[16].SubItems[1].Text = pkgTCP.ECN ? "1" : "0";
                listView2.Items[17].SubItems[1].Text = pkgTCP.CWR ? "1" : "0";
                listView2.Items[18].SubItems[1].Text = pkgTCP.NS ? "1" : "0";
            }
        }
        break;

    case "UDP":
        if (getPacket)
        {
            var pkgUDP = (UdpPacket)packet.Extract(typeof(UdpPacket));
            if (pkgUDP != null)
            {
                int portSrc = pkgUDP.SourcePort;
                int portDst = pkgUDP.SourcePort;
                int checksum = pkgUDP.Checksum;

                listView2.Clear();

                string[] columnHeaders = {
                    "Packet Number",
                    "Type",
                    "Source Port",
                    "Destination Port",
                    "Checksum",
                    "Valid UDP Checksum"
                    };

                listView2.Columns.Add("Attributes").Width = 125;
                listView2.Columns.Add("Values").Width = 120;

                for (int i = 0; i < columnHeaders.Length; i++)
                {
                    ListViewItem item = new ListViewItem();

                    item.Text = columnHeaders[i];
                    item.SubItems.Add("");

                    listView2.Items.Add(item);
                }

                listView2.Items[0].SubItems[1].Text = key.ToString();
                listView2.Items[1].SubItems[1].Text = "UDP";
                listView2.Items[2].SubItems[1].Text = portSrc.ToString();
                listView2.Items[3].SubItems[1].Text = portDst.ToString();
                listView2.Items[4].SubItems[1].Text = checksum.ToString();
                listView2.Items[5].SubItems[1].Text = pkgUDP.ValidUDPChecksum.ToString();
            }
        }
        break;

    case "ARP":
        if (getPacket)
        {
            var pkgARP = (ARPPacket)packet.Extract(typeof(ARPPacket));
            if (pkgARP != null)
            {
                IPAddress ipAddress = pkgARP.SenderProtocolAddress;
                IPAddress targetAddress = pkgARP.TargetProtocolAddress;

                System.Net.NetworkInformation.PhysicalAddress ipHardwareAddress = pkgARP.SenderHardwareAddress;
                System.Net.NetworkInformation.PhysicalAddress targetHardwareAddress = pkgARP.TargetHardwareAddress;

                listView2.Clear();

                string[] columnHeaders = {
                    "Packet Number",
                    "Type",
                    "Hardware Address Length",
                    "Protocol Address Length",
                    "Operation",
                    "Sender Protocol Address",
                    "Target Protocol Address",
                    "Sender Hardware Address",
                    "Target Hardware Address",
                };

                listView2.Columns.Add("Attributes").Width = 125;
                listView2.Columns.Add("Values").Width = 120;

                for (int i = 0; i < columnHeaders.Length; i++)
                {
                    ListViewItem item = new ListViewItem();

                    item.Text = columnHeaders[i];
                    item.SubItems.Add("");

                    listView2.Items.Add(item);

                    listView2.Items[0].SubItems[1].Text = key.ToString();
                    listView2.Items[1].SubItems[1].Text = "ARP";
                    listView2.Items[2].SubItems[1].Text = pkgARP.HardwareAddressLength.ToString();
                    listView2.Items[3].SubItems[1].Text = pkgARP.ProtocolAddressLength.ToString();
                    listView2.Items[4].SubItems[1].Text = pkgARP.Operation.ToString();
                    listView2.Items[5].SubItems[1].Text = ipAddress.ToString();
                    listView2.Items[6].SubItems[1].Text = targetAddress.ToString();
                    listView2.Items[7].SubItems[1].Text = ipHardwareAddress.ToString();
                    listView2.Items[8].SubItems[1].Text = targetHardwareAddress.ToString();
                }
            }
        }
        break;

    case "ICMP":
        if (getPacket)
        {
            var pkgICMP = (ICMPv4Packet)packet.Extract(typeof(ICMPv4Packet));
            if (pkgICMP != null)
            {
                listView2.Clear();

                string[] columnHeaders = {
                    "Packet Number",
                    "Type",
                    "Type Code",
                    "Checksum",
                    "ID",
                    "Sequence Number",
                };

                listView2.Columns.Add("Attributes").Width = 125;
                listView2.Columns.Add("Values").Width = 120;

                for (int i = 0; i < columnHeaders.Length; i++)
                {
                    ListViewItem item = new ListViewItem();

                    item.Text = columnHeaders[i];
                    item.SubItems.Add("");

                    listView2.Items.Add(item);

                    listView2.Items[0].SubItems[1].Text = key.ToString();
                    listView2.Items[1].SubItems[1].Text = "ICMP v4";
                    listView2.Items[2].SubItems[1].Text = "0x" + pkgICMP.TypeCode.ToString("x");
                    listView2.Items[3].SubItems[1].Text = pkgICMP.Checksum.ToString("x");
                    listView2.Items[4].SubItems[1].Text = pkgICMP.ID.ToString("x");
                    listView2.Items[5].SubItems[1].Text = pkgICMP.Sequence.ToString("x");
                }
            }
        }
        break;

    case "IGMP":
        if (getPacket)
        {
            var pkgIGMP = (IGMPv2Packet)packet.Extract(typeof(IGMPv2Packet));
            if (pkgIGMP != null)
            {
                listView2.Clear();

                string[] columnHeaders = {
                    "Packet Number",
                    "Type",
                    "TypeV2",
                    "Group Address",
                    "Max Response Time",
                };

                listView2.Columns.Add("Attributes").Width = 125;
                listView2.Columns.Add("Values").Width = 120;

                for (int i = 0; i < columnHeaders.Length; i++)
                {
                    ListViewItem item = new ListViewItem();

                    item.Text = columnHeaders[i];
                    item.SubItems.Add("");

                    listView2.Items.Add(item);

                    listView2.Items[0].SubItems[1].Text = key.ToString();
                    listView2.Items[1].SubItems[1].Text = "IGMP v2";
                    listView2.Items[2].SubItems[1].Text = pkgIGMP.Type.ToString();
                    listView2.Items[3].SubItems[1].Text = pkgIGMP.GroupAddress.ToString();
                    listView2.Items[4].SubItems[1].Text = pkgIGMP.MaxResponseTime.ToString();
                }
            }
        }
        break;

    default:
        listView2.Clear();
        break;
}

IP adresini engellemek ve bu engeli kaldırmak içinde ilk önce kendi namespace oluşturuyoruz ve main dosyamızda bunu kullanıyoruz.
C#:
private void blockStripMenuItem_Click(object sender, EventArgs e)
{
    if (listView1.SelectedItems.Count > 0)
    {
        string ipToBlock = listView1.SelectedItems[0].SubItems[2].Text;

        Firewall.BlockIP(ipToBlock);
        MessageBox.Show($"{ipToBlock} IP adresi engellendi.");
        LoadFirewallRules();
    }
}

private void unblockStripMenuItem_Click(object sender, EventArgs e)
{
    if (listView1.SelectedItems.Count > 0)
    {
        string ipToBlock = listView1.SelectedItems[0].SubItems[2].Text;

        Firewall.UnblockIP(ipToBlock);
        MessageBox.Show($"{ipToBlock} IP adresin engeli kaldırıldı.");
        LoadFirewallRules();
    }
}


Bu kısımda artık konuyu çok uzatmak ve okuyucuları yormak istemiyorum. Bu yüzden kodun açık kaynak şeklinde paylaşacağım isteyen kişiler geliştirmek veya kullanmak amaçlı kullana bilirler.
Ellerinize sağlık hocam 👏🏻
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.