4 puan yazan GN⁺ 2023-08-11 | 1 yorum | WhatsApp'ta paylaş
  • arpchat, bilgisayarların aynı ağdaki diğer bilgisayarların MAC adreslerini bulmak için kullandığı ARP'yi bir sohbet uygulamasına dönüştüren bir araçtır
  • İstemci izolasyonlu bir ağda arkadaşlarla sohbet etme kullanım senaryosu, projeye motivasyon olarak sunuluyor
  • ARP üzerinde basit, genel amaçlı bir aktarım protokolü uygulanarak on binlerce karakter uzunluğunda mesajlar gönderilebiliyor ve bir miktar sıkıştırma da kullanılıyor
  • Çevrimiçi kullanıcı listesini giriş ve çıkış bildirimleriyle birlikte güncellemek için presence discovery ve heartbeat sistemi bulunuyor
  • Kurulum için ikili dosyalar releases page üzerinden indirilebilir
    • Windows'ta npcap gerekebilir; kurulum sırasında Install Npcap in WinPcap API-compatible Mode seçeneğinin işaretlenmesi gerekir
    • Linux'ta sudo setcap CAP_NET_RAW+ep /path/to/arpchat komutuyla ağ yetkisi verilmesi gerekebilir
  • İkili dosya terminalden çalıştırılır; gönderdiğiniz mesaj kendi ekranınızda görünüyorsa düzgün çalıştığı anlaşılabilir
  • Derleme, en güncel unstable Rust sürümünde test edilmiştir; Windows derlemesi için WinPcap Developer's Pack ve LIB ortam değişkeninin WpdPack/Lib/x64/ klasörüne ayarlanması gerekir

1 yorum

 
GN⁺ 2023-08-11
Hacker News yorumları
  • Bunu yapan kişiyim. Bugün HN’ye koyduğum başka bir şeyi de ben yaptım (https://news.ycombinator.com/item?id=37062422); ArpChat’in de birlikte gündeme gelmesini görmek oldukça ilginç. Muhtemelen biri profilime bakmış
    Gerçekten eğlenceli bir projeydi ve ağ iletişimi hakkında çok şey öğrendim
    Kısa süre önce tamamen çevrimdışı bir ortamda gerçekten deneme fırsatım oldu; eğlenceliydi. Ancak sonrasında büyük bir hata keşfettim ve bu hata muazzam gecikmeye yol açıyordu. Düzelttim ama henüz yeni build çıktısını yükleyemedim; gerçek ortamda test etmeyi düşünüyorsanız kaynaktan kendiniz derlemeniz daha iyi olur. Eğlencesine kullanıcı adı renkleri ve mesaj zamanı da ekledim. Yakında yeni bir sürüm yayımlayacağıma söz veriyorum
    İlgilenirseniz yaklaşık 1 yıl önce ArpChat’in nasıl çalıştığını yazdığım bir yazı da var: https://kognise.dev/writing/arp

    • Bunu baştan sona okurken sürekli gülüyorum. ArpChat’in ağ yöneticilerine kalp krizi geçirtme ihtimali yüksek, ama fikrin kendisi gerçekten harika. Ben de eğlencesine OSI katmanları kitabı okuyan türden biri olduğum için empati kuruyorum
      Kodla oynamaya devam etmeni dilerim. justine tunney’nin https://justine.lol/ape.html gibi işlerde gösterdiği şeye de biraz benziyor. Az kişinin gerçekten anladığı bir alana, örneğin derleyici ikili dosya biçimlerinin ayrıntılarına derinlemesine dalıp sonra “tüm ikili biçimleri tek bir meta biçimde birleştirip gerçekten hepsinde çalıştırabilir miyiz?” gibi çılgın bir soru sormak ve gerçekten çalışan bir şey ortaya çıkarmak gibi
    • README’nin altındaki banner gerçekten komik ve güzel. Harika iş
    • Linux’ta da çalışmasını bekliyor musun?
      # sudo getcap ./arpchat
      ./arpchat cap_net_raw=ep
      “error getting channel, might be missing permissions” alıyorum
      Ek: Bu hata setcap ayarından değil, arpchat’ten geliyor
  • Tam da böyle bir şey istiyordum. Veri bağlantı katmanı muzipliği ha
    Address Resolution Protocol’ün (ARP) ne olduğunu bilmeyenler için çok kabaca söylemek gerekirse, MAC adresleri (Ethernet’in kullandığı) ile IP adresleri (internetin kullandığı) arasındaki eksik halkadır. route ile görebildiğiniz IP yönlendirme tablosu paketin bir sonraki hangi IP adresine gönderileceğini belirlediğinde, arp ile görebildiğiniz ARP önbelleği de o IP’ye karşılık gelen MAC adresini belirler. Bu genellikle yönlendiricinin yerel IP adresidir
    Bugünlerde ARP’nin var olduğunu bilmek bile biraz uzmanlık dışı gizemli bilgi gibi görülüyor; IPv6 tarafındaki kardeşi Neighbor Discovery Protocol için bu daha da geçerli. Modern bulut tabanlı dağıtımlarda sık sık doğrudan uğraşmasanız bile, varlığını bilmek tüm ağ yığınına kuşbakışı bakışı çok daha eksiksiz hâle getirir

    • ARP’nin ezoterik bilgi olduğu görüşüne katılmakta zorlanıyorum. Ağ işi yapan biri için ARP’yi anlamak ya da en azından bilmek hâlâ neredeyse zorunlu. arping, aynı ağ segmentindeki bir cihazın açık olup ICMP ping’e yanıt vermediğini kontrol ederken çok kullanışlıdır
      tcpdump veya Wireshark dump’larına bakarsanız er ya da geç mutlaka karşınıza çıkar. Yine de yazılım mühendisleri için bulut ile geleneksel ağlar oldukça farklı olduğundan, bunu uygulamalardan önce ev ağını debug ederken görmeleri mümkün
    • Günümüzde daha yaygın olan muhtemelen 802.11’dir. Yine de bir host’un IP alması gerektiğinde ARP herhangi bir veri bağlantı katmanı protokolünde kullanılabilir: https://en.wikipedia.org/wiki/Data_link_layer
    • ARP gerçekten yabancılaşmaya başladıysa bu üzücü. IP ağlarının nasıl çalıştığını anladığını söyleyip ARP’ye en azından asgari düzeyde aşina olmamak hayal etmesi zor bir şey
    • Sabit IP adresine sahip ağdaki başka bir bilgisayarın ARP girdisini sabit olarak kodlamak da mümkün
  • ARP’nin keyfi payload taşıyabilmesini kötüye kullanmak eğlenceli, ama ağ iletişimine giriş açısından yeniden söylemek gerekirse yazarın dayandığı temel nokta, switch’in ff:ff:ff:ff:ff:ff adresine giden paketleri tüm broadcast domain içine flood etmesi gibi basit bir gerçek
    Süper kullanıcı yetkileri veya raw packet yetkileri olmadan da L3 broadcast adresine paket gönderirseniz bu genellikle L2’de flood edilir; dolayısıyla benzer bir mesaj yayılımı oluşturabilirsiniz. Yani broadcast adresine ping atmak eğlencelidir
    ARP kullanmanın özel bir avantajı yok. Ayrıca modern switch’lerin çoğunda ARP paketlerini izleme özellikleri bulunduğundan, büyük miktarda sahte ARP trafiği akıtmak gerçekten kötü etkilere yol açabilir. Yine de eğlenceli bir çalışma ve öğrenirken yaptığım şakaları hatırlatıyor. Ben şahsen bu amaç için ICMP’yi kötüye kullanırdım; bu gelecekteki geliştirme yönü de olabilir. Eğlenceli proje için alkışlar

    • Bir başka önemli ağ iletişimine giriş ilkesini de kullanıyor: sonuçta hepsi sayı
      ARP, DNS, HTTP, TLS bir yandan aklımıza gelen o protokollerin ta kendisi, ama aynı zamanda hepsi yalnızca sayılardan ibaret. ARP de HTTP ile aynı sayı uzayına erişir. UDP’nin 11 bitlik bayt kullandığı falan yok, DNS’in kullanabildiği özel bir CPU komutu da yok. Sonuçta hepsi sayı. En sonunda istediğiniz sayıları hatta itebilirsiniz; dünyanın geri kalanı da o sayıları alıp kendi yaptığı şeyi yapar
    • İlk gördüğüm büyütmeli DDoS saldırılarından biri 1990’larda olmuştu; kurban host adresini kaynak olarak sahteleyip saf bir kampüs ağının broadcast adresine ping gönderme yöntemiydi
      Bugün çalışmaması gerekir, ama o zamanlar saf TCP/IP uygulamaları, yani epey çoğu, memnuniyetle katılıyordu
    • https://hpbn.co/’dan mı bahsediyorsun?
  • Çoğu işletim sisteminde varsayılan olarak yerleşik gelen protokolleri kötüye kullanmayı seviyorum. Ayrı istemci yazılımı kurmayı gerektirmeyen, platformlar arası bir GUI/CLI mesajlaşma sistemi bulamadığım için, Finder.app/Explorer.exe/Gnome/KDE içinden mesajların görülebildiği aptalca bir sahte Samba paylaşımı yapmıştım
    Yerel ağda netcat çağrıları da pek iyi çalışmıyordu; broadcast yapmak içinse işletim sistemine göre bayrak farklılıkları vardı. Dosya gezgininde Samba paylaşımındaki mesajı görüp tıkladıktan sonra, dosya adını değiştirerek 3 satırlık bir “ilan panosunu” güncelleme yöntemiydi
    https://github.com/jedahan/samba-haiku/blob/master/index.js
    Bu da aslında Wi-Fi SSID kullanarak captive portal haiku’su yapan şeyi yeniden uygulamaktı
    https://github.com/jedahan/haiku-wifi

  • Beklenenden daha da eğlenceli olabilir. Büyük üreticilerin donanımıyla VLAN kullanarak ağı ayırıyorduk; çoğu durumda VLAN çalışıyordu ama ARP trafiğinin sızdığını fark ettik
    Makinelerin tüm trafiği yönlendirici üzerinden göndermesi gerekiyordu, ama arada görmemeleri gereken ARP yanıtlarını görüp diğer makinelere doğrudan ulaşabileceklerine karar veriyorlardı. Sonuçta ARP önbelleği girdisi süresi dolana kadar trafik gönderemiyorduk ve bu baş ağrıttı. Üretici çok büyüktü, umursamadı ve hatayı düzeltmeye de ilgi göstermedi
    Belirli durumlarda bu sohbet uygulaması VLAN’ı delebilir

    • Aynı nedenle ilginç. Rastgele payload içeren ARP mesajları gönderip alabiliyorsanız, VLAN sorun giderme ya da başka L2 bağlantı kontrolleri kesinlikle kolaylaşır
    • Benim testlerime göre epey çok şeyi delebiliyor
  • Eşim, çocuklarım ve ben çoğunlukla evden çalıştığımız ya da okuduğumuz için sık sık ayrı odalarda oluyoruz. Gerektiğinde birbirimize mesaj atmak için BeeBEEP kullanıyoruz. Sunucu gerektirmemesi ve hem Linux hem de Windows istemcilerinin olması belirleyiciydi
    Gayet iyi çalışıyor ama dizüstü bilgisayar uykudan uyandıktan sonra LAN’daki diğer kişileri tekrar görebilmesi için bazen yeniden başlatmak gerekiyor. Ayrıca sistem tepsisi simgesinden doğrudan belirli bir kişiye mesaj penceresi açılamaması neredeyse tek şikâyetim. Komik kedi fotoğraflarını kopyalayıp yapıştırabiliyorsunuz; dosya aktarımı gibi benim kullanmadığım özellikleri de var. Ücretli reklam değil, sadece uzun uzun anlatmış oldum
    https://www.beebeep.net/

    • Bu projenin güzelliğinin mesajlaşmanın kendisinden ziyade, düşük seviyeli ağ protokollerini kötüye kullanarak istemci izolasyonu gibi şeylerin dışına taşabilmesinde olduğunu düşünüyorum
  • Lisede bunu net send ile yapıp azar işitmiştim

    • O numarayı bulup birkaç arkadaşıma göstermiştim ama sır uzun sürmedi. Bir bakmışım arkadaşım bile olmayan daha büyük bir grup bilgisayar laboratuvarı dersinde bunu kopya çekmek için kullanıyor. Açık açık kopya çekmeleri rahatsız ediciydi; pek sevmediğim insanların benim keşfettiğim şeyden faydalanması da biraz canımı sıkmıştı
      Bu yüzden sistem yöneticisinin kullanıcı adını spoof ettim (Win9x’te zor değildi) ve sert bir uyarı mesajı gönderdim. Mesajların birden kesilmesine bakılırsa epey şaşırmış olmalılar
    • write selam söylüyor
      https://en.wikipedia.org/wiki/Write_(Unix)
    • net sendin domaine bağlı olmayı gerektirdiğini hatırlıyorum; bu yüzden ARP kullanmış olacağını sanmıyorum
    • Ağ analizörü hatalıysa ya da garip ARP paketleriyle ilgilenmiyorsa, ARP mesajlaşmasını tespit etmek muhtemelen zor olurdu
    • Öyle zamanlar vardı. Üniversitede yanlışlıkla, yok aslında bilerek tüm domaine mesaj göndermiştik; BT öğretmenleri hemen biz sorunlu tiplere bakmıştı
  • Çok havalı. Ancak TCP/IP, OSI modelini izlemediği için OSI’nin ince ayrımlarını aynen uygulamak zor
    ARP pratikte Stevens’ın TCP/IP modeline göre 2.5. katman olarak tanımlanabilir; bu yüzden 2.5 demek en mantıklısı gibi görünüyor. Ayrıca ARP frame’leri yönlendirilmez, dolayısıyla açıkça L3 değildir

  • IPv4 NAT’ın fiilen standart olduğu dönemde —bugün de öyle sayılır ama artık IPv6 ve CGNAT da var— NATChat diye bir şey yapmıştım
    Temel olarak genel IPv4 adresine göre sohbet odası oluşturuyor ve aynı ağdaki herkesle sohbet etmenizi sağlıyordu. Ofiste başkalarıyla kullanmak için oldukça iyiydi. Ofis denen şey de o zamanlar vardı tabii

  • C++ ile yazılmış benzer bir şey de var: https://github.com/gbonacini/arpchatcpp