└── LinuxBestPractices
├── chapter15
└── html-insertion.pl
├── chapter18
└── mail_via_sendmail.pl
├── chapter2
└── checkkey.pl
└── chapter3
└── memcached.php
/LinuxBestPractices/chapter15/html-insertion.pl:
--------------------------------------------------------------------------------
1 | #!/usr/bin/perl
2 | use strict;
3 | use warnings;
4 | use Net::Pcap;
5 | use NetPacket::Ethernet;
6 | use NetPacket::IP;
7 | use NetPacket::TCP;
8 | use Socket;
9 | use Net::RawSock;
10 |
11 | my $err;
12 | my $dev = $ARGV[0];
13 |
14 | my $html =
15 | "
test ";
16 |
17 | unless ( defined $dev ) {
18 | $dev = Net::Pcap::lookupdev( \$err );
19 | if ( defined $err ) {
20 | die 'Unable to determine network device for monitoring - ', $err;
21 | }
22 | }
23 | my ( $address, $netmask );
24 | if ( Net::Pcap::lookupnet( $dev, \$address, \$netmask, \$err ) ) {
25 | die 'Unable to look up device information for ', $dev, ' - ', $err;
26 | }
27 |
28 | my $object;
29 | $object = Net::Pcap::open_live( $dev, 65535, 1, 0, \$err );
30 | unless ( defined $object ) {
31 | die 'Unable to create packet capture on device ', $dev, ' - ', $err;
32 | }
33 | my $filter;
34 | Net::Pcap::compile( $object, \$filter, '(tcp dst port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0))', 0, $netmask )
35 | && die 'Unable to compile packet capture filter';
36 | Net::Pcap::setfilter( $object, $filter )
37 | && die 'Unable to set packet capture filter';
38 |
39 | #Set callback function and initiate packet capture loop
40 |
41 | Net::Pcap::loop( $object, -1, \&process_packets, '' )
42 | || die 'Unable to perform packet capture';
43 |
44 | Net::Pcap::close($object);
45 |
46 | sub process_packets {
47 | my ( $user_data, $header, $packet ) = @_;
48 |
49 | #Strip ethernet encapsulation of captured packet
50 | my $ether_data = NetPacket::Ethernet::strip($packet);
51 |
52 | # Decode contents of TCP/IP packet contained within
53 | # captured ethernet packet
54 |
55 | my $ip_in = NetPacket::IP->decode($ether_data);
56 | my $tcp_in = NetPacket::TCP->decode( $ip->{'data'} );
57 | if ( $tcp_in->{'data'} =~ m /GET \/ HTTP/ ) {
58 |
59 | ## Create IP
60 | my $ip_out = NetPacket::IP->decode('');
61 |
62 | ## Init IP
63 | $ip_out->{ver} = 4;
64 | $ip_out->{hlen} = 5;
65 | $ip_out->{tos} = 0;
66 | $ip_out->{id} = 0x1d1d;
67 | $ip_out->{ttl} = 0x5a;
68 | $ip_out->{src_ip} = $ip->{'dest_ip'};
69 | $ip_out->{dest_ip} = $ip->{'src_ip'};
70 | $ip_out->{flags} = 2;
71 |
72 | ## Create TCP
73 | my $tcp_out = NetPacket::TCP->decode('');
74 |
75 | my $htmllength = length($html);
76 | ## Init TCP
77 | $tcp_out->{hlen} = 5;
78 | $tcp_out->{winsize} = 0x8e30;
79 | $tcp_out->{src_port} = $tcp->{'dest_port'};
80 | $tcp_out->{dest_port} = $tcp->{'src_port'};
81 | $tcp_out->{seqnum} = $tcp->{'acknum'};
82 | $tcp_out->{acknum} = $tcp->{'seqnum'} + ( $ip->{'len'} - ( $ip->{'hlen'} + $tcp->{'hlen'} ) * 4 );
83 | $tcp_out->{flags} = ACK | PSH | FIN;
84 | $tcp_out->{data} = "HTTP/1.1 200 OK\r\n" . "Content-Length: $htmllength" . "\r\nConnection: close\r\nContent-Type:text/html;charset=utf-8\r\n\r\n" . "$html";
85 |
86 | # Assemble
87 | $ip_out->{proto} = 6;
88 | $ip_out->{data} = $tcp_out->encode($ip_out);
89 |
90 | # Create RAW
91 | my $pkt = $ip_out->encode;
92 |
93 | # Write to network layer
94 | Net::RawSock::write_ip($pkt);
95 | }
96 | }
97 |
--------------------------------------------------------------------------------
/LinuxBestPractices/chapter18/mail_via_sendmail.pl:
--------------------------------------------------------------------------------
1 | #!/usr/bin/perl
2 | use strict;
3 | use warnings;
4 | use IO::Socket;
5 | use POSIX;
6 | use MIME::Base64;
7 | use Encode;
8 | use encoding 'utf8';
9 | use POSIX qw(strftime);
10 | use Sys::Hostname;
11 | $| = 1;
12 | my @mail_contents = (
13 | '电商第二平台我友商城为您带来元宵节的祝福',
14 | '电商第二平台我友商城为您带来元宵节的祝福',
15 | '电商第二平台我友商城为您带来元宵节的祝福',
16 | '电商第二平台我友商城为您带来元宵节的祝福',
17 | '电商第二平台我友商城为您带来元宵节的祝福',
18 | '电商第二平台我友商城为您带来元宵节的祝福',
19 | '电商第二平台我友商城为您带来元宵节的祝福',
20 | '电商第二平台我友商城为您带来元宵节的祝福',
21 | '电商第二平台我友商城为您带来元宵节的祝福',
22 | '电商第二平台我友商城为您带来元宵节的祝福',
23 | '电商第二平台我友商城为您带来元宵节的祝福',
24 | '电商第二平台我友商城为您带来元宵节的祝福'
25 |
26 | );
27 | my @mail_subjects = (
28 | '新年快乐,我友商城邀您进入电商运营新时代!',
29 | '节日快乐,电商第二平台我友商城诚邀您的入驻!',
30 | '新年新气象,我友商城邀您进入低成本、多渠道、多平台的电商运营时代!',
31 | '新年新气象,我友商城助您新年锦上添花!',
32 | '掌柜们新年快乐!我友商城真诚邀您进入全新电商时代!',
33 | '大掌柜的,新年快乐!我友商城邀您进入电商运营新时代!',
34 | '新的一年开启新的希望,我友商城真诚邀您进入电商新时代!',
35 | '摆脱单一平台运营,更低成本、更多机遇,我友商城诚邀您进入电商新时代!',
36 | '新年快乐,欢迎入驻我友网电商平台,享受更低成本更多机遇!',
37 | '元宵节快乐,我友商城邀您进入电商运营新时代!',
38 | '新春快乐,电商第二平台我友商城诚邀您的入驻!',
39 | '我友商城邀您的入驻,开启电商运营新时代!'
40 | );
41 | open( MAIL_LIST, '<', 'mail_list.txt' ) or die $!;
42 | open( MAIL_LOG, '>>', 'mail_logs.txt' ) or die $!;
43 |
44 | while () {
45 | chomp;
46 | my ( $mail_name, $mail_domain ) = split( /@/, $_ );
47 | my $mail_subject = $mail_subjects[ int( rand( $#mail_subjects + 1 ) ) ];
48 | my $mail_content = $mail_contents[ int( rand( $#mail_contents + 1 ) ) ];
49 | my $tt = time();
50 | my $host_id = hostname();
51 | $mail_content =
52 | $mail_content
53 | . "
";
58 |
59 | my $subject_gb2312_base64 =
60 | encode_base64( encode( "gb2312", $mail_subject ) );
61 | $subject_gb2312_base64 =~ s/\s+//g;
62 | my $content_gb2312_base64 =
63 | encode_base64( encode( "gb2312", $mail_content ) );
64 | my $rand_int = int( rand(100001) ) + 50000;
65 | my @ds = (
66 | 'sina.com', 'yahoo.com.cn', '21cn.com', 'tom.com',
67 | 'msn.com', 'live.cn', 'vip.sina.com', '188.com',
68 | 'yahoo.com', 'yahoo.cn'
69 | );
70 | my $ds1 = $ds[ int( rand( $#ds + 1 ) ) ];
71 | my $from = $rand_int . '@' . $ds1;
72 | my $mail = $mail_name . '@' . $mail_domain;
73 |
74 | my $cmd =
75 | "echo -e \"Reply-To: $from\nFrom: $from\nTo: $mail\nContent-Type: text/html;charset=gb2312\nContent-Transfer-Encoding:base64\nSubject: =?gb2312?B?$subject_gb2312_base64?=\nContent-Type: text/html; charset=\"gb2312\"\n\n$content_gb2312_base64\n\n\" | sendmail -f$from -F $from $mail";
76 | system($cmd);
77 | print MAIL_LOG $mail, "\n";
78 | sleep(4);
79 |
80 | }
81 | close(MAIL_LOG);
82 | close(MAIL_LIST);
83 |
84 |
--------------------------------------------------------------------------------
/LinuxBestPractices/chapter2/checkkey.pl:
--------------------------------------------------------------------------------
1 | #!/usr/bin/perl -wl
2 | use Digest::Perl::MD5 'md5_hex';
3 | use POSIX qw(strftime);
4 |
5 | $|=1;
6 | my $password = 'blesswoyo';
7 | my $errurl = 'http://err.woyo.com/woyo.mp3';
8 | my $result = 'http://err.woyo.com/woyo.wma';
9 |
10 | while (<>) {
11 | ($uri,$client,$ident,$method) = ( );
12 | ($uri,$client,$ident,$method) = split;
13 | my $time_from = strftime "%Y%m%d%H%M%S", localtime(time - 1*3600);
14 | my $time_to = strftime "%Y%m%d%H%M%S", localtime(time + 1*3600);
15 | next unless ($uri =~m/^http:\/\/(.+?)\/(.*)\?key=([0-9]{14})(.+)$/);
16 | if (($4 eq md5_hex("/".$2.$3.$password)) && ($3 > $time_from) && ($3 < $time_to)) {
17 | $result = "http:\/\/$1:81\/$2";
18 | } else {
19 | $result = $errurl;
20 | }
21 | } continue {
22 | print $result;
23 | }
24 |
--------------------------------------------------------------------------------
/LinuxBestPractices/chapter3/memcached.php:
--------------------------------------------------------------------------------
1 | setOption(Memcached::OPT_DISTRIBUTION, Memcached::DISTRIBUTION_CONSISTENT);
30 | $m->setOption(Memcached::OPT_LIBKETAMA_COMPATIBLE, true);
31 | $m->addServers($servers);
32 |
33 | $count = 0;
34 | while ($count < 10000) {
35 | $m->set(generateRandomString(), 1);
36 | $count++;
37 | }
38 |
39 | ?>
--------------------------------------------------------------------------------