Pokaż wyniki 1 do 10 z 10

Temat: klient-serwer::win-linux

  1. #1
    Zarejestrowany
    Nov 2006
    Skąd
    Polska/Poland
    Postów
    1,191

    Question klient-serwer::win-linux

    wymyśliłem sobie ciekawe usprawnienie jednak mam spore problemy z realizacją
    otóż mam terminal na win2k3 (.110.8)który łaczy sie do bazy na debianie (.110.10) - średnio to jest około 100 połączeń. czasem mam potrzebę ustalić kto ustanowił jakieś połączenie z debianem: np:
    192.168.110.10:3050 192.168.110.8:2277 ESTABLISHED14746/fb_inet_server
    bo np. pid 14746 zżera cały procek. wiem że połączenie przyszło z 2k3 z portu 2277 - to akurat jasne. następnie idę na 2k3 odpalam sobie tcpview szukam tego portu, określam PID procesu który to nawiązał i w ProcessExplorer szukam jaki user odpalił taki PID - wtedy wiem, ale to niewygodne jest i każdy sie z tym zgodzi. wymyśliłem więc ze mogę wyciągnąć z debiana numer portu (tu:2277)
    przesłać to do 2k3, tam aplikacja wyciągnie z połączeń ten właśnie numer portu, PID procesu i usera i odeśle mi ładnie na debiana, bajka by była
    osiągnięcie tego na dwóch linuksach nie było by dla mnie większym problem - bash + kilka dodatkowych programów i po sprawie jednak z win już gorzej niestety.
    dałem to do perla bo:
    jest mi w sumie najbliższy i co nieco kumam i jeśli ktoś zajmie się tym tematem mam nadzieję pokumać jeszcze bardziej...
    jest dalece przenośny
    mogłaby być jeszcze np. java ale jej nie znam praktycznie dlatego wolę perl'a
    przeglądałem CPAN i jest kilka modułów które mogłyby być przydatne ale jednak obsługa sieci i winsock z perla jest dla mnie póki co jeszcze nie jasna za bardzo
    BTW: taki myk typu klient-serwer byłby swojego rodzaju trojanem i gdyby go jeszcze podrasować mógłby robić inne rzeczy ale ja potrzebuje jedynie to co wyżej opisałem; ciekawe jak jakiś AV by na takie rzeczy reagował

    pzdr.
    ***********
    * markossx *
    ***********

  2. #2
    Zarejestrowany
    Jun 2006
    Skąd
    rand(.eu)
    Postów
    8,748

    Domyślnie

    Kod:
    use Win32;
    cala seria modulow... dawno nie pisalem nic pod w32 ale zobaczymy... jak bede mial chwilke dzisiaj to cos sprobuje zrobic - jutro kolega na urlop jedzie na 3 tygodnie i ja przejmuje jego dzialke programistyczna, wiec dzisiaj mam spoooory briefing co i jak :P
    ctrl-alt-del.cc - soft reset site for IT admins and other staff :-)

  3. #3
    Zarejestrowany
    Nov 2006
    Skąd
    Polska/Poland
    Postów
    1,191

    Domyślnie

    miałem sporo roboty i dopiero teraz moge wrócić z tematem
    po przemysleniu wszystkiego co mówiłeś i co znalazłem zrobię tak, że uruchomię na windows
    Kod:
    Net::HTTPServer
    i za pomocą
    Kod:
    Win32::Daemon::Simple
    wyciągnę potrzebne dane na temat procesu. trzeba zapisac go w katalogu serwera www potem za pomocą LWP na przykład zgłościc sie po ten pliczek i sobie go wyświetlić. wróce do domu to powalcze z tym. rodzi sie jeszcze problem jak z linuxa przekazać do win wyłapany ciąg?
    ostatecznie zrobię tak że pobiorę z 2k3 cały wynik netstat, i wynik tasklist i obrobię go już na linux. jednak interesuje mnie jak przekazać do win ten ciąg i tam uruchomić cały mechanizm
    w sumie można to zrobić nawet bez perla ale będzie instruktywnie
    ***********
    * markossx *
    ***********

  4. #4
    Zarejestrowany
    Jun 2006
    Skąd
    rand(.eu)
    Postów
    8,748

    Domyślnie

    Bardzo prosto drogi Watsonie

    Juz byloby zrobione i wisialo na forum gdyby nie to ze spalil mi sie jeden dosc wazny serwer. Firma Ontrack zarobi na tym a ja mam urwanie tylnej czesci ciala przywracajac kilka baz, ktore nie mialy backupow :-(

    Ja bym to widzial tak. Aby proces byl maly uzyc IO::Socket do napisania serwera HTTP prostego, ewentualnie dolozyc nieco do RAM uzywajac ktoregos modulu co to robi

    Wyniki - format w sumie jaki chcesz... ja bym zrobil dosc prosto...

    Kod:
    GET http://win2k3.lan/portowner/10.0.0.1:3306 HTTP/1.1
    skrypt/usluga moze to nawet czytac jako linie textu z socketa, ma pobrac tylko ten adres 10.0.0.1:3306 gdzie jest to IP serwera linuxowego oraz port... bo to widzisz z netstata na linuxie, ze dana maszyna laczy sie do tego serwera na ten port wiec pytasz winde kto sie laczy do tego IP i portu.

    Perl odpala 'netstat -na' i czyta z procesu jak z pliku obrabiajac sobie dane tekstowe. Ostatnia kolumna zawiera PID... a majac pid mamy 'tasklist /v /fi "pid eq $pid" /fo csv' i to moze byc zwracane na socket... tzn wczesniej tylko dac odpowiedni http code i masz cala usluge... w sumie to bedzie tego hmmm... strzelam na oko 25 linii kodu no moze ciutke wiecej...

    Wtedy mozesz to sobie czytac jak chcesz, czym chcesz, zasysac automatycznie itd... alb zanim zwrocisz dane ladnie je parsowac (ten CSV z tasklist'a) i wyswietlac jako klucz=wartosc dla czytelnosci wiekszej... jak Ci wygodniej!

    Jakbys nie dawal rady z implementacja daj znac, wrzuce kod na forum jak znajde nieco czasu.

    EDIT:
    Dla jasnosci 10.0.0.1 to linux, 10.0.0.10 to win2k3.lan... GET wychodzi z linuxa do windy i pyta o proces ktory laczy sie z windy do danego IP i portu na zdalnej maszynie.
    ctrl-alt-del.cc - soft reset site for IT admins and other staff :-)

  5. #5
    Zarejestrowany
    Nov 2006
    Skąd
    Polska/Poland
    Postów
    1,191

    Domyślnie

    próbowałem to zwalczyć ale niestety jest jeszcze kilka rzeczy w perlu, które musze poznac
    lepiej więc jak masz kod albo jakies części to bądź tak dobry i umieść tu na forum, może jak przeanalizuje co napisałes pare rzeczy mi sie rozjasni...
    ***********
    * markossx *
    ***********

  6. #6
    Zarejestrowany
    Jun 2006
    Skąd
    rand(.eu)
    Postów
    8,748

    Domyślnie

    Cytat Napisał TQM Zobacz post
    w sumie to bedzie tego hmmm... strzelam na oko 25 linii kodu no moze ciutke wiecej...
    No dobra... 30 linii (wliczajac puste dodane dla czytelnosci) nie uzywajac zadnych modulow do obslugi HTTP tylko jadac po surowych socketach

    Kod:
    use IO::Socket;
    use strict;
    
    sub getPID {
    	my ($proto, $peer) = @_;
    	return undef if !defined $proto or !defined $peer;
    	chomp(my @netstat = `netstat -nao`);
    	@netstat = grep(/$proto.*?$peer/i, @netstat);
    	my @PIDs = map { /(\d+)$/ } @netstat;
    	return $PIDs[0] || undef;
    }
    
    my $sock = IO::Socket::INET->new(Listen    => 5,
    	LocalPort => 9962,
    	Proto      => 'tcp') or die "Can't bind : $@\n";
    
    while (my $c = $sock->accept()) {
    	my @req;
    	while (<$c>) { /\w/ ? push @req, $_ : last };
    	@req = grep (/^GET\s+/i, @req);
    	$req[0] =~ m!/(TCP|UDP)/(.*?:\d+)!i;
    	if (my $pid = getPID($1, $2)) {
    		chomp(my @resp = `tasklist /v /fi "pid eq $pid" /fo csv`);
    		print $c "Content-type: text/html\n\n";
    		print $c join "\n", @resp, "\n";
    	} else {
    		print $c "Content-type: text/html\n\nERROR: No such connection!\n";
    	}
    	$c->close;
    }
    W kodzie nie ma demonizacji czy tez w jezyku microsoftu ustawienia programu jako uslugi, ale... jak ktos bardzo chce to polecam http://www.roth.net/perl/Daemon/ i http://search.cpan.org/~daveroth/Win...2/Scheduler.PM - samo zrobienie uslugi windows zajmie 2-3x tyle kodu co cala aplikacja wiec nie wiem czy to ma sens robic to na forum.

    Dobra... jak to dziala? Odpalamy skrypta i z innej maszyny robimy sobie tak:
    Kod:
    tm@TQM-desktop:~$ GET http://winxp.lan:9962/TCP/10.0.0.5:22
    Content-type: text/html
    
    
    "Image Name","PID","Session Name","Session#","Mem Usage","Status","User Name","CPU Time","Window Title"
    "putty.exe","5580","Console","0","2,552 K","Running","TQM-LENOVO\tqm","0:00:02","10.0.0.5 - PuTTY"
    Czyli jak widac robi to czego sie od niego oczekuje!

    Serwerek slucha na porcie 9962 (czyli literkami bedzie 'proc') jak mi sie zdaje hihi, dalej pobiera jako URL protokol (tcp lub udp - wielkosc znakow nie ma znaczenia) oraz na koncu adres zdalnej maszyny. Tak wiec serwerek chodzi sobie na windows, laczymy sie z innej maszyny w LAN i pytamy o to jaki program laczy sie z tego windowsa do 10.0.0.5:22 i dostajemy odpowiedz w CSV, ktora dalej mozemy sobie opracowac czym chcemy!

    Aplikacji nie testowalem dokladnie ale zwraca prawdziwe dane, to wiem na pewno Jesli jedna aplikacja lub kilka aplikacji laczy sie do tego samego serwera na ten sam port (np 2 przegladarki wchodza na te sama strone) to pokaze sie tylko jeden proces - mozna nieco zmienic kod i bedzie raportowac wszystkie ale to zostawiam jako cwiczenie dla czytelnikow

    Jak ktos bedzie chcial abym wyjasnil dokladnie kod to prosze o info - jak znajde pare minut miedzy robieniem serwerow to opisze.
    ctrl-alt-del.cc - soft reset site for IT admins and other staff :-)

  7. #7
    Zarejestrowany
    Nov 2006
    Skąd
    Polska/Poland
    Postów
    1,191

    Domyślnie

    odpaliłem w końcu Twój kod - urlop i inne rzeczy; i próbowałem kombinować żeby uruchamiał się jako usługa albo był przynajmniej procesem działającym w tle jednak za każdym razem zostawało mi okienko od cmd
    próbowałem z Win32:aemon, Win32::Process ale również za pomocą windowsowego instsrv z Windows Resource Kits też dupa. Nie wspomnę o problemach z dodaniem modułu Daemon
    być może coś nie tak zakodowałem ale okienka sie nie pozbyłem tym sposobem.
    jeśli juz uda mi sie zainstalować kod jako usługe to nie mogę jej odpalić w services.msc - zawiesza sie zwyczajnie. próbowałem na różne sposoby, czyli z samym kodem skryptu, potem z kodem skompilowanym do .exe...
    nie jest to problem jakis kosmiczny wiadomo, że drażni jak coś nie chce wyjść jak by sie chcialo...
    ostatecznie odpalam przy starcie systemu plik .exe i śmiga.
    dzięx za pomoc TQM
    ***********
    * markossx *
    ***********

  8. #8
    Zarejestrowany
    Jun 2006
    Skąd
    rand(.eu)
    Postów
    8,748

    Domyślnie

    Jak bede mial chwilke przepuszcze to przez komercyjny kompilator - on robi uslugi ponoc choc jeszcze tego nie uzywalem w tej postaci. Bedziesz mial .exe ktory sam zainstaluje sie jako usluga przy pierwszym odpaleniu... W sumie instalacja uslugi to jedno a taki exe to drugie...
    ctrl-alt-del.cc - soft reset site for IT admins and other staff :-)

  9. #9
    Zarejestrowany
    Nov 2006
    Skąd
    Polska/Poland
    Postów
    1,191

    Domyślnie

    kompilowałem perl2exe - zassałem trial (mam nadzieje ze to co skompilował nie przestanie chodzić po 30 dniach ).
    jeśli bedziesz miał chwilkę to zerknij moze Tobie sie schowa jednak nie ma sie czym przejmować: okienko jednak się ukrywa - w inny sposób niż zakładałem ale zawsze
    ***********
    * markossx *
    ***********

  10. #10
    Zarejestrowany
    Jun 2006
    Skąd
    rand(.eu)
    Postów
    8,748

    Domyślnie

    to na poczatku kodu daj...

    Kod:
    close(STDERR);
    close(STDIN);
    nie bedzie wyswietlac informacji ze trial
    ctrl-alt-del.cc - soft reset site for IT admins and other staff :-)

Podobne wątki

  1. Zmiana MAC w win XP działa w WIN 7 nie ?
    By Anthracis in forum Wardriving
    Odpowiedzi: 4
    Autor: 02-07-2010, 14:16
  2. Klient FTP
    By FX12 in forum C/C++
    Odpowiedzi: 0
    Autor: 04-13-2008, 13:53
  3. Klient WHOIS pod Windows
    By ssemtex in forum C/C++
    Odpowiedzi: 3
    Autor: 03-03-2008, 13:27
  4. Klient PPP(oE)
    By wacky in forum Delphi/Pascal/Lisp
    Odpowiedzi: 5
    Autor: 10-22-2007, 08:58
  5. potrzebny program w bcb C++ klient/serwer
    By powerfly in forum Off Topic
    Odpowiedzi: 1
    Autor: 06-20-2007, 21:47

Zasady Postowania

  • Nie możesz zakładać nowych tematów
  • Nie możesz pisać wiadomości
  • Nie możesz dodawać załączników
  • Nie możesz edytować swoich postów
  •  
Subskrybuj