İçeriğe geç
academia.sh

Ders 03 / 18

Alt Alan ve Varlık Keşfi

Ad uzayında sahipsiz kalemi saymak: 24 bölge kaydının 7'sinin artık yanıt vermeyen bir hedefe işaret etmesi, üç yöntemin kapsamasının %66,7 ile %29,2 arasında değişmesi, iz bırakmayan yöntemin en çok adayı bulması, 120 denemelik yöntemin kayıt başına 8,57 iz üretmesi, bağlı kalem çıkarımının hiçbir sahipsiz kalem bulamaması, 4 uyarı üreten isteğin 0 aday getirmesi ve birleşimin 21 kaydı bulup 3'ünü hiç görmemesi.

İçindekiler

Önceki iki ders kapalı bir liste üzerinde çalıştı: yirmi aday halka açık kalemlerden çıkmış ve kayıt sorgulamasıyla sınıflandırılmıştı. Bir kurumun alan adının altında ise hiçbir belgede geçmeyen, hiçbir sayfada bağlantısı bulunmayan adlar durur. Bu ders o adları arar ve ararken iki şeyi birlikte sayar: yöntemlerin kapsamasını ve artık var olmayan bir hedefe işaret eden kayıtları.

Bölge dosyasının bir envanter olarak tutulması ve öksüz kayıtların temizlenmesi Sunucu, Ağ ve Sertleştirme kursunda bölgenin sahibi açısından ele alınmıştı. Burada aynı bölgeye dışarıdan bakılır: sahibi bilmediği için temizlemediği kalem, değerlendirmeyi yapan tarafın listesinde bir aday olarak durur.

Sahipsiz Kayıt ve Unutulmuş Kalem

KS7: her ad üç şey taşır — hedefinin yanıt verip vermediği, envanterde olup olmadığı ve sorumlu ekibi. Hedefi yanıt vermeyen kayıt sahipsizdir: kayıt durur, karşılığı düşmüştür. Hedefi yanıt veren ama sorumlusu olmayan kayıt unutulmuştur: çalışır, ama kimse ondan sorumlu değildir. KS8: bir yöntem bir aday kümesi üretir; adayın bölgede karşılığı yoksa yanlış pozitiftir. KS9: yöntemin izi, hedefte bıraktığı kayıt ve tetiklediği uyarı sayısıdır; deneme sayısı iz üretse de aday üretmeyebilir.

Bu adımların hepsi kapsam tanımındaki alan adıyla sınırlıdır ve yazılı yetkinin dışına çıkan bir ad uzayında yapılamaz.

// kesif/bolge.mjs — kurgu bir olcum aginin alt alan kayitlari ve uc kesif yonteminin bulgusu
// (model): gercek alan adi, gercek ad sunucusu ve gercek hedef yok. Rastgelelik yok.

// KS7: her satir bir addir — hedefinin yanit verip vermedigi, envanterde olup olmadigi, sorumlu
// ekibi ve onu bulan yontemler. Hedefi yanit vermeyen kayit sahipsiz, hedefi yanit veren ama
// sorumlusu olmayan kayit unutulmus sayilir. Son sutunda p pasif kayit derlemesi, s sozluk
// denemesi, b bagli kalem cikarimidir; "-" o yontemin bulamadigini gosterir.
export const AD = `
  abone       var      1 portal     psb
  saha        var      1 saha       psb
  vpn         var      1 ag         ps-
  toplayici   var      1 olcum      p--
  rapor       var      1 veri       psb
  test        var      1 portal     psb
  ortak       var      1 portal     p-b
  is-emri     var      1 saha       p-b
  sayac       var      1 olcum      p--
  eski-abone  var      0 -          p--
  pazarlama   var      0 pazarlama  -sb
  egitim      var      0 -          -s-
  demo        yok      0 -          ps-
  eski-rapor  yok      0 -          p--
  kampanya-2  yok      0 -          p--
  arsiv       yok      0 -          ps-
  staging     var      0 veri       ps-
  yedek       yok      1 ag         -s-
  izleme      var      1 ag         ps-
  gunluk      var      1 veri       -s-
  anket       yok      0 -          -s-
  eski-saha   yok      0 -          ---
  sube-1      var      1 ag         ---
  sube-2      var      1 ag         ---
  kampanya-1  kayitsiz 0 -          p--`
  .trim().split("\n").map((r) => {
    const [ad, hedef, env, sahip, bulan] = r.trim().split(/\s+/);
    return { ad, hedef, env: +env, sahip, bulan };
  });

// KS8: bir yontem bir aday kumesi uretir; adayin bolgede karsiligi yoksa yanlis pozitiftir.
// KS9: yontemin izi hedefte biraktigi kayit ve tetikledigi uyaridir. Deneme sayisi iz uretse de
// aday uretmeyebilir: bolge aktarim istegi dort ad sunucusunda reddedilir ve hicbir ad vermez.
export const YONTEM = [
  { kod: "p", ad: "pasif kayit derlemesi", deneme: 0, kayit: 0, uyari: 0 },
  { kod: "s", ad: "sozluk denemesi", deneme: 120, kayit: 120, uyari: 1 },
  { kod: "b", ad: "bagli kalem cikarimi", deneme: 12, kayit: 12, uyari: 0 },
  { kod: "z", ad: "bolge aktarim istegi", deneme: 4, kayit: 4, uyari: 4 },
];

export const KAYIT = AD.filter((a) => a.hedef !== "kayitsiz");
export const bulur = (y, a) => a.bulan.includes(y.kod);
export const sahipsiz = (a) => a.hedef === "yok";
export const unutulmus = (a) => a.hedef === "var" && a.sahip === "-";
// kesif/varlik.mjs — uc kesif yontemi ayni ad uzayinda: kac aday, kac sahipsiz kalem, kac iz.
import { AD, YONTEM, KAYIT, bulur, sahipsiz, unutulmus } from "./bolge.mjs";

const yaz = (g, ...s) => console.log(s.map((v, i) =>
  (g[i] < 0 ? String(v).padEnd(-g[i]) : String(v).padStart(g[i]))).join(""));
const SAHIPSIZ = KAYIT.filter(sahipsiz).length;

console.log(`${KAYIT.length} bolge kaydi: ${KAYIT.filter((a) => a.hedef === "var").length} ` +
  `hedefi yanit veriyor, ${SAHIPSIZ} sahipsiz, ${KAYIT.filter(unutulmus).length} unutulmus, ` +
  `${KAYIT.filter((a) => !a.env && a.hedef === "var").length} envanter disi`);

const A = [-23, 9, 7, 8, 9, 10, 10];
console.log("\n1. yontem basina aday ve sahipsiz kalem");
yaz(A, "yontem", "deneme", "aday", "dogru", "yanlisP", "sahipsiz", "kapsama %");
for (const y of YONTEM) {
  const l = AD.filter((a) => bulur(y, a));
  const d = l.filter((a) => a.hedef !== "kayitsiz");
  yaz(A, y.ad, y.deneme, l.length, d.length, l.length - d.length, d.filter(sahipsiz).length,
    ((d.length / KAYIT.length) * 100).toFixed(1));
}

const B = [-23, 8, 8, 11, 15, 12];
console.log("\n2. yontemin biraktigi iz");
yaz(B, "yontem", "kayit", "uyari", "kayit/aday", "kayit/sahipsiz", "aday/deneme");
for (const y of YONTEM) {
  const d = AD.filter((a) => bulur(y, a) && a.hedef !== "kayitsiz");
  const sz = d.filter(sahipsiz).length;
  yaz(B, y.ad, y.kayit, y.uyari, d.length ? (y.kayit / d.length).toFixed(2) : "-",
    sz ? (y.kayit / sz).toFixed(2) : "-",
    y.deneme ? (d.length / y.deneme).toFixed(2) : "-");
}
const IZ = YONTEM.reduce((t, y) => t + y.kayit, 0);
const UY = YONTEM.reduce((t, y) => t + y.uyari, 0);

const C = [-23, 9, 9, 11, 11];
console.log("\n3. birlesim ve ortusme");
yaz(C, "kume", "aday", "dogru", "sahipsiz", "kapsama %");
const kume = [];
for (const y of YONTEM) {
  kume.push(y);
  const l = AD.filter((a) => kume.some((x) => bulur(x, a)));
  const d = l.filter((a) => a.hedef !== "kayitsiz");
  yaz(C, `+ ${y.ad}`, l.length, d.length, d.filter(sahipsiz).length,
    ((d.length / KAYIT.length) * 100).toFixed(1));
}
const kac = (a) => YONTEM.filter((y) => bulur(y, a)).length;
const D = [-23, 9, 11, 12];
console.log("\n4. kac yontemden cikiyor");
yaz(D, "yontem sayisi", "kayit", "sahipsiz", "unutulmus");
for (const n of [0, 1, 2, 3]) {
  const l = KAYIT.filter((a) => kac(a) === n);
  yaz(D, `${n} yontem`, l.length, l.filter(sahipsiz).length, l.filter(unutulmus).length);
}
const bulunan = KAYIT.filter((a) => kac(a) > 0);
console.log(`hicbir yontemin bulamadigi kayit: ` +
  KAYIT.filter((a) => !kac(a)).map((a) => a.ad).join(", "));
console.log(`birlesim ${bulunan.length}/${KAYIT.length} kaydi (%` +
  `${((bulunan.length / KAYIT.length) * 100).toFixed(1)}) ve ` +
  `${bulunan.filter(sahipsiz).length}/${SAHIPSIZ} sahipsiz kalemi buluyor; ` +
  `toplam iz ${IZ} kayit, ${UY} uyari`);
24 bolge kaydi: 17 hedefi yanit veriyor, 7 sahipsiz, 2 unutulmus, 4 envanter disi

1. yontem basina aday ve sahipsiz kalem
yontem                    deneme   aday   dogru  yanlisP  sahipsiz kapsama %
pasif kayit derlemesi          0     17      16        1         4      66.7
sozluk denemesi              120     14      14        0         4      58.3
bagli kalem cikarimi          12      7       7        0         0      29.2
bolge aktarim istegi           4      0       0        0         0       0.0

2. yontemin biraktigi iz
yontem                    kayit   uyari kayit/aday kayit/sahipsiz aday/deneme
pasif kayit derlemesi         0       0       0.00           0.00           -
sozluk denemesi             120       1       8.57          30.00        0.12
bagli kalem cikarimi         12       0       1.71              -        0.58
bolge aktarim istegi          4       4          -              -        0.00

3. birlesim ve ortusme
kume                        aday    dogru   sahipsiz  kapsama %
+ pasif kayit derlemesi       17       16          4       66.7
+ sozluk denemesi             22       21          6       87.5
+ bagli kalem cikarimi        22       21          6       87.5
+ bolge aktarim istegi        22       21          6       87.5

4. kac yontemden cikiyor
yontem sayisi              kayit   sahipsiz   unutulmus
0 yontem                       3          1           0
1 yontem                       9          4           2
2 yontem                       8          2           0
3 yontem                       4          0           0
hicbir yontemin bulamadigi kayit: eski-saha, sube-1, sube-2
birlesim 21/24 kaydi (%87.5) ve 6/7 sahipsiz kalemi buluyor; toplam iz 136 kayit, 5 uyari

Sayılar ölçüm sınıfındadır; girdileri KS7–KS9’dur.

Yedi Sahipsiz Kayıt

Yirmi dört bölge kaydının 7’si sahipsizdir: kayıt durur, işaret ettiği hedef yanıt vermez. Oran %29,2’dir — bölgedeki her üç kayıttan biri bir hiçe bakar. Bunların yanında hedefi yanıt veren ama sorumlusu olmayan 2 unutulmuş kalem ve envanterde hiç geçmeyen ama çalışan 4 kalem vardır.

Bu üç sınıfın değerlendirme açısından ağırlığı aynı değildir. Envanter dışı dört kalem bir kapsam sorunudur: çalışıyorlar, kuruma hizmet ediyorlar, ama kapsam görüşmesinde adları geçmemiş. Unutulmuş iki kalem bir sorumluluk boşluğudur: bir bulgu çıkarsa raporun kime yazılacağı belirsiz kalır. Sahipsiz yedi kayıt ise en dikkat çekici olanıdır, çünkü bir kayıt bir adı bir hedefe bağlama sözüdür ve hedef ortadan kalktığında o söz, sözü sahiplenmeye hazır başka bir tarafa açık kalır. Kaydı sürdüren taraf kurumdur; hedefi sağlayan taraf artık kimse değildir.

Üç Yöntem, Üç Ayrı Kapsama

Birinci tablo üç yöntemi aynı ad uzayında koşturur. Pasif kayıt derlemesi 17 aday üretir, 16’sının bölgede karşılığı vardır ve kapsaması %66,7’dir. Sözlük denemesi 14 aday üretir ve %58,3 kapsar. Bağlı kalem çıkarımı yalnız 7 aday üretir — %29,2.

Fark yöntemlerin kalitesinden değil, neye baktıklarından gelir. Bağlı kalem çıkarımı bir sayfadan öteki sayfaya giden bağlantıları izler; bir ad ancak biri ona bağlantı verdiyse bulunur. Sahipsiz kalemler tam olarak kimsenin bağlantı vermediği kalemlerdir, bu yüzden bu yöntem yedi sahipsiz kaydın hiçbirini bulamaz. Aynı sütunda pasif derleme 4, sözlük denemesi 4 sahipsiz kalem çıkarır. Bir yöntem “en az adayı üreten” olduğu için değil, aradığı sınıfa yapısal olarak kör olduğu için elenir.

Yanlış pozitif sütunu tek bir kalemde doludur. Pasif derlemenin ürettiği kampanya-1 bölgede hiç yoktur: geçmişte bir sertifika kaydına girmiş, ad sonradan bölgeden kaldırılmıştır. Pasif kaynakların bu özelliği bir önceki dersteki arşiv kopyasıyla aynıdır — geçmişte doğru olan bir şey bugün doğru olmak zorunda değildir.

Yüz Yirmi Deneme, On Dört Ad

İkinci tablo bu kursun iz sütununu ilk kez bir yöntem seçimine bağlar. Pasif kayıt derlemesi hedefte sıfır kayıt bırakır ve en çok adayı bulan yöntemdir. Sözlük denemesi 120 deneme yapar, 14 ad bulur ve hedefte 120 kayıt bırakır; ad başına 8,57 kayıt, bulduğu sahipsiz kalem başına 30,00 kayıt. Bağlı kalem çıkarımı 12 kayıt bırakır ve ad başına 1,71 iz üretir.

Sözlük denemesinin isabet oranı aday/deneme sütununda görünür: 0,12. Yüz yirmi denemenin yüz altısı boşa gider ve boşa giden denemeler de kayıt bırakır. Savunma tarafından okunuşu şudur: mavi takımın bu yöntemi fark etmesi, var olan adlara gelen sorgulara değil, var olmayan adlara gelen sorguların yoğunluğuna bakmakla olur. Bu ders boyunca üretilen tek uyarıyı da o yoğunluk tetikler.

Dördüncü satır dersin en keskin karşılaştırmasıdır. Bölge aktarım isteği dört ad sunucusunda reddedilir: 0 aday, 4 kayıt, 4 uyarı. Toplam beş uyarının dördü, hiçbir ad getirmeyen bu adımdan gelir. İzin verilmiş olsaydı tek adımda bütün bölgeyi verirdi; verilmediğinde geriye yalnız iz kalır. Bir adımın beklenen getirisi yüksek diye denenmesi, gerçekleşen getirisi sıfır olduğunda yalnızca maliyet olur.

Birleşimin Durduğu Nokta

Üçüncü tablo yöntemleri birleştirir. İlk ikisi birlikte 21 kaydı bulur ve kapsama %66,7’den %87,5’e çıkar; sahipsiz kalem 4’ten 6’ya yükselir. Üçüncü ve dördüncü yöntem eklendiğinde her üç sayı da hiç değişmez. Bağlı kalem çıkarımının bulduğu yedi adın hepsi zaten ilk iki yöntemden çıkmıştır.

Dördüncü tablo bunu kalem kalem gösterir. Yirmi dört kaydın 4’ü üç yöntemden birden çıkar, 8’i ikisinden, 9’u yalnız birinden ve 3’ü hiçbirinden. Tek yöntemden çıkan dokuz kaydın 4’ü sahipsiz, 2’si unutulmuştur: kurumun en az farkında olduğu kalemler, en az yöntemin gördüğü kalemlerdir. Üç yöntemden birden çıkan dört kaydın hiçbiri sahipsiz ya da unutulmuş değildir; onlar bölgenin en görünür, en bakımlı adlarıdır.

Hiçbir yöntemin bulamadığı üç kayıt listenin sınırını çizer. sube-1 ve sube-2 numaralı adlardır ve sözlükte karşılıkları yoktur; eski-saha hem sahipsizdir hem de hiçbir pasif kayıtta izi kalmamıştır. Yani yedi sahipsiz kalemin altısı bulunur, biri bulunmaz — ve bulunmadığı bu koşumda ancak hakem envanteri elde olduğu için bilinir. Gerçek bir değerlendirmede bu kaydın varlığı hiç bilinmez; bilinen tek şey 21 addır.

Sahipsiz Kayıt Henüz Bir Kanıt Değildir

Altı sahipsiz kaydın bulunması bu kursun ölçüsüne göre altı aday demektir, altı bulgu değil. Bir kaydın hedefi yanıt vermiyor olabilir çünkü hedef geçici olarak kapalıdır, çünkü ad yalnız kurum ağının içinden çözümlenir ya da çünkü hedefin bulunduğu alan başka bir tarafça yeniden sahiplenilebilir durumdadır. Rapora giren bulgu yalnız üçüncü durumdur; ilk ikisi yanlış pozitiftir ve keşif adımlarının hiçbiri üçünü birbirinden ayıramaz.

Ayrımın bedeli iki kalemdir. Birincisi ek adımdır: her sahipsiz kayıt için hedefin bulunduğu hizmetin sahiplenmeye açık olup olmadığının sınanması gerekir. İkincisi ve daha kısıtlayıcı olanı kapsamdır: o sınama kurumun altyapısında değil, üçüncü tarafın altyapısında yapılır. Altı sahipsiz kaydın işaret ettiği hedeflerin hiçbiri kapsam tanımında adı geçen bir varlık değildir.

Bu, önceki derste ipucu sınıfı için yazılan kuralın ikinci karşılaşmasıdır ve burada daha belirgindir: bir kalemin bulunması serbesttir, doğrulanması ayrı bir yetki gerektirir. Altı adayın kaçının kanıta dönüştüğü bu konuda değil, kapsam görüşmesinden sonra belli olur.

Özet

  • Yirmi dört bölge kaydının 7’si sahipsizdir (%29,2): kayıt durur, hedefi yanıt vermez. Yanında 2 unutulmuş ve 4 envanter dışı kalem bulunur.
  • Üç yöntemin kapsaması %66,7, %58,3 ve %29,2’dir; bağlı kalem çıkarımı yedi sahipsiz kaydın hiçbirini bulamaz, çünkü sahipsiz kalem kimsenin bağlantı vermediği kalemdir.
  • Pasif kayıt derlemesi hedefte 0 kayıt bırakır ve en çok adayı bulur; tek yanlış pozitifi bölgeden kaldırılmış bir addır.
  • Sözlük denemesi 120 deneme ile 14 ad bulur (0,12 isabet), ad başına 8,57 ve sahipsiz kalem başına 30,00 kayıt bırakır; bu kursun beş uyarısının biri onun yoğunluğundan çıkar.
  • Bölge aktarım isteği 0 aday getirir, 4 kayıt ve 4 uyarı bırakır: toplam uyarının %80’i hiçbir ad üretmeyen tek adımdan gelir.
  • Birleşim iki yöntemden sonra %87,5’te durur; tek yöntemden çıkan 9 kaydın 4’ü sahipsiz, 2’si unutulmuştur, üç yöntemden çıkan 4 kaydın hiçbiri değildir.

Sonraki Adım

Üç ders sonunda dışarıdan görünen ad listesi hazırdır: yirmi bir ad, altısı sahipsiz. Ne var ki bir ad bir varlık değildir. abone adı bir hedefe çözümlenir, ama o hedefte ne çalıştığı bu ana kadar hiç sorulmadı. Bir kaydın işaret ettiği makine hiçbir bağlantı kabul etmiyor olabilir; üç servis birden sunuyor olabilir; ya da yalnız kurum ağından erişilebilen bir servisi dışarıya kapalı tutuyor olabilir. Üçü de aynı kayıtta aynı biçimde görünür.

Bunu ayıran adım, hedefin hangi bağlantı noktalarında yanıt verdiğini sınamaktır ve bu adım önceki üçünden farklıdır: hedefe doğrudan ve çok sayıda istek gider. Sonraki ders tarama türlerini tek bir eksende karşılaştırır — her tür kaç adayı buluyor, kaçını kaçırıyor, savunmada kaç kayıt ve kaç uyarı üretiyor. Bu derste 136 kayıt ve 5 uyarı biriktirildi; o derste iki sayı da başka bir büyüklük sınıfına geçer.

İlerlemeni kaydetmek ve not almak için Giriş yap

Notlarım

Not almak için giriş yapmalısın.

Aramak için yazmaya başlayın.

↑↓ Esc gezin · aç · kapat