Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
SNMP ile 15bin cihazdan veri alma
#11
Teşekkürler Güzel kardeşim de de işte sen konun başını kaçırmışsın yinede teşekkürler konu client server socket degil zorunlu olarak IdSNMP ile zorunlu olarak yazıcıdan veri dünyada tüm millet bu şekilde okuduğu için global olarak veri bu şekilde alacağız .. Yo arkadaş ben bak böylede alıyorum diye bir şey varsa pardon gönder örnek bir kod hemen deneyelim sadece 5 sene önceki gibi yine sohbet ediyorsun. Sohbeti bırak aynı yerde donme ben sana SNMP için örnek kodu verdim olay bu yapabiliyorsan buradan ilerlelemk zorundayız yoksa başka kod gönder oradan devam edelim.
Cevapla
#12
routerlerda max half open socket vardır, yani 10k client için bağlantı isteği gönderdiğinizde, routerin limitine geldiğinizde geri kalan bağlantıların tamamı connection timeout a uğrar, bu aklımızın bir kenarında dursun.

denemedim ama şahsi fikrim;
idicmp bileşenini thread içinde alıp deneyebilirsiniz burada durum ne oluyor?

eğerki sorununuz bilgisayarın network ip adresinin birden fazla icmp client soketi ile bind yapılamaması ise,
burada ya raw paket göndereceksiniz yada, windows tcp ip interfaceden bilgisayarınıza manuel 3 5 bin ip atayip
idicmp client ilede bu local ip lere soketi açmadan paketi göndermeden önce bind yapacaksınız, gerisini router halledecekdir.
bu işleri evinizdeki dsl fiber gibi cihazlarla yapıyorsanız çok sıkıntı yaşarsınız profesyonel donanıma ihtiyacınız var, internet servis sağlayıcınında throttesine uğrayabilirsiniz (süperonline de ben çok yaşıyorum 2 dk içinde 800 giden syn paketinde bağlantı 2 dk boyunca throtteleniyor)
linux tarafında daha kolay olur, windows tarafında winpcap kullanılabilir,
başka alternatiflerde mevcuttur.. selamlar.
Cevapla
#13
(28-03-2023, Saat: 20:03)vedat35 Adlı Kullanıcıdan Alıntı: routerlerda max half open socket vardır, yani 10k client için bağlantı isteği gönderdiğinizde, routerin limitine geldiğinizde geri kalan bağlantıların tamamı connection timeout a uğrar, bu aklımızın bir kenarında dursun.

denemedim ama şahsi fikrim;
idicmp bileşenini thread içinde alıp deneyebilirsiniz burada durum ne oluyor?

eğerki sorununuz bilgisayarın network ip adresinin birden fazla icmp client soketi ile bind yapılamaması ise,
burada ya raw paket göndereceksiniz yada, windows tcp ip interfaceden bilgisayarınıza manuel 3 5 bin ip atayip
idicmp client ilede bu local ip lere soketi açmadan paketi göndermeden önce bind yapacaksınız, gerisini router halledecekdir.
bu işleri evinizdeki dsl fiber gibi cihazlarla yapıyorsanız çok sıkıntı yaşarsınız profesyonel donanıma ihtiyacınız var, internet servis sağlayıcınında throttesine uğrayabilirsiniz (süperonline de ben çok yaşıyorum 2 dk içinde 800 giden syn paketinde bağlantı 2 dk boyunca throtteleniyor)
linux tarafında daha kolay olur, windows tarafında winpcap kullanılabilir,
başka alternatiflerde mevcuttur.. selamlar.

Çok teşekkürler desteğiniz için evet eski versiyonda icnpClient ve Idsnmp ile ping atıp aktifmi kontrol edip aktifse Snmp bilgisini alıyordum  ve cihaz yazıcılar 100-200 adet olduğu içinde sorun yoktu ve icmpClient OnReply durumunda işlem yapıyordum Delphi 7 ile yazdığımda Fakat bankanın siteminde blokyiyor o versiyon ping atılması bile yasakmış onun için sadece geriye başlıktanda anlaşılacağı üzere snmp ile bilgileri almak ve gelen cevap göre işlem yapmak kaldı. zaten şirketde testleri deniyorum. Serverlar ve altyapıda sorun yok ama cisko routerlar bahsettiğiniz sıkıntı yaşamadım öğrendiğim iyi oldu ama zaten hiç bir zaman aynı anda 10k socket açılmaz diye düşünüyorum. yapılan işlem milisaniye ler kadar sürer tabiki tüm networkde toplam socket sayısıdır sorun orası degil ama bilgi için teşekkürler aklımda olsun. Aynı anda zaten 10-20 thread çalıştırmayı planlıyorum. 
IdIcmpClient ile nasıl snmp isteği yapabilirim bir sorgu örneği gönderirmisinin? bunu bilmiyorum sadece ping fonksiyonunu kullanarak işlem yapmıştım.
Cevapla
#14
Evet arkadaşlar Sorun çözüme kavuşturdum. TIdSNMP tasarımından kaynaklı Artık kendi şirketimizde 1ms de tüm network bilgisini alabiliyorum sorunsuz. Zaman ve emek ayırıp cevap veren herkese teşekkürler. Bankada 4dk tek ipblok taraması biterken artık 16sn sürede geçti testleri.
Cevapla
#15
(29-03-2023, Saat: 13:24)clayhuseyin Adlı Kullanıcıdan Alıntı: Evet arkadaşlar Sorun çözüme kavuşturdum. TIdSNMP tasarımından kaynaklı Artık kendi şirketimizde 1ms de tüm network bilgisini alabiliyorum sorunsuz. Zaman ve emek ayırıp cevap veren herkese teşekkürler. Bankada 4dk tek ipblok taraması biterken artık 16sn sürede geçti testleri.
Selamlar,
Sorununuzun çözüldüğüne sevindim. İmkanınız olursa, bu tip bir yardıma ihtiyacı olan başka bir kişinin çözüme ulaşması için, çözüm kodunu paylaşmanızı rica ederim.
Yazılımcı, kahveyi koda çeviren bir organizmadır.
Cevapla
#16
(30-03-2023, Saat: 10:30)shooterman Adlı Kullanıcıdan Alıntı: Evet arkadaşlar Sorun çözüme kavuşturdum. TIdSNMP tasarımından kaynaklı Artık kendi şirketimizde 1ms de tüm network bilgisini alabiliyorum sorunsuz. Zaman ve emek ayırıp cevap veren herkese teşekkürler. Bankada 4dk tek ipblok taraması biterken artık 16sn sürede geçti testleri.
Selamlar,
Sorununuzun çözüldüğüne sevindim. İmkanınız olursa, bu tip bir yardıma ihtiyacı olan başka bir kişinin çözüme ulaşması için, çözüm kodunu paylaşmanızı rica ederim.

snmp konusu terminal sistemde (Server & Client) program yazanlar için eninde sonunda gerekli görünüyor. 
Bende bu konuyu araştırıyordum ve aşağıdaki linki buldum.
Paketi indirip incelemeniz bir fikir verebilir.
snmpserv & snmp çalışıyor.

http://synapse.ararat.cz/doku.php/download
Cevapla
#17
(02-04-2023, Saat: 12:51)muratcelik64 Adlı Kullanıcıdan Alıntı:
(30-03-2023, Saat: 10:30)shooterman Adlı Kullanıcıdan Alıntı: Evet arkadaşlar Sorun çözüme kavuşturdum. TIdSNMP tasarımından kaynaklı Artık kendi şirketimizde 1ms de tüm network bilgisini alabiliyorum sorunsuz. Zaman ve emek ayırıp cevap veren herkese teşekkürler. Bankada 4dk tek ipblok taraması biterken artık 16sn sürede geçti testleri.
Selamlar,
Sorununuzun çözüldüğüne sevindim. İmkanınız olursa, bu tip bir yardıma ihtiyacı olan başka bir kişinin çözüme ulaşması için, çözüm kodunu paylaşmanızı rica ederim.

snmp konusu terminal sistemde (Server & Client) program yazanlar için eninde sonunda gerekli görünüyor. 
Bende bu konuyu araştırıyordum ve aşağıdaki linki buldum.
Paketi indirip incelemeniz bir fikir verebilir.
snmpserv & snmp çalışıyor.

http://synapse.ararat.cz/doku.php/download

Evet dogru yoldasın bende TIdSnmp single thread destekli ve 161-162 portlarını açıp bağlanıp bilgi alıp hafızayı temizleyip sonra porttu kapatması için geçen sürede oluyor haya componettin tasarımı böyle synapse birazda kodlar ile oynayarak kendi istegime göre ayarlardım ve 5 sn binlerlerce cihaz oldugunda saatler sürer onun için ben 1mili saniye gibi veya networkdeki hıza bağlı olarak 10milisn gibi aralıkta içi yapıyorum toplamda 2-4 dk tüm cihazlardan gelen verileri alıyorum. kodu daha once gondermiştim sdandart snmp veri alma sadece funcsiyona cevirdim parametreli degişken alıyorum okadar.

function SNMPBilgiAl(const OID, Community, SNMPHost: AnsiString;TimeOut:integer; var Value: AnsiString): Boolean;
var
 SNMPSend: TSNMPSend;
begin
 SNMPSend := TSNMPSend.Create;
 try
   SNMPSend.Timeout:=TimeOut;
   SNMPSend.Query.Clear;
   SNMPSend.Query.Community := Community;
   SNMPSend.Query.PDUType := PDUGetRequest;
   SNMPSend.Query.MIBAdd(OID, '', ASN1_NULL);
   SNMPSend.TargetHost := SNMPHost;
   Result := SNMPSend.SendRequest;
   Value := '';
   if Result then
     Value := SNMPSend.Reply.MIBGet(OID);
 finally
   SNMPSend.Free;
 end;

procedure TForm14.Button7Click(Sender: TObject);
begin
TTask.Run(procedure
 Begin
 TThread.CreateAnonymousThread(
       procedure
         var cevap:ansistring;
         Parcala:TArray<string>;
         Aranan,Ipblok,Ipkalan,Basla:string;
         K,j:Integer;
         begin
         basla:=DateTimeToStr(now);
         Memo1.Lines.Add('Başla:'+Basla);
             Aranan:=Edit1.Text;
             parcala:=Aranan.split(['*']);
             for K :=Low(Parcala) to High(Parcala) do
             begin
                 Ipblok:=Parcala[0];
                 Ipkalan:=Parcala[1];
             end;

             TParallel.For(0, 255, procedure(I: Integer)
             begin
               SNMPBilgiAl('1.3.6.1.2.1.1.1.0','public',Ipblok+I.ToString+Ipkalan,StrToInt(Edit2.Text),cevap);
               if cevap=''then
                //Memo1.Lines.Add(Ipblok+I.ToString+Ipkalan)
               else begin
                 inc(j);
                 Memo1.Lines.Add('Bulunan:'+j.ToString+'-'+Ipblok+I.ToString+Ipkalan+':'+cevap);
                 end;
             end);
         Memo1.Lines.Add('Basla:'+basla);
         Memo1.Lines.Add('Bitti:'+DateTimeToStr(now));
         end).Start;
 end);
end;

bu kodlarla işimi çözdüm arkadaşlar ip adresinin 10.224.*.150 örnek veya 10.*.10.150 gibi * nerede ise oradaki blok ipler aranıyor.

Test başarılı oldu şimdi bunu Servis orarak asıl projeye göre değiştiriyorum .


Ek Dosyalar Resimler
   
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Logo Go3 de döviz tablosunda Date_ alanına veri (Çözüldü) yazma cinarbil 4 195 19-04-2024, Saat: 08:25
Son Yorum: cinarbil
  IEC 61850 Potokolünden veri alma shooterman 1 453 14-03-2024, Saat: 11:38
Son Yorum: shooterman
  Veri Tabanına Kontrollü Kayıt Yaptırma bünyamin68 15 859 08-03-2024, Saat: 00:06
Son Yorum: TuncayDelphi
  Problem - ZKTeco Cihazlardan Anlık Veri Alma mad85 16 8.197 25-12-2023, Saat: 11:35
Son Yorum: osiso
  [ÇÖZÜLDÜ]Firebase Bearer Token Alma shooterman 8 697 05-12-2023, Saat: 12:17
Son Yorum: shooterman



Konuyu Okuyanlar: 1 Ziyaretçi