└── 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 | ?> --------------------------------------------------------------------------------