sockets
  • lua
  • 2017-09-04 23 views 8 likes 
    8

    Belirli bir bağlantı noktasının durumunu izlememe yardımcı olun: "LISTENING", "CLOSE_WAIT", "ESTABLISHED". Ben netstat komutuyla bir analog çözümü vardır:Lua "soket" kütüphanesini kullanarak portun durumunu öğrenebilir miyim?

    local command = 'netstat -anp tcp | find ":1926 " ' 
    local h = io.popen(command,"rb") 
    local result = h:read("*a") 
    h:close() 
    print(result) 
    if result:find("ESTABLISHED") then 
        print("Ok") 
    end 
    

    Ama Lua socket library ile aynı yapmak gerekir. Mümkün mü?

    +0

    Neden? Elbette zaten kendi soketlerin durumunu biliyorsunuz? Dinle() 'yi çağırdıysanız, DİNLEME; Eğer connect() 'veya' accept() 'ismini verdiyseniz, ESTABLISHED; akış alınıp bitmişse, CLOSE_WAIT içinde. – EJP

    +0

    @EJP Soru, soketin, sorguyu oluşturan aynı işlem tarafından sahiplendiğini belirtmiyor. O zaman bile, bazı eyaletleri kolayca çıkaramazsınız - ör. TIME_WAIT - çekirdeği sorgulamadan. –

    cevap

    1

    LuaSocket'in kapakların altında kullandığı soket API'sini kullanarak başka bir işlemin sahip olduğu bir soketin durumunu sorgulayamazsınız.

    Başka bir işlem hakkındaki bilgilere erişmek için, bunun yerine işletim sistemini sorgulamanız gerekir. Linux üzerindeyseniz, bu genellikle proc dosya sistemine bakmak anlamına gelir.

    Lua'ya aşina değilim, ama hızlı bir Google bana bu projeyi veriyor: https://github.com/Wiladams/lj2procfs. İhtiyacınız olan ilgili /proc/net dosyaları için bir kod çözücü yazdıklarını varsayarak, muhtemelen ihtiyacınız olan bu olduğunu düşünüyorum.

    Hangi dosyaya gelince? Sadece durum buysa, ben http://www.onlamp.com/pub/a/linux/2000/11/16/LinuxAdmin.html

    1

    @Peter Dediğim gibi kaplı gibi tcp dosyayı istiyorum düşünüyorum netstat ağ bilgilerini, özellikle liman bağlantıları toplamak için proc dosya sistemi kullanır. LuaSockets'ın bağlantı bilgilerini almak için kendi kütüphanesi vardır. Örneğin,

    Eğer soket sunucu nesnesi haline nesneyi dönüştürerek, bağlantılarını almaya istekli olduğunu belirten master:listen(backlog) kullanabilirsiniz dinleme. Sunucu nesneleri kabul, getsockname, setoption, settimeout ve yakın yöntemleri destekler. Parametre bekleme listesi, hizmet için bekleyen sıraya alınabilecek istemci bağlantılarının sayısını belirtir. Sıra dolu ve başka bir istemci bağlantı girişiminde bulunursa, bağlantı reddedilir. Başarı durumunda, yöntem 1 değerini döndürür. Hata durumunda, yöntem sıfırlanır ve ardından bir hata iletisi gelir.

    Aşağıdaki yöntemler, yerel IP adresi ve bağlantı noktası numaralı bir numara ile bir dize döndürecektir. Hata durumunda, yöntem nil döndürür. client:getpeername() eş IP adresi ile bir dize döndürür, bağlantı için kullandığı eş liman sayısına göre ardından:

    master:getsockname() 
    client:getsockname() 
    server:getsockname() 
    

    da bu yöntemi söz konusudur. Hata durumunda, yöntem nil döndürür.

    "CLOSE_WAIT", "ESTABLISHED" veya almak istediğiniz diğer bağlantı bilgileri için lütfen Official Documentation'u okuyun. Yöntemlerin kısa açıklamalarıyla ihtiyacınız olan her şeye sahiptir.

    İlgili konular