Bài tập 1: Các Truy vấn PERL Cơ bản

Mục tiêu

  • Tạo các truy vấn Perl cơ bản và trích xuất dữ liệu, khám phá các tính năng và thành phần của Perl

Thời lượng thực hành: 20 phút

  1. Theo mặc định, máy Ubuntu-Perl được chọn, hãy nhấp vào Student.[Hình ảnh màn hình đăng nhập Ubuntu với tùy chọn “Student” được chọn]
  2. Nhập mật khẩu vào trường Mật khẩu và nhấn Enter hoặc nhấp vào Đăng nhập để đăng nhập.[Hình ảnh màn hình đăng nhập Ubuntu với trường mật khẩu]
  3. Nhấp vào Hiển thị ứng dụng ở góc dưới bên trái của Màn hình. Trong trường Tìm kiếm, nhập trình soạn thảo văn bản. Từ kết quả tìm kiếm, nhấp vào Trình soạn thảo văn bản.Bạn có thể khởi chạy bất kỳ trình soạn thảo văn bản nào bạn muốn.[Hình ảnh màn hình Ubuntu với kết quả tìm kiếm “trình soạn thảo văn bản”]
  4. Tạo chương trình đơn giản đầu tiên. Nhập đoạn mã sau vào Trình soạn thảo văn bản như được hiển thị trong ảnh chụp màn hình. Sau khi bạn đã nhập mã, hãy nhấp vào Lưu ở góc trên bên phải của Trình soạn thảo văn bản.[Hình ảnh màn hình của trình soạn thảo văn bản với đoạn mã sau:] #!/usr/bin/perl # Đoạn mã này sẽ in ra "Hello, World" print "Hello, World\n";

Cửa sổ Lưu dưới dạng xuất hiện, đặt tên tệp là test.pl, chọn vị trí để lưu tệp (ở đây là Màn hình) và nhấp vào Lưu. Thu nhỏ trình soạn thảo văn bản.

[Hình ảnh màn hình cửa sổ “Lưu dưới dạng” với tên tệp “test.pl” và vị trí lưu là “Màn hình”]

Khởi chạy một thiết bị đầu cuối. Trong thiết bị đầu cuối, nhập cd Desktop và nhấn Enter để thay đổi vị trí thư mục thành Màn hình.

[Hình ảnh màn hình của thiết bị đầu cuối với lệnh cd Desktop]

Nhập perl test.pl và nhấn Enter để thực thi.

[Hình ảnh màn hình của thiết bị đầu cuối với lệnh perl test.pl]

Khám phá một số kiến thức cơ bản về cú pháp của Perl. Bây giờ, hãy mở một Trình soạn thảo văn bản mới và nhập đoạn mã sau vào trình soạn thảo văn bản. Lưu tệp trên Màn hình với tên single-string.pl. Thu nhỏ Trình soạn thảo văn bản.

      #!/usr/bin/perl
$num = 7;
$txt = 'it is $num';
print $txt;
    

Trong thiết bị đầu cuối, nhập perl single-string.pl và nhấn Enter. Do dấu nháy đơn, giá trị của $num không được lấy và các ký tự theo nghĩa đen “

        ","n","u"vaˋ"m"đượcthe^mvaˋogiaˊtrịcủa‘","n","u"vaˋ"m"đượcthe^mvaˋogiaˊtrịcủa‘
      

txt`.

[Hình ảnh màn hình của thiết bị đầu cuối với lệnh perl single-string.pl và kết quả it is $num]

Tiếp theo, hãy xem xét kết quả của dấu nháy kép. Phóng to Trình soạn thảo văn bản và nhập cùng một đoạn mã, nhưng sử dụng dấu nháy kép như được hiển thị trong ảnh chụp màn hình. Lưu tệp.

      #!/usr/bin/perl
$num = 7;
$txt = "it is $num";
print $txt;
    

Chuyển sang thiết bị đầu cuối và nhập perl single-string.pl và nhấn Enter. Đầu ra 7 từ giá trị dấu nháy kép của $num được lấy và thêm vào giá trị của $txt. Dấu nháy kép nội suy các biến vô hướng và mảng, nhưng không phải băm. Mặt khác, bạn có thể sử dụng dấu nháy kép để nội suy các lát cắt của cả mảng và băm.

[Hình ảnh màn hình của thiết bị đầu cuối với lệnh perl single-string.pl và kết quả it is 7]

Toán tử nối “.” hợp nhất hai hoặc nhiều chuỗi. Hãy nhớ rằng, nếu chuỗi chứa dấu ngoặc kép, ký tự trả về và dấu gạch chéo ngược, tất cả các ký tự đặc biệt này cần được thoát bằng cách sử dụng dấu gạch chéo ngược.

Sử dụng “strict;” để viết mã tốt hơn và sạch hơn; nó bật pragma nghiêm ngặt, điều này sẽ buộc bạn khai báo các biến bằng từ khóa “my”. Đây là một thực hành lập trình tốt, hãy nhập đoạn mã sau vào Trình soạn thảo văn bản và Lưu tệp trên Màn hình.

      #!/usr/local/bin/perl
use strict;
my $var = 10;
print "$var";
    
  1. Vì bạn đã sử dụng “strict;”, biến phải được khai báo bằng từ khóa “my”. Ảnh chụp màn hình cho thấy một kịch bản khi điều này không xảy ra. Điều này sẽ giúp bạn tiết kiệm thời gian gỡ lỗi trong tương lai khi bạn sử dụng tùy chọn nghiêm ngặt.

[Hình ảnh màn hình của trình soạn thảo văn bản với đoạn mã sử dụng “strict;”]

  1. Đây là cách bạn định nghĩa một mảng trong Perl. Hơn nữa, có nhiều cách khác nhau để lưu trữ dữ liệu trong một mảng. Mở Trình soạn thảo văn bản và nhập đoạn mã sau. Lưu tệp với tên array.pl. Trong thiết bị đầu cuối, nhập perl array.pl và nhấn Enter. #!/usr/local/bin/perl my @array=(a,b,c,d); print @array;

Một mảng đã có sẵn. Nếu bạn không biết kích thước của mảng, hãy sử dụng các tùy chọn sau:

      @array= qw/a b c d e/;
print $size=scalar (@array);
    

Các hàm push, pop, shift và unshift cho mảng Perl có thể được sử dụng trong Perl để thêm/xóa các phần tử mảng

  • Perl Push: Thêm phần tử mảng vào cuối mảng hiện có
  • Perl Pop: Xóa phần tử cuối cùng khỏi mảng
  • Perl Shift: Xóa phần tử đầu tiên khỏi mảng
  • Perl Unshift: Thêm một phần tử ở đầu mảng

Để xem cách hoạt động này, bạn có thể nhập đoạn mã sau vào một tệp và lưu lại.

      @days = ("Mon","Tue","Wed");
print "1st: @days\n";
push(@days, "Thu"); # thêm một phần tử vào cuối mảng
print "2nd when push : @days\n";
unshift(@days, "Fri"); # thêm một phần tử ở đầu mảng
print "3rd when unshift : @days\n";
pop(@days);
print "4th when pop : @days\n"; # xóa một phần tử khỏi cuối mảng.
shift(@days); # xóa một phần tử khỏi đầu mảng.
print "5th when shift : @days\n";
    

Phần lớn các lệnh và toán tử đều giống nhau đối với các ngôn ngữ khác, nhưng bạn phải xem lại cú pháp. Một ví dụ về xử lý tệp được hiển thị bên dưới:

      open(FH," <file.txt");
my @content=; # chỉ định đầu vào của mảng là FH.
foreach(@content)
{
    print "$_";
}
close FH;
    

Bước 19 sẽ giúp bạn in nội dung tệp trên màn hình đầu ra. Viết một chương trình để thực hiện File I/O.

Tính năng đầu tiên cần sử dụng là tính năng Tell; nhập đoạn mã sau, sau đó chạy nó để xem kết quả:

      open(FH, "test.pl");
while()
{
    $a=tell FH;
    print "$a";
}
    

Tiếp theo, luôn thực hiện tìm kiếm tệp. Bạn có thể quen thuộc với chương trình fseek có chức năng tương tự. Bạn có thể thực thi tương tự trong Perl. Nhập như sau:

      open FH, '+ <','input.txt';
seek FH, 5, 0; # Điều này sẽ bắt đầu đọc dữ liệu sau 5 byte.
$/ = undef;
$out = ;
print $out;
close FH;
    

Điều này sẽ tìm kiếm tệp 5 byte trước khi nó bắt đầu. Nếu tệp đầu vào có chuỗi “Hello” ở phía trước, thì chỉ các ký tự sau năm ký tự đầu tiên sẽ được in.

Để xóa tệp trong Perl, hãy sử dụng lệnh Unlink như sau:

unlink(“tên tệp hoặc đường dẫn tệp đầy đủ”);

Chúng ta cũng có thể làm việc với Thư mục và điều này được hiển thị trong chuỗi mã tiếp theo:

      opendir(DIR,"/etc/var");
@content=readdir(DIR);
foreach(@content)
{
    print "$_\n";
}
closedir(DIR);
    
  1. Đoạn mã này sẽ in tất cả các tệp trong thư mục đã chỉ định.
  2. Như vậy, bạn đã bao gồm các kiến thức cơ bản của lệnh. Điều này kết thúc bài tập thực hành.

Bài tập 2: Xử lý Socket Perl

Mục tiêu

  • Tạo và thao tác socket bằng Perl
  • Tạo các tập lệnh Perl tùy chỉnh

Thời lượng thực hành: 20 phút

  1. Như chúng ta đã trình bày, việc thao tác socket là điều cần thiết để thành thạo với tư cách là người kiểm thử thâm nhập.
  2. Theo mặc định, máy Ubuntu-Perl được chọn, hãy nhấp vào Student.Nếu bạn đã đăng nhập, hãy bỏ qua bước 4.[Hình ảnh màn hình đăng nhập Ubuntu với tùy chọn “Student” được chọn]
  3. Nhập mật khẩu vào trường Mật khẩu và nhấn Enter hoặc nhấp vào Đăng nhập để đăng nhập.[Hình ảnh màn hình đăng nhập Ubuntu với trường mật khẩu]
  4. Perl có giao diện lập trình ứng dụng (API) gốc mà qua đó các socket có thể được triển khai. Để dễ dàng, có nhiều mô-đun Comprehensive Perl Archive Network (CPAN) có thể hỗ trợ bạn khi bạn viết các chương trình socket.
  5. Đối với máy chủ, bạn cần thực hiện các bước sau:
    • Tạo Socket
    • Liên kết socket với địa chỉ và cổng
    • Lắng nghe socket trên địa chỉ cổng đó
    • Chấp nhận các kết nối máy khách cố gắng kết nối bằng cổng và IP của máy chủ
    • Thực hiện các thao tác
  6. Đối với máy khách
    • Tạo Socket
    • Kết nối với Máy chủ bằng địa chỉ cổng của nó
    • Thực hiện các thao tác
  7. Để tạo máy chủ, hãy nhập đoạn mã sau vào bất kỳ trình soạn thảo văn bản nào bạn chọn và lưu tệp với tên server-perl.pl.
  8. Trong trường hợp này, chúng tôi đang lưu tệp trên Màn hình. use IO::Socket; use strict; use warnings; my $socket = new IO::Socket::INET ( LocalHost => 'localhost', LocalPort => '12345', Proto => 'tcp', Listen => 1, Reuse => 1, ); die "Could not create socket: $!n" unless $socket; print "Waiting for the client to send datan"; my $new_socket = $socket->accept(); while(<$new_socket>) { print $_; } close($socket);

Tiếp theo, hãy nhập đoạn mã sau để tạo máy khách

      use strict;
use warnings;
use IO::Socket;
my $socket = new IO::Socket::INET (
PeerAddr => 'localhost',
PeerPort => '12345',
Proto => 'tcp',
);
die "Could not create socket: $!n" unless $socket;
print $socket "Hello this is socket connection!n";
close($socket);
    

Chạy cả hai trong cửa sổ riêng của chúng để kết nối, như được hiển thị trong ảnh chụp màn hình. Cho đến nay, bạn đã tạo các socket và kết nối, sau đó gửi tin nhắn, tạo chương trình trò chuyện.

[Hình ảnh màn hình của hai thiết bị đầu cuối, một chạy máy chủ và một chạy máy khách]

Lập trình trong Perl không gây ra sự cố về khả năng di chuyển, điều này phổ biến khi sử dụng các shell khác nhau trong tập lệnh shell. Xử lý lỗi rất dễ dàng trong Perl.

Bạn có thể viết các chương trình dài và phức tạp trong Perl một cách dễ dàng vì tính rộng lớn của nó. Điều này trái ngược với Shell, không hỗ trợ không gian tên, mô-đun, đối tượng hoặc tính kế thừa.

Shell có ít thư viện có thể tái sử dụng hơn so với CPAN của Perl. Shell kém an toàn hơn. Nó gọi các hàm bên ngoài (các lệnh như mv và cp phụ thuộc vào shell đang được sử dụng). Perl thực hiện hầu hết công việc hữu ích của nó trong khi sử dụng các hàm nội bộ.

Bây giờ, hãy xem xét việc phân tách một quy trình; nhập đoạn mã sau, như được hiển thị trong ảnh chụp màn hình trong Trình soạn thảo văn bản và lưu tệp với tên fork.pl trên Màn hình.

      #!/usr/bin/perl -w
system("curls http://192.168.177.200 &");
print "This print function came AFTER the curl request!\n";
    

Sau đó, chạy mã như được hiển thị trong ảnh chụp màn hình.

[Hình ảnh màn hình của thiết bị đầu cuối chạy tập lệnh fork.pl]

tiếp theo :

  1. Kết quả đầu ra cho thấy lệnh curl chạy trong nền, sau đó quy trình của chương trình Perl tiếp tục thực thi. Việc tách rời quy trình có thể được sử dụng để thực thi các lệnh hệ thống như curl và wget ở chế độ nền.
  2. Hãy xem xét một ví dụ phức tạp hơn, nơi bạn sẽ tạo một chương trình quét cổng đơn giản. Sử dụng bất kỳ trình soạn thảo văn bản nào, hãy tạo tập lệnh Perl trên Màn hình bằng cách nhập như sau và lưu nó dưới dạng portscanner.pl: #!/usr/bin/perl -w use strict; use warnings; use IO::Socket; # Kiểm tra xem người dùng đã cung cấp một tên máy chủ hay chưa if (@ARGV < 1) { die "Cách sử dụng: $0 <tên máy chủ hoặc IP>\n"; } my $hostname = $ARGV[0]; my @ports = (20, 21, 22, 23, 25, 53, 80, 110, 143, 443, 465, 587, 993, 995); print "Quét cổng $hostname:\n"; foreach my $port (@ports) { my $socket = IO::Socket::INET->new( PeerAddr => $hostname, PeerPort => $port, Proto => 'tcp', Timeout => 5 # Thời gian chờ 5 giây ); if ($socket) { print "Cổng $port đang mở\n"; close($socket); } else { print "Cổng $port đang đóng\n"; } }

Chạy mã như được hiển thị trong ảnh chụp màn hình và thay đổi tham số đầu vào cho tên máy chủ hoặc địa chỉ IP. Điều này kết thúc bài tập thực hành.

[Hình ảnh màn hình của thiết bị đầu cuối chạy tập lệnh portscanner.pl]

Bình luận về bài viết này

Thịnh hành