Трябва ми едея за клиент/сервер програмче под Perl

19 отговора 591 прегледа
#1

Трябва ми едея за клиент/сервер програмче под Perl

Хора помогнете ...

Може ли някой да ми даде код на Perl който да прави следното.

1. Да се състой от две части

- Едната Server-na която да чака за определена задача и да ги изпълнява
например при даден сигнал да пуска команда

- Втората клиентска част с която да се задава какво ще пуска Server-nata част

Server-nata част да стой като демон и пустоянно да слушти.

Идеята е на дадено PC да се пусне Server-nata час
А от друго PC да се дават задачите.

Това не е троян. Искам да си направя програма за НЕТ Зала която да е базирана на Linux. Perl+MySQL+Apache

От Ineternet Expolorer ще се задава кой компютър да ползва НЕТА.
Като се даде правo на дадено PC то сърверната част трабва да го пусне.
Това ще стане като се пускат команди с ipchains или iptables


Кажете как се прави това. Ако може пуснете и source код.

10 %

Отговор
в отговор на нeзнaeщ #2

Re: Трябва ми едея за клиент/сервер програмче под

Ti pa prekaleno slozno neshto go davash za perl...

Mozhesh primerno da go napravish po slednq nachin..
Serverskata programka se izpulnqva ot crontaba na 1min da rechem i proverqva sudarzhanieto na file-a /home/user/tmp/command
v sluchai che ima takuv file.. otvarq go i vutre namira -> comanda:id
izpulnqva comandata i setva ID-to na 0 ili ako nqma ID iztriva file-a .. vse edno

clientskata programa... purvo trqbva da mozhe ad prati file-a na server-a.. tova mozhe da stane kato se napravi DSA key za SSH-a, koito se zaposva v server-a, taka che authotication-a da ne stava po password a po DSA key...

sled tova prosto podavash komandite s scp command(tva e file-a) user@ip:~/tmp

i tova e obshto vzeto.. koda ne e problem da se napravi, no se iziskva vreme.. i chesno.. nqma da trugna da go pisha bez da mi trqbva... ako poznavash perl nqma da ti e problem da si go napravish... ostanaloto e do pitane na vuprosi...

Отговор
в отговор на VlGOUR #3

Re: Трябва ми идея за клиент/сервер програмче под

Не може ли да се ползва следното:

$server=IO::Socket::INET->new(LocalPort=> PORT, Proto => "udp")

Отговор
в отговор на нeзнaeщ #4

Re: Трябва ми идея за клиент/сервер програмче под

e.. avno ne sum tolkova advanced...
no mozhesh da prochetesh podrobnosti na
[линк]

Отговор
в отговор на VlGOUR #5

Re: Трябва ми идея за клиент/сервер програмче под

Проблема не ми е как се присвояват стойности или как се събира, умножава и т.н.

А как мога да предавам данни с Perl от едно PC на друго.

Затова може ли малко помощ за този модул.
IO::Socket::INET

Мисля че това че е разковничето за цялата работа.

Най добре ако имам една примерна програмка използваща този модул

Отговор
в отговор на нeзнaeщ #6

Re: Трябва ми идея за клиент/сервер програмче под

Ami vizh kakvo pravi toq modul.. shtom si se zanimaval s perl i imash na rapolozhenie tutorial mislq che nqma da ti e trudno da pregledash /usr/lib/perl5/5.6.0/IO/Socket/INET.pl i da precenish kak da go izpolzvash...

PS: putq pri men e takuv.. pri teb mozhe da e razlichen v zavisimost ot versiqta....

Отговор
в отговор на нeзнaeщ #7

Re: Трябва ми едея за клиент/сервер програмче под Perl

слабо рабирам perl и не знам демон как с се пише на него (и дали може изобщо) Иначе на Цъ (С ) много лесно се прави и демон и IP socket - може би е добре демона да си го направиш на С а той като слуша на някой порт няма никав проблем клиента да е на perl

Отговор
в отговор на бeзxaбepниk #8

Re: Трябва ми едея за клиент/сервер програмче под Perl

Ами айде помогни.

Работата е там че има още доста работи да прави този демон.

Ето и цялата идея:

Да направя програма за НЕТ зала, Която се базира на:

Perl+MySQL+Apache+iptables

И ина следните задачи:
1. Отчитане на трафика на всяко PC
2. Блокиране на трафика към PC
3. Работа с различни тарифи.




Писмено е следното:

1. Да се състой от две части

- Едната Server-na която да чака за определена задача и да ги изпълнява
например при даден сигнал да пуска команда и да записва данните в база

- Втората клиентска част с която да се задава какво ще пуска Server-nata част


Проблема не ми е в работата с базата от данни и написването на web формите..


А как да се предават данните от Admin PC на Linux gateway

Може би с модула: IO::Socket::INET

Съгласен съм да напиша WEB интерфейса и работата с базата от данни (MySQL) и извличане на справките.
Но за комуникационата част сам още далеч.

Ще ми се това да бъде GNU project така че да се използва от много интернет зали.
Разбира се програмното обезпечение ще се търкаля на Linux.

Отговор
в отговор на нeзнaeщ #9

Re: Трябва ми едея за клиент/сервер програмче под Perl

пиши ми тука: bozho@issp.bas.bg
може да заформим нещо
пролемът ми е с времето (по-точно липсата му) ама да видим

Отговор
в отговор на нeзнaeщ #10

Re: Трябва ми едея за клиент/сервер програмче под Perl

Towa go polzwam kato parser na wunshni HTML stranici. Wij dali moje da ti swurshi rabota

$sock = new IO::Socket::INET ( PeerAddr => $SERVER_NAME,
PeerPort => 80,
Proto => 'tcp')
or die('Cannot connect to localhost.');

print $sock "GET /$PATH_ON_SERVER HTTP/1.0\n\n";
do
{
$buf = <$sock>;
chomp($buf);
print $buf # ili kakwoto tam iskash da prawish s $buf
}
while (index($buf, "</html>") == -1);
close(FILE);
$sock->close();
}

Отговор
в отговор на BlahBlah #11

Re: Трябва ми едея за клиент/сервер програмче под Perl

Може ли да го разтълкуваш горния пример.

И ако знаех как мога да подавам данни използвайки този модул

Отговор
в отговор на нeзнaeщ #12

Re: Трябва ми едея за клиент/сервер програмче под Perl

Mi kakwo da go komentiram te powecheto neshta sa standartni i gi pishe wuw wsqka knijka moje bi samo tezi 2 te:

1) close(FILE) - towa e izlishno zabrawih da go iztriq

2) print $sock "GET /$PATH_ON_SERVER HTTP/1.0\n\n"; - s towa izprashtash na web servera zaqwka za daden document /$PATH_ON_SERVER ti e imeto na documenta. Sled towa chakash da ti wurne wsichko ostanalo si gi go prwish kakwoto iskash. Zqwkata i otgowora minawat prez $sock koito w momenta ti e kato "tunel" do servera

Ako shte polzwash drugi protokoli i svoi server - organizirai si zaqwkite po razlichen nachin ako iskash no ideqta si ostawa sushtata - connectwash se, dawash zqwka i posle chakash otgowora

Отговор
в отговор на нeзнaeщ #13

Re: Трябва ми едея за клиент/сервер програмче под Perl

server-ната част се нарича apache. клиентската е известна и под името browser.

правиш си едно скриптче дето като го пуснеш пуска/спира/дава инфо за трафика. така че през браузер клиента да си се пуска/спира сам. както и да гледа колко е навъртял.

отделно може и някакъв администратор/дежурен да пуска или спира навалицата.

самото пускане и спиране май е най-лесно да го направиш от firewall-a (ipfwadm/ipchains/iptables).

и естествено слагаш и проверчица да не може пц1 да спре пц5 (т.е. да си правят мръсно един на друг клиентите)

ps. пък цялото обсъждане досега ми прилича малко на 'защо просто, като може и сложно'

TANSTAAFL! There AiNt Such Thing As A Free Lunch

Редактирано от onzi на

Отговор
в отговор на onzi #14

Re: Трябва ми едея за клиент/сервер програмче под Perl

Не съм съгласен с горното мнение защото:

iptables или ipchains трябва да останат с root права.

По default apacheto си дига като nobody.

Иначе става страшно.

Затова идеята беше да има сърверна част стартирана с root права и
да може да комуникира с някой клиент.

Получавайки сигнал тя ще провери от кой идва и тогава ще реши какво
да изпълни.

Затова и Linux e стабилен.
Защото всеки процес се изпълнява от някого.

А оставяйки Apacheto да се изпълнява от root то става и една заплаха.

А нека да оставим ipchains и iptables на root-a.
Иначе отиде ни firewall.

Ако греша поправетеме ...

Отговор
в отговор на нeзнaeщ #15

Re: Трябва ми едея за клиент/сервер програмче под Perl

ми то си има setuid за целта. то и pppd-то го пускаш като обикновен усер, ама то ти сменя рутингите - т.е. има админ права.

TANSTAAFL! There AiNt Such Thing As A Free Lunch
Отговор
в отговор на onzi #16

Re: Трябва ми едея за клиент/сервер програмче под Perl

Знам че може.

Но аз твърдя че не е удачно да се сетват ipchains или iptables та да може да се изпълняват от всеки.

Иначе отваряш вратичка ... за някой.

Ще кажеш че може да ограничиш кой да ползва дадена страница по
IP и т.н.

Но нека да оставим ipchains или iptables да може да се пускат само от root-a

Все пак с тях контролираш TCP трафика.

Нека да оставим това до тук.
И да търсим идей за развитие заложени в началото.

За да не стане БУМ някога ...

Отговор
в отговор на нeзнaeщ #17

Re: Трябва ми едея за клиент/сервер програмче под Perl

procheti pak kakvo sam ti pisal po-gore
route e programata, koiato se puska samo ot root (ili pri teb - iptables). pppd e programata, koiato puska vseku user (pri teb - nesto_si.cgi ili nesto_si.pl), koiato obache poneje e setuid-nata si vika route.

pak ako tolkoz te e strah - pishesh si ot skripta primerno vav /tmp/start i /tmp/stop i ot cron-a si vikash vsiaka minuta po nesto, koeto proveriava kakvo pishe tam i pravi kvoto triabva - puska, spira i t.n.

dosadata obache e che ako klienta iskash da go pusnesh v 16 chasa, 12 min i 10 sekundi, ot cron-a ste go pusne v 16:13. i klienta ste sedi 50 sekundi. dosta vreme si e tova.

TANSTAAFL! There AiNt Such Thing As A Free Lunch
Отговор
в отговор на нeзнaeщ #18

Re: Трябва ми едея за клиент/сервер програмче под Perl

може би модул Net::Server.

От името на модула май там е истината.

но несам го пробвал

Отговор
в отговор на a #19

Re: Трябва ми едея за клиент/сервер програмче под Perl

ето и един примерен код за server-a.
t.e. часта която ще чете даните и ще изпълнява нещо си:

----------------------------------------------------

#!/usr/bin/perl

use IO::Socket;
use POSIX;

use constant PORT => 7447;
use constant MAXTOREAD => 576;

$pid=fork;
exit if $pid;

POSIX::setsid() or die "Can't start new session: $!\n";

$time_to_die=0;
sub signal_handler { $time_to_die=1 }
$SIG{TERM}=$SIG{HUP}=\&signal_handler;
$SIG{PIPE}='IGNORE';

$server=IO::Socket::INET->new(LocalPort=> PORT, Proto => "udp") or die "Couldn't be udp server on port PORT : $@\n";

until($time_to_die) {

while ($sock=$server->recv($mesg,MAXTOREAD)) {

my ($port,$ipaddr) = sockaddr_in($server->peername);
$host=gethostbyaddr($ipaddr,AF_INET);

$host - това е хоста който праща информацията
$mesg - текста който се изпраща
......
......
Надолу ти си слагаш кода

}

}



За клиентската част:

----------------------------------------------

#!/usr/bin/perl

use IO::Socket;
use POSIX;

use constant PORT => 7447;
use constant SERVERHOST => "server_ip";

sub sendmesg {
my $mesg=$_[0];
my $sock=IO::Socket::INET->new(Proto => "udp",PeerPort=> PORT,
PeerAddr=>SERVERHOST) or print "Creating socket : $!\n";
$sock->send($mesg) or print "send: $!\n";
}

sendmesg($msg);

Отговор
в отговор на нeзнaeщ #20

Re: Трябва ми едея за клиент/сервер програмче под

ideqta za GNU e mnogo dobra no malko hora se saglasqvat s tova da pomagat znam edin 4ovek ako vlizash v IRc vlez v #700 tarsi Mr700 to e napravil takava programa i ve4e nqkolko zali rabotqt s neq no mislq 4e ispolzva komersialnoto ako si sladkodumen moje da ti pomogne . kazva se Dan4o :))))) Uspeh !!!

Отговор