← Back to list

Java ile Yerel IPv4 Adresini Bulma ve Sanal Ağ Arayüzlerini Ayırt Etme

Bu yazıda, Java programlama dili ile yerel IPv4 adreslerini nasıl alabileceğimizi ve sanal ağ arayüzlerini nasıl ayırt edebileceğimizi…

Dilara Dokuyucu · 2024-07-04 10:35 · 26 claps · 2.6 min read
#vpn-configuration #network-virtualization #container-networking #java #softwaredefinednetworking
Open on Medium ↗
Wiki topics: CRY · Crypto & Web3 ☁️ · DevOps & Cloud

Java ile Yerel IPv4 Adresini Bulma ve Sanal Ağ Arayüzlerini Ayırt Etme

Bu yazıda, Java programlama dili ile yerel IPv4 adreslerini nasıl alabileceğimizi ve sanal ağ arayüzlerini nasıl ayırt edebileceğimizi detaylı bir şekilde ele alacağız. Ağ programlama ve ağ arayüzleri konularında bilgi sahibi olmak isteyenler için faydalı bir rehber olacaktır.

Adım Adım Rehber

1. Ağ Arayüzlerini Alma

Öncelikle, sistemdeki tüm ağ arayüzlerini almak için NetworkInterface.getNetworkInterfaces() yöntemini kullanıyoruz. Bu yöntem, bir Enumeration nesnesi döndürüyor ve biz de bu nesne üzerinden döngü ile tüm ağ arayüzlerini gezebiliyoruz.

Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();
while (interfaces.hasMoreElements()) {
    NetworkInterface networkInterface = interfaces.nextElement();
    // İşlemler...
}

2. Gereksiz Arayüzleri Filtreleme

Loopback (geri döngü) ve down (kapalı) durumda olan arayüzleri ve sanal ağ arayüzlerini filtrelemek istiyoruz. Bunun için networkInterface.isLoopback(), networkInterface.isUp() ve isVirtualNetworkInterface(networkInterface) yöntemlerini kullanıyoruz.

if (networkInterface.isLoopback() || !networkInterface.isUp() || isVirtualNetworkInterface(networkInterface)) {
    continue;
}

3. IP Adreslerini Alma

Her bir ağ arayüzü için IP adreslerini almak üzere networkInterface.getInetAddresses() yöntemini kullanıyoruz. Bu da bir Enumeration nesnesi döndürüyor ve döngü ile bu adresleri gezebiliyoruz. Sadece IPv4 adreslerini kontrol etmek için address instanceof Inet4Address koşulunu kullanıyoruz.

Enumeration<InetAddress> addresses = networkInterface.getInetAddresses();
while (addresses.hasMoreElements()) {
    InetAddress address = addresses.nextElement();
    if (address instanceof Inet4Address) {
        String ipAddress = address.getHostAddress();
        // İşlemler...
    }
}

4. Belirli Alt Ağları Filtreleme

IPv4 adreslerinden sadece belirli bir alt ağa (örneğin 192.168.x.x) ait olanları almak için ipAddress.startsWith("192.168.") kontrolünü yapıyoruz.

if (ipAddress.startsWith("192.168.")) {
    System.out.println("Display name: " + networkInterface.getDisplayName().toLowerCase());
    System.out.println("Name: " + networkInterface.getName().toLowerCase());
    System.out.println("Yerel IPv4 Adresi: " + ipAddress);
}

5. Yerel Ağ Arayüzlerini Tanımlama

Yerel ağ arayüzlerini tanımlamak için bir enum ve bu enum ile kontrol eden bir yöntem kullanıyoruz. Bu enum içerisinde yaygın yerel ağ arayüzü isimlerini saklıyoruz ve bu isimler ile networkInterface.getDisplayName() ve networkInterface.getName() değerlerini karşılaştırıyoruz.

private static boolean isVirtualNetworkInterface(NetworkInterface networkInterface) {
    String displayName = networkInterface.getDisplayName().toLowerCase();
    String name = networkInterface.getName().toLowerCase();

    for (NetworkInterfaceName value : NetworkInterfaceName.values()) {
        if (displayName.contains(value.getName()) || name.contains(value.getName())) {
            return true;
        }
    }
    return false;
}

@Getter
public enum NetworkInterfaceName {
    ETHERNET("ethernet"),
    ETHERNET_ADAPTER("ethernet adapter"),
    WIFI("wi-fi"),
    WIRELESS("wireless"),
    WLAN("wlan"),
    ETH0("eth0"),
    ETH1("eth1"),
    AIRPORT("airport");

    private final String name;

    NetworkInterfaceName(String name) {
        this.name = name;
    }
}

Kodun Tamamı

Son olarak, yazıda bahsedilen tüm kodun tamamını aşağıda bulabilirsiniz:

public class GetIPv4Address {

    public static void main(String[] args) {
        try {
            Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();
            while (interfaces.hasMoreElements()) {
                NetworkInterface networkInterface = interfaces.nextElement();

                // Loopback ve down durumda olanları ve sanal ağ arayüzlerini atlıyoruz
                if (networkInterface.isLoopback() || !networkInterface.isUp() || isVirtualNetworkInterface(networkInterface)) {
                    continue;
                }

                Enumeration<InetAddress> addresses = networkInterface.getInetAddresses();
                while (addresses.hasMoreElements()) {
                    InetAddress address = addresses.nextElement();

                    // IPv4 adreslerini kontrol ediyoruz ve sadece belirli bir alt ağa ait olanları alıyoruz
                    if (address instanceof Inet4Address) {
                        String ipAddress = address.getHostAddress();
                        if (!networkInterface.getDisplayName().toLowerCase().contains("host-only")){
                            if (ipAddress.startsWith("192.168.")) {
                                System.out.println("Display name: " + networkInterface.getDisplayName().toLowerCase());
                                System.out.println("Name: " + networkInterface.getName().toLowerCase());
                                System.out.println("Yerel IPv4 Adresi: " + ipAddress);
                            }
                        }
                    }
                }
            }
        } catch (SocketException e) {
            e.printStackTrace();
        }
    }

    // Sanal ağ arayüzlerini tanımlamak için bir yöntem
    private static boolean isVirtualNetworkInterface(NetworkInterface networkInterface) {
        try {
            // Ağ arayüzü isimlerini küçük harfe çevirerek al
            String displayName = networkInterface.getDisplayName().toLowerCase();
            String name = networkInterface.getName().toLowerCase();

            // Enum içindeki isimlerle kontrol et
            for (NetworkInterfaceName value : NetworkInterfaceName.values()) {
                if (displayName.contains(value.getName()) || name.contains(value.getName())) {
                    return true;
                }
            }
            return false;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }
}

@Getter
public enum NetworkInterfaceName {
    ETHERNET("ethernet"),
    ETHERNET_ADAPTER("ethernet adapter"),
    WIFI("wi-fi"),
    WIRELESS("wireless"),
    WLAN("wlan"),
    ETH0("eth0"),
    ETH1("eth1"),
    AIRPORT("airport");

    private final String name;

    NetworkInterfaceName(String name) {
        this.name = name;
    }
}

ÇIKTI

Sonuç

Bu yazıda, Java kullanarak yerel IPv4 adreslerini nasıl alabileceğimizi ve sanal ağ arayüzlerini (sanal makineler (VM’ler), konteynerler ve çeşitli ağ yapılandırmaları) nasıl ayırt edebileceğimizi öğrendik. Ağ programlama konusunda bilgi sahibi olmak ve uygulamalarında bu bilgileri kullanmak isteyenler için yararlı olmasını umuyorum.


메타데이터
post_id
d2da5aa4e346
slug
java-ile-yerel-ipv4-adresini-bulma-ve-sanal-ağ-arayüzlerini-ayırt-etme-d2da5aa4e346
url
https://medium.com/@dilara_dokuyucu/java-ile-yerel-ipv4-adresini-bulma-ve-sanal-a%C4%9F-aray%C3%BCzlerini-ay%C4%B1rt-etme-d2da5aa4e346
canonical_url
https://medium.com/@dilara_dokuyucu/java-ile-yerel-ipv4-adresini-bulma-ve-sanal-a%C4%9F-aray%C3%BCzlerini-ay%C4%B1rt-etme-d2da5aa4e346
author_url
https://medium.com/@dilara_dokuyucu
status
ok
fetched_at
2026-08-09 20:31:32