ComputerSecurityStudent (CSS) [Login] [Join Now]




|UNIX >> Perl Lessons >> Current Page |Views: 10765

(Perl: Lesson 7)

{ Extracting with split, binding operator =~, & back references }


Section 0. Background Information
  1. What is Perl
    • Perl is a high-level, general-purpose, interpreted, dynamic programming language. Perl was originally developed by Larry Wall in 1987 as a general-purpose Unix scripting language to make report processing easier.  Since then, it has undergone many changes and revisions and become widely popular amongst programmers. Larry Wall continues to oversee development of the core language, and its upcoming version, Perl 6. Perl borrows features from other programming languages including C, shell scripting (sh), AWK, and sed.  The language provides powerful text processing facilities without the arbitrary data length limits of many contemporary Unix tools, facilitating easy manipulation of text files. Perl gained widespread popularity in the late 1990s as a CGI scripting language, in part due to its parsing abilities.

  2. Getting Perl
    • For the purposes of these perl lesson, I will be using a perl package that comes standard on Backtrack, Ubuntu and most flavors of Linux and Unix.
    • However, if you are using Windows, instead of a Linux, Unix or MAC operating system, you still have options.
  3. Pre-Requisite
  4. Lab Notes
    • In this lab we will do the following:
      1. We will download a program that contains various extraction examples for the strings "PASS_MAX_DAYS 99999" and "PASS_MAX_DAYS=99999".
      2. The program will provide extraction examples using split, the binding operator =~, and using the special perl back reference variables $1 and $2.  

  5. Legal Disclaimer
    • As a condition of your use of this Web site, you warrant to computersecuritystudent.com that you will not use this Web site for any purpose that is unlawful or that is prohibited by these terms, conditions, and notices.
    • In accordance with UCC § 2-316, this product is provided with "no warranties, either express or implied." The information contained is provided "as-is", with "no guarantee of merchantability."
    • In addition, this is a teaching website that does not condone malicious behavior of any kind.
    • Your are on notice, that continuing and/or using this lab outside your "own" test environment is considered malicious and is against the law.
    • © 2013 No content replication of any kind is allowed without express written permission.

Section 1. Login to BackTrack
  1. Start Up VMWare Player
    • Instructions:
      1. Click the Start Button
      2. Type Vmplayer in the search box
      3. Click on Vmplayer

     

  2. Open a Virtual Machine
    • Instructions:
      1. Click on Open a Virtual Machine

     

  3. Open the BackTrack5R1 VM
    • Instructions:
      1. Navigate to where the BackTrack5R1 VM is located
      2. Click on on the BackTrack5R1 VM
      3. Click on the Open Button

     

  4. Edit the BackTrack5R1 VM
    • Instructions:
      1. Select BackTrack5R1 VM
      2. Click Edit virtual machine settings

     

  5. Edit Virtual Machine Settings
    • Instructions:
      1. Click on Network Adapter
      2. Click on the Bridged Radio button
      3. Click on the OK Button

     

  6. Play the BackTrack5R1 VM
    • Instructions:
      1. Click on the BackTrack5R1 VM
      2. Click on Play virtual machine

     

  7. Login to BackTrack
    • Instructions:
      1. Login: root
      2. Password: toor or <whatever you changed it to>.

     

  8. Bring up the GNOME
    • Instructions:
      1. Type startx

 

Section 2. Bring up a console terminal
  1. Start up a terminal window
    • Instructions:
      1. Click on the Terminal Window

     

  2. Obtain the IP Address
    • Instructions:
      1. ifconfig -a
    • Note(FYI):
      • My IP address 192.168.1.111.
      • In your case, it will probably be different.

 

Section 3. Download lesson7a.pl
  1. Become the student user and make a directory
    • Instructions:
      1. su - student
      2. mkdir -p perl_lessons
      3. cd perl_lessons

     

  2. Download lesson7a.pl
    • Instructions:
      1. wget http://www.computersecuritystudent.com/UNIX/PERL/lesson7/lesson7a.pl
      2. chmod 700 lesson7a.pl
      3. perl -c lesson7a.pl

     

  3. Run lesson7a.pl
    • Instructions:
      1. ./lesson7a.pl
    • Note(FYI):
      • Before continuing to the proof of lab section.
      • Read each line of the code and examine how each subroutine executes.
      • Then read the following "Analyze The Code" section.

 

Section 4. Analyze The Code
  1. SheBang Directive
    • Instructions:
      1. vi lesson7a.pl
      2. :set nu
      3. Press the <Enter> key
    • Note(FYI):
      • Line 1: #!/usr/bin/perl
        • #! - is called the SheBang Directive.  SheBang is an interpreter directive that tells Linux to load the following program.
        • /usr/bin/perl - is the Perl Interpreter.  SheBang tells the program loader to run the Perl Interpreter.

     

  2. Explaining Lines 3 through 14
    • Instructions:
      1. Arrow down to line 4
    • Note(FYI):
      • Line 4: $str1 = "PASS_MAX_DAYS 99999";
        • Assign the string "PASS_MAX_DAYS 99999" to variable $str1.
      • Line 12: ($tag,$value) = split(/\s+/,$str1);
        • Use the split function to parse out the tag PASS_MAX_DAYS and its' value 99999 from the variable $str, using the delimiter "\s+".
      • Line 13: print "1) [tag]: $tag, [value]: $value\n";
        • Print the extracted values for $tag and $value.

     

  3. Explaining Lines 15 through 28
    • Instructions:
      1. Arrow down to line 18
    • Note(FYI):
      • Line 18: $str2 = "PASS_MAX_DAYS 99999";
        • Assign the string "PASS_MAX_DAYS 99999" to variable $str2.
      • Line 26: ($tag,$value) = split(/=/,$str1);
        • Use the split function to parse out the tag PASS_MAX_DAYS and its' value 99999 from the variable $str, using the delimiter "=".
      • Line 27: print "2) [tag]: $tag, [value]: $value\n";
        • Print the extracted values for $tag and $value.

     

  4. Explaining Lines 30 through 46
    • Instructions:
      1. Arrow down to line 32
    • Note(FYI):
      • Line 32: $str3 = "PASS_MAX_DAYS=99999";
        • Assign the string "PASS_MAX_DAYS 99999" to variable $str2.
      • Line 46: ($value = $str3)=~ s/.*=(\d+).*/$1/;
        • # =~ is called a binding operator. It is used to search, modify and translate strings.
          # s/ means search and substitute
          # . means any character except newline
          # * means match 0 or many times
          # .*= means matches any character except a newline to the = sign
          # \d means match one digit
          # \d+ means match one or more sequential digits
          # $1 is called a special perl variable called a back reference variable
          # (\d+) so we are telling perl to search for a GROUP of numbers and assign them to $1
          # If a match is found, then $1 is then assigned to $value
      • Line 45: print "3) [value]: $value\n";
        • Print the extracted number $value.

     

  5. Explaining Lines 48 through 64
    • Instructions:
      1. Arrow down to line 50
    • Note(FYI):
      • Line 50: $str4 = "PASS_MAX_DAYS 99999";
        • Assign the string "PASS_MAX_DAYS 99999" to variable $str2.
      • Line 59: $str4 =~ /(\w+)=(\d+)/;
        • # =~ is called a binding operator. It is used to search, modify and translate strings.
          # \w Match a single word character
          # \w+ Match one or more single word characters.
          # (\w+) Search for a one or more single word characters before the = sign, assign to $1
          # \d Match a single digit character
          # \d+ Match one or more single digit characters.
          # (\d+) Search for a one or more single digit characters after the = sign, assign to $2
      • Line 60: $tag = $1;
        • Assign $1, which is equivalent to the match (\w+), which is equivalent to PASS_MAX_DAYS
      • Line 61: $value = $2;
        • Assign $2, which is equivalent to the match (\d+), which is equivalent to the extracted value of 99999.
      • Line 63: print "4) [tag]: $tag, [value]: $value\n";
        • Print the extracted values for $tag and $value.

     

  6. Explaining Lines 66 through 81
    • Instructions:
      1. Arrow down to line 68
    • Note(FYI):
      • Line 68: $str5 = "PASS_MAX_DAYS=99999";
        • Assign the string "PASS_MAX_DAYS=99999" to variable $str5.
      • Line 77: ($tag,$value) =~ ($str5 =~ m/(\w+)=(\d+)/);
        • # =~ is called a binding operator. It is used to search, modify and translate strings.
          # \w Match a single word character
          # \w+ Match one or more single word characters.
          # (\w+) Search for a one or more single word characters before the = sign, assign to $tag
          # \d Match a single digit character
          # \d+ Match one or more single digit characters.
          # (\d+) Search for a one or more single digit characters after the = sign, assign to $value
      • Line 78: print "5) [tag]: $tag, [value]: $value\n";
        • Print the extracted values for $tag and $value.

     

  7. Save and Quit
    • Instructions:
      1. Press the <Esc> key
      2. :q!
      3. Press the <Enter> key

 

Section 5. Proof of Lab
  1. Project
    • Instructions:
      1. You will be creating two seperate programs: lesson7b.pl and lesson7c.pl.
      2. vi lesson7b.pl
        1. Define the SheBang Perl Directive
          • e.g., #!/usr/bin/perl
        2. The program should ask for today's date.
          • e.g., print "Enter today\'s date in the following format (YYYY-MM-DD): ";
        3. The program should assign variable $date to standard input
          • e.g., chomp(my $date = <stdin>);
        4. The program should split $date into the variables $year, $month and $day.
          • e.g., ($year,$month,$day) = split(/-/,$date);
        5. The program should display the date in a different format.
          • e.g., print "Today\'s date: $day/$month/$year\n";
      3. vi lesson7c.pl
        1. Define the SheBang Perl Directive
          • e.g., #!/usr/bin/perl
        2. The program should ask for today's date.
          • e.g., print "Enter today\'s date in the following format (YYYY-MM-DD): ";
        3. The program should assign variable $date to standard input
          • e.g., chomp(my $date = <stdin>);
        4. The program should split $date into the variables $year, $month and $day.
          • e.g.,  ($year,$month,$day) = ($date =~ m/(\d+)-(\d+)-(\d+)/);
        5. The program should display the date in a different format.
          • e.g., print "Today\'s date: $day/$month/$year\n";

       

  2. Proof of Lab
    • Instructions
      1. chmod 700 lesson7b.pl lesson7c.pl
      2. perl -c lesson7b.pl
      3. perl -c lesson7c.pl
      4. ./lesson7b.pl
        • Enter Today's Date: 2013-04-10
      5. ./lesson7c.pl
        • Enter Today's Date: 2013-04-10
      6. date
      7. echo "Your Name"
        • Put in your actual name in place of "Your Name"
        • e.g., echo "John Gray"
      8. Do a PrtScn, Paste into a word document, and upload to Moodle.
    • Proof Of Lab Instructions:
      1. Press the PrtScn key
      2. Paste into a word document
      3. Upload to Moodle
     


Help ComputerSecurityStudent
pay for continued research,
resources & bandwidth