ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ Τμήμα Πληροφορικής

Σχετικά έγγραφα
Εργαστήριο 4: Εργαλεία Συστήματος UNIX. Διδάσκων: Γιώργος Χατζηπολλάς. Στο εργαστήριο θα μελετηθούν: Εργαστηριακή Άσκηση 2 Παραδείγματα χρήσης awk

Web and HTTP. Βασικά Συστατικά: Web Server Web Browser HTTP Protocol

Εργαστήριο 4 Ασκήσεις: Διαχείριση Δικτύου (nmap, iptables) και Προχωρημένες Εντολές Unix (grep, ps, cut, find)

ΗY335: Δίκτυα Υπολογιστών Χειμερινό Εξάμηνο Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης Διδάσκουσα: Μαρία Παπαδοπούλη

α) η καταγραφή και η σύλληψη της δικτυακής κίνησης (capture) και β) η ανάλυση της δικτυακής κίνησης.

XAMPP Apache MySQL PHP javascript xampp

Σύντομη παρουσίαση των εργαλείων/εντολών telnet, ping, traceroute nslookup και nmap, zenmap

Εισαγωγη στην html. Η δομή μιας ιστοσελίδας (αρχείο html) Η βασική δομή ενός αρχείου html είναι η εξής: <html> <head>

Δυναμικές Ιστοσελίδες Εισαγωγή στην Javascript για προγραμματισμό στην πλευρά του client

Για το μέρος αυτό της άσκησης θα υλοποιήσετε μια εφαρμογή κελύφους η οποία θα χρησιμοποιείται ως εξής:

Τι είναι ένα δίκτυο υπολογιστών; Αρχιτεκτονική επιπέδων πρωτοκόλλων. Δικτυακά πρωτόκολλα

Εργαλεία ανάπτυξης εφαρμογών internet Ι

Επίπεδο δικτύου IP Forwading κτλ

Συνοπτικός Οδηγός Χρήσης του Moodle για τον Καθηγητή

ΤΕΙ ΚΑΒΑΛΑΣ. Πτυχιακή εργασία ΕΙΣΑΓΩΓΗ. Μιλτιάδης Κακλαμάνης

ΕΓΧΕΙΡΙΔΙΟ ΜΑΘΗΤΗ. της Πλατφόρμας Τηλεκατάρτισης

Ιόνιο Πανεπιστήμιο Τμήμα Πληροφορικής Εισαγωγή στην Επιστήμη των Υπολογιστών Δίκτυα υπολογιστών. (και το Διαδίκτυο)

ΕΠΛ 012 Εισαγωγή στο Παγκόσμιο Πλέγμα Πληροφοριών

ΑΣΚΗΣΗ. Συγκομιδή και δεικτοδότηση ιστοσελίδων

ΚΕΡΑΜΟΠΟΥΛΟΣ ΕΥΚΛΕΙΔΗΣ

ΚΟΙΝΩΝΙΚΗ ΔΙΚΤΥΩΣΗ ΜΕΣΩ ΚΙΝΗΤΩΝ ΣΥΣΚΕΥΩΝ: ΧΡΗΣΗ ΔΕΚΤΗ GPS ΓΙΑ ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΗΣ ΚΟΙΝΩΝΙΚΗΣ ΔΙΚΤΥΩΣΗΣ ΣΕ ΚΙΝΗΤΗ ΣΥΣΚΕΥΗ

ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΑ ΕΡΓΑΛΕΙΑ ΓΙΑ ΤΟ ΔΙΑΔΙΚΤΥΟ

Εισαγωγή στον Παγκόσμιο ιστό και στη γλώσσα Html. Χρ. Ηλιούδης

Λογισµικό (Software SW) Λειτουργικά Συστήµατα και ίκτυα

Εργαστήριο 3. Εγκατάσταση LAMP Stack στο AWS

Τεχνολογίες Παγκόσμιου Ιστού. 1η διάλεξη

ίκτυα - Internet Υπηρεσίες Internet O Παγκόσµιος Ιστός (World Wide Web) Ηλεκτρονική Αλληλογραφία ( ) Υπηρεσία FTP (File Transfer Protocol)

Εισαγωγή στην PHP. ΕΣΔ 516 Τεχνολογίες Διαδικτύου. Περιεχόμενα. Περιεχόμενα. ΕΣ 516: Τεχνολογίες ιαδικτύου. ΕΣ 516: Τεχνολογίες ιαδικτύου

ΕΡΓΑΣΤΗΡΙΟ 1: 1 Εισαγωγή, Χρήσιμες Εφαρμογές

Πληροφορική Τμήμα Σχεδιασμού & Τεχνολογίας Ξύλου & Επίπλου Αντώνιος Καραγεώργος Ευανθία Τσιλιχρήστου. Μάθημα 5 ο Τεχνολογίες Διαδικτύου: HTML I

Η γλώσσα προγραμματισμού C

6 Εισαγωγή στο Wordpress 3.x

Πλοήγηση www / Με τον Internet Explorer

«Μηχανή Αναζήτησης Αρχείων» Ημερομηνία Παράδοσης: 30/04/2015, 09:00 π.μ.

Τεχνικός Εφαρμογών Πληροφορικής

50 Ketseo,Theoni Sarif,Omar 104

Μόλις επανεκκινηθεί το inetd, η υπηρεσία θα απενεργοποιηθεί. Μπορείτε να απενεργοποιήσετε το inetd με την εντολή:

Επίπεδο Μεταφοράς. (ανεβαίνουμε προς τα πάνω) Εργαστήριο Δικτύων Υπολογιστών Τμήμα Μηχανικών Η/Υ και Πληροφορικής

ΔΗ Μ Ι Ο ΥΡ Γ Ι Α W I K I με τ η χρήση τ η ς υπ ηρεσίας h t t p : / id ot.com /

ΤΕΧΝΟΛΟΓΙΚΟ ΠΑΝΕΠΙΣΤΉΜΙΟ ΚYΠΡΟΥ

Βασικές Έννοιες Web Εφαρμογών

Διαδίκτυο: Ιστορία, Δομή, Υπηρεσίες

ΕΡΓΑΣΤΗΡΙΟ 1: Εισαγωγή, Χρήσιμες Εφαρμογές

ΣΥΣΤΗΜΑΤΑ SCADA. Μέρος 5. Δικτύωση για Απομακρυσμένο Έλεγχο και Μεταφορά Δεδομένων

Πρωτόκολλα Επικοινωνίας και Τείχος Προστασίας

Εργασία «Διαχείριση Δικτύων» Ιούνιος 2014, Θεσ/νίκη

Επικοινωνία Client/Server Απομακρυσμένη Κλήση Διαδικασιών

ΔΙΚΤΥΑ. Διδάσκοντες: Π. Αγγελάτος, Δ. Ζήνδρος Επιμέλεια διαφανειών: Π. Αγγελάτος Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών

ΟΔΗΓΙΕΣ ΧΡΗΣΗΣ CLASSWEB Εισαγωγή βαθμολογιών από διδάσκοντες μέσω Διαδικτύου

Περιεχόμενα. Πρόλογος... xiii

Δίκτυα Η/Υ στην Επιχείρηση

Open eclass Πλατφόρμα Ασύγχρονης Τηλεκπαίδευσης

ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C


Οδηγός Εγκατάστασης και Χρήσης του Arebas Easy

Εισαγωγή στις ΤΠΕ ΙΙ Γιάννης Βρέλλης ΠΤΔΕ-Πανεπιστήμιο Ιωαννίνων. World Wide Web. Παγκόσμιος Ιστός

Τεχνολογία Διοίκησης Επιχειρησιακών Διαδικασιών

ΕΣΔ 232: ΟΡΓΑΝΩΣΗ ΔΕΔΟΜΕΝΩΝ ΣΤΗ ΚΟΙΝΩΝΙΑ ΤΗΣ ΠΛΗΡΟΦΟΡΙΑΣ. Ακαδημαϊκό Έτος , Εαρινό Εξάμηνο. Εργαστηριακή Άσκηση 1 17/01/2012

Οδηγός γρήγορης εγκατάστασης. (Για Windows και MAC) Ασύρματη κάμερα IP HD περιστροφής / κλισης για εσωτερικούς χώρους v3.14

ΕΡΓΑΣΙΑ. (στο μάθημα: Τεχνολογίες Εφαρμογών Διαδικτύου του Η εξαμήνου σπουδών του Τμήματος Πληροφορικής & Τηλ/νιών)

wget --post-file meme.jpg :9646

Περιεχόμενα. Λίγα λόγια από το συγγραφέα... 7

ΤΕΧΝΟΛΟΓΙΕΣ ΣΧΕΔΙΑΣΗΣ ΔΙΑΔΙΚΤΥΑΚΟΥ ΤΟΠΟΥ (Web Site Design Technologies)

Τεχνολογίες Διαδικτύου

Field Service Management ΕΓΧΕΙΡΙΔΙΟ ΧΡΗΣΗΣ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ Τµήµα Πληροφορικής ΕΠΛ 646 Προχωρηµένα Θέµατα Βάσεων Δεδοµένων

Οδηγίες για την εγκατάσταση του πακέτου Cygwin

Διαδικτυακές Υπηρεσίες

Η Υλοποίηση της Επικοινωνίας. Κατανεµηµένα Συστήµατα

Βασικές Υπηρεσίες Διαδικτύου. Επικοινωνίες Δεδομένων Μάθημα 2 ο

ΕΠΛ 003: ΕΠΙΣΤΗΜΗ ΤΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΑ ΣΥΣΤΗΜΑΤΑ

Οδηγός γρήγορης εγκατάστασης. (Για Windows και MAC) Ασύρματη κάμερα IP HD για εξωτερικούς χώρους v3.14

ΕΡΓΑΣΙΑ 2 - MOODLE ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Ακ. Έτος ΔΙΔΑΣΚΩΝ: Π. Εφραιμίδης. Υπεύθυνος εργαστηρίου: Α. Κουτσιαμάνης

Εισαγωγή στην επιστήμη των υπολογιστών. Υλικό Υπολογιστών Κεφάλαιο 6ο ίκτυα υπολογιστών

Κεφάλαιο 11: Εισαγωγή στην HTML. Εφαρμογές Πληροφορικής Κεφ. 11 Καραμαούνας Πολύκαρπος

Προγραμματισμός Διαχείρισης Συστημάτων Ι

Ενότητα 2: HTTP, Clients και Servers (II) (Web, το θεμέλιο του Σημασιολογικού Ιστού)

Σταύρος Καουκάκης Ευτύχιος Βαβουράκης

Αν Ναι, δείτε πως με το λογισμικό axes μπορείτε!

ΤΕΙ ΗΠΕΙΡΟΥ Τμήμα Τηλεπληροφορικής & Διοίκησης

Δυναμικές Ιστοσελίδες στο Πανελλήνιο Σχολικό Δίκτυο

Εισαγωγή στην PHP. ΕΣΔ 232 Διαχείριση Δεδομένων στη Κοινωνία της Πληροφορίας. Περιεχόμενα. Περιεχόμενα

ΔΙΑΔΙΚΑΣΙA ΜΕΤΑΦΟΡΑΣ ΥΛΙΚΟΥ ΜΑΘΗΜΑΤΟΣ ΑΠΟ BLACKBOARD VISTA ΣΕ OPEN ECLASS

ΟΛΟΚΛΗΡΩΜΕΝΟ ΣΥΣΤΗΜΑ ΤΗΛΕΚΑΤΑΡΤΙΣΗΣ E-AGIOGRAFIA

PERL. Δήμος Παύλου Δημήτρης Κουζαπάς

Δίκτυα Υπολογιστών ΙΙ (Ασκήσεις Πράξης)

Οδηγός εγκατάστασης λογισμικού NPD EL

Άνοιγμα (και κλείσιμο) της εφαρμογής Εγγράφου Κειμένου

ΟΔΗΓΙΕΣ ΕΓΚΑΤΑΣΤΑΣΗΣ Α2Α

Ανάπτυξη πλήρους διαδικτυακής e-commerce εφαρμογής με χρήση του CMS WordPress

CloudBox!: Ένα εργαλείο cloud αποθήκευσης αρχείων με κατανεμημένο τρόπο

Ως Διαδίκτυο (Internet) ορίζεται το παγκόσμιο (διεθνές) δίκτυο ηλεκτρονικών υπολογιστών (international network).

Λειτουργικά Συστήματα

Ειδικά Θέματα Προγραμματισμού

Ενότητα 1: HTTP, Clients και Servers. (Web, το θεμέλιο του Σημασιολογικού Ιστού)

Οδηγός σύνδεσης στο δίκτυο του ΤΕΠΑΚ μέσα από την υπηρεσία απομακρυσμένης πρόσβασης VPN Τεχνολογικό Πανεπιστήμιο Κύπρου

Για περισσότερες πληροφορίες σχετικά με τη συμβατότητα του λογισμικού με άλλα λειτουργικά συστήματα, επικοινωνήστε με το τμήμα υποστήριξης πελατών.

Οδηγίες Χρήσης Πλατφόρμας Ασύγχρονης Τηλεκπαίδευσης (Moodle) του Τμήματος ΔΕΤ

Εργαστήριο 6. Προγραμματιστικές Εφαρμογές στο Διαδίκτυο. Στόχος. Προετοιμασία περιβάλλοντος εργασίας. a) Εκκίνηση XAMPP

Πλατφόρμα Ασύγχρονης Τηλεκπαίδευσης eclass 1.7. Οδηγίες Αναβάθμισης (Upgrade) Αθήνα, 16 Μαρτίου Εισαγωγή

Transcript:

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ Τμήμα Πληροφορικής ΕΠΛ 371 - Προγραμματισμός Συστημάτων ΑΣΚΗΣΗ 2 Συλλογή και Ανάλυση Ιστοσελίδων μέσω Προγραμματισμού Κελύφους Bash Διδάσκων: Ηλίας Αθανασόπουλος Υπεύθυνος Εργασίας: Παύλος Αντωνίου Ημερομηνία Ανάθεσης: Πέμπτη 16/02/17 Ημερομηνία Παράδοσης: Δευτέρα 06/03/17 και ώρα 23:59 (19 μέρες) (η λύση να υποβληθεί σε zip μέσω του Moodle και o κώδικας να να παραδοθεί εκτυπωμένος στο εργαστήριο) Ι. Στόχος Άσκησης Στόχος αυτής της άσκησης είναι η εξοικείωση με προχωρημένες τεχνικές προγραμματισμού στο κέλυφος Bash, και η εκτίμηση της ευκολίας με την οποία μπορεί κανείς να δημιουργήσει ένα σύνθετο σύστημα μέσω προγραμμάτων ωφελιμότητας (system utilities). Συγκεκριμένα, σε αυτή την άσκηση θα έχετε την ευκαιρία να χρησιμοποιήσετε έννοιες Διαχείρισης Συστημάτων (System Administration) και στη συνέχεια να κάνετε χρήση των εντολών του UNIX μέσω Προγραμματισμού Κελύφους (Bash Programming): εντολή exec, πίνακες, συνθήκες ελέγχου, δομές επανάληψης, κανονικές εκφράσεις, επεξεργαστές ροών (sed, awk) και χρήση συναρτήσεων με τα προαναφερθέντα. Το θέμα της άσκησης είναι η υλοποίηση ενός προγράμματος συλλογής και ανάλυσης ιστοσελίδων HTML (Hypertext Markup Language) από τον Παγκόσμιο Ιστό Πληροφοριών (WWW) χωρίς την χρήση κάποιου έτοιμου εργαλείου (π.χ., curl ή wget). Οι λειτουργίες του προγράμματος σας και το αναμενόμενο αποτέλεσμα περιγράφονται αναλυτικότερα στην συνέχεια. ΙΙ. Προαπαιτήσεις II-A. Πρωτόκολλο HTTP και Apache HTTP server Το πρωτόκολλο HTTP ακολουθεί το μοντέλο πελάτη-εξυπηρετητή (client-server). Περισσότερες λεπτομέρειες θα δώσουμε πιο κάτω. Ο εξυπηρετητής ονομάζεται HTTP server και ο πελάτης HTTP client ή πιο απλά φυλλομετρητής (browser). Για το σκοπό της άσκησης θα χρησιμοποιήσουμε τον Apache HTTP server που είναι ήδη εγκατεστημένος στο VPS σας. Πιο συγκεκριμένα, το εγκατεστημένο πρόγραμμα ονομάζεται httpd 1 και είναι ο Apache HTTP server, ο οποίος είναι σχεδιασμένος να τρέχει σαν αυτόνομη διεργασία 1 Αν το πρόγραμμα httpd δεν είναι εγκατεστημένο, να το εγκαταστήσετε μέσω της εντολής yum install httpd. 1

(standalone daemon process). Από προεπιλογή, ο HTTP server είναι ρυθμισμένος στο να «ακούει» για αιτήσεις (http requests) στην θύρα (port) 80 μιας μηχανής αλλά αυτό μπορεί να τροποποιηθεί (δείτε πιο κάτω). Για κάθε εισερχόμενη αίτηση, ο HTTP server δημιουργεί είτε μια διεργασία (process) ή ένα νήμα (thread) για να χειριστεί την αίτηση. Οι διεργασίες και τα νήματα περιλαμβάνονται στην ύλη του μαθήματος, σε μεταγενέστερο στάδιο, και δεν θα μας απασχολήσουν στην άσκηση αυτή. Μπορείτε να διαχειριστείτε τον Apache HTTP server (όπως και κάθε υπηρεσία στο linux) μέσω της γραμμής εντολών. Ο Apache HTTP server μπορεί να «σερβίρει» προς τον έξω κόσμο τα αρχεία και τους καταλόγους που βρίσκονται στον μονοπάτι /var/www/html της μηχανής σας. Το μονοπάτι αυτό ορίζεται από τη μεταβλητή DocumentRoot που βρίσκεται στο configuration file του apache (βλέπε πιο κάτω). II-B. Εργαλείο nmap (network mapper) Ένας τρόπος για να δείτε αν το πρόγραμμα httpd τρέχει στη μηχανή σας, είναι να χρησιμοποιήσετε το εργαλείο nmap 2 που είναι ένα ανοικτού κώδικα εργαλείο για την εξερεύνηση του δικτύου και τον έλεγχο της ασφάλειας. Το nmap είναι ένα από τα πολυτιμότερα και πιο γνωστά εργαλεία για τους διαχειριστές συστημάτων. Λειτουργεί ως σαρωτής ασφαλείας και χρησιμοποιείται για να ανακαλύψει κεντρικούς υπολογιστές και τις υπηρεσίες σε ένα δίκτυο υπολογιστών, δημιουργώντας έτσι ένα "χάρτη" του δικτύου. Η λειτουργία του παρέχει στο χρήστη μια αναλυτική εικόνα, του προς ελέγχου δικτύου φανερώνοντας πιθανά προβλήματα και ελλείψεις ασφάλειας. Στην εργασία αυτή θα το χρησιμοποιήσετε για να σαρώσετε τη μηχανή σας και να ελέγξετε για το αν υπάρχουν ανοικτές θύρες (π.χ. η θύρα 80 στην περίπτωση σας) και ποιες είναι αυτές. Αν μια θύρα είναι ανοικτή, αυτό προφανώς σημαίνει ότι τρέχει κάποια υπηρεσία που «ακούει» στη θύρα αυτή. Γενικά, δεν υπάρχει λόγος να τρέχουν διάφορες επιπλέον υπηρεσίες, πέραν από αυτές που μας χρειάζονται σε μια μηχανή, γιατί μέσω των θυρών τους δύναται να εισέλθουν κακόβουλοι χρήστες. II-C. Εργαλείο netstat (network statistics) Ένας άλλος τρόπος για να δείτε αν το πρόγραμμα httpd τρέχει στη μηχανή σας, είναι να χρησιμοποιήσετε το εργαλείο netstat 3. Το netstat είναι ένα χρήσιμο εργαλείο ελέγχου σε μια μηχανή: για την προβολή της δικτυακής δραστηριότητας. Μέσω της εντολής netstat a μπορείτε να δείτε τις εισερχόμενες/εξερχόμενες τοπικές/διαδικτυακές συνδέσεις. Πιο συγκεκριμένα μπορείτε να δείτε όλα τα sockets 4 σε κατάσταση σύνδεσης ή σε κατάσταση αναμονής για σύνδεση). Μέσω της εντολής netstat l μπορείτε να δείτε τα sockets που είναι σε κατάσταση αναμονής για σύνδεση, listening sockets. για την προβολή των πινάκων δρομολόγησης (routing tables) μέσω netstat r, για την προβολή στατιστικών σχετικά με τις διεπαφές (interfaces) μέσω netstat i και άλλα ενδιαφέροντα στοιχεία για τις δικτυακές διασυνδέσεις. 2 Αν το εργαλείο nmap δεν είναι εγκατεστημένο, να το εγκαταστήσετε μέσω της εντολής yum install nmap. 3 Το εργαλείο netstat είναι μέρος του πακέτου net-tools και μπορεί να εγκατασταθεί μέσω της εντολής yum install net-tools. 4 Socket (υποδοχή) ονομάζεται το τερματικό σημείο (endpoint) ενός αμφίδρομου διαύλου επικοινωνίας (twoway communication link) μεταξύ 2 διεργασιών που επικοινωνούν μέσω του δικτύου (είτε βρίσκονται πάνω στην ίδια μηχανή ή βρίσκονται σε ξεχωριστές μηχανές). 2

Η εντολή αυτή είναι σημαντική για κάθε χρήστη, καθώς μπορεί να δει εάν κάποιο trojan ή spyware, πραγματοποιεί συνδέσεις στη μηχανή του χωρίς να το γνωρίζει. Στην εργασία αυτή μπορείτε να χρησιμοποιήσετε το εργαλείο για να δείτε στοιχεία για τις διεπαφές της μηχανής σας. II-D. Χρήσιμες εντολές Με τη βοήθεια των εντολών nmap, netstat μέσω του terminal μπορείτε να δείτε ποιες υπηρεσίες τρέχουν στη μηχανή σας (localhost συζητούμε γι αυτό πιο κάτω) και σε ποιες θύρες ακούνε. Οι πιο κάτω εντολές παρουσιάζουν πως μπορείτε να δείτε τις τρέχουσες υπηρεσίες της μηχανής σας και να διαχειριστείτε τον HTTP server: nmap localhost Starting Nmap 6.40 ( http://nmap.org ) at 2017-01-11 17:33 EST Nmap scan report for localhost (127.0.0.1) Host is up (0.0000050s latency). Other addresses for localhost (not scanned): 127.0.0.1 rdns record for 127.0.0.1: localhost.localdomain Not shown: 998 closed ports PORT STATE SERVICE 22/tcp open ssh 25/tcp open smtp Από όσο βλέπετε, οι μόνες υπηρεσίες που τρέχουν στην πιο πάνω μηχανή είναι η ssh (ασφαλής απομακρυσμένη πρόσβαση) και η smtp (υπηρεσία αποστολής μηνυμάτων ηλεκτρονικού ταχυδρομείου). service httpd status Εντολή που δείχνει την κατάσταση της υπηρεσίας HTTP server. Προς το παρόν, λόγω του ότι είναι ανενεργή θα εκτυπωθεί το μήνυμα: service httpd start Εντολή που ενεργοποιεί τον HTTP server. Οπότε αν δώσουμε την εντολή: 3

service httpd status θα λάβουμε την απάντηση: nmap locahost Μετά την εκκίνηση του HTTP server μπορείτε να εκτελέσετε ξανά την εντολή nmap localhost: Starting Nmap 6.40 ( http://nmap.org ) at 2017-01-11 17:49 EST Nmap scan report for localhost (127.0.0.1) Host is up (0.0000050s latency). Other addresses for localhost (not scanned): 127.0.0.1 rdns record for 127.0.0.1: localhost.localdomain Not shown: 997 closed ports PORT STATE SERVICE 22/tcp open ssh 25/tcp open smtp 80/tcp open http netstat -lntp Η εντολή αυτή παρουσιάζει τα sockets που είναι σε κατάσταση αναμονής (listening sockets) για σύνδεση (-l), παρουσιάζοντας τις υπηρεσίες με τον αριθμό της θύρας στην οποία ακούνε (-n) (httpd=80, sshd=22, smtp=25), τις ταυτότητες (PID) των διεργασιών (-p) και έχουν σχέση με το πρωτόκολλο tcp (-t). service httpd stop H εντολή αυτή απενεργοποιεί τον HTTP server. vim /etc/httpd/conf/httpd.conf Η εντολή αυτή ανοίγει το configuration file του HTTP server. Αν κάνουμε οποιαδήποτε αλλαγή στο αρχείο αυτό, για να ενεργοποιηθεί θα πρέπει να επανεκκινήσουμε τον HTTP server με την εντολή service httpd restart. 4

Μέσα σε αυτό το αρχείο υπάρχουν διάφορες πληροφορίες όπως η γραμμή: DocumentRoot "/var/www/html" που δηλώνει ποιος κατάλογος (μονοπάτι) της μηχανής θα είναι η ρίζα των αρχείων και καταλόγων τα οποία θα είναι ορατά στον έξω κόσμο μέσω του HTTP server. Για παράδειγμα, στον κατάλογο /var/www/html βάλετε το αρχείο index.html με τον κώδικα html που φαίνεται πιο κάτω αριστερά, και ανοίξετε τον browser (είτε στη μηχανή σας ή σε κάποιο άλλο υπολογιστή του εργαστήριου Β103 ή 103) και πληκτρολογήστε τη διεύθυνση VPS_name/index.html π.χ. actaea.in.cs.ucy.ac.cy/index.html. Αν ο HTTP server είναι ενεργοποιημένος, θα δείτε στον browser αυτό που φαίνεται στην επόμενη εικόνα στα δεξιά. <html> <head> <title>webpage</title> </head> <body> <p>hello World</p> </body> </html> Εικόνα 1: Στα αριστερά φαίνεται αρχείο index.html με το <head> και το <body> sections. Στα δεξιά φαίνεται η απεικόνιση του αρχείου μέσα από τον φυλλομετρητή Mozilla Firefox. Μια άλλη σημαντική γραμμή στο εν λόγω αρχείο είναι η γραμμή που αναφέρει τη θύρα (port) στην οποία ακούει ο HTTP server. Συγκεκριμένα η γραμμή: Listen 80 υποδηλοί ότι ο HTTP server δέχεται αιτήσεις στη θύρα 80 που προέρχονται από οποιαδήποτε διεπαφή (interface) της μηχανής. Για να δείτε ποιες διεπαφές έχει η μηχανή σας εκτελέστε την εντολή: netstat i Η πρώτη διαπαφή (lo), loopback interface, είναι μια εικονική διεπαφή δικτύου την οποία μια μηχανή χρησιμοποιεί για να επικοινωνήσει με τον εαυτό της. Χρησιμοποιείται κυρίως για τη διάγνωση και αντιμετώπιση προβλημάτων αλλά και για τοπική σύνδεση σε εξυπηρετητές (servers) που τρέχουν πάνω στην ίδια τη μηχανή. Η διεπαφή venet0 είναι επίσης εικονική διεπαφή δικτύου για τη διασύνδεση της μηχανής με τον έξω κόσμο. Είναι εικονική διεπαφή μιας και η μηχανή σας δεν είναι πραγματική αλλά εικονική. Σε πραγματικές μηχανές, θα δείτε συνήθως τις διεπαφές eth0 (κάρτα Ethernet) και wlan0 (κάρτα ασύρματου δικτύου π.χ. wifi). Αν υπάρχουν 2 κάρτες Ethernet, η πρώτη θα έχει το όνομα eth0 και η άλλη το eth1 κ.ο.κ. 5

Αν αλλάξουμε την πιο πάνω γραμμή του configuration file σε: Listen 80 Listen 8080 τότε ο HTTP server δέχεται αιτήσεις και στη θύρα 80 και στη θύρα 8080, από οποιαδήποτε διεπαφή. Αν αλλάξουμε την πιο πάνω γραμμή του configuration file σε: Listen 127.0.0.1:80 Listen 8080 τότε ο HTTP server δέχεται αιτήσεις στη θύρα 80 μόνο ΑΝ προέρχονται από την ίδια τη μηχανή (όχι από τον έξω κόσμο) και στη θύρα 8080 από οποιαδήποτε διεπαφή (τοπική localhost) ή από τον έξω κόσμο. ΙΙΙ. Εισαγωγή στη συλλογή και ανάλυση ιστοσελίδων Οι μηχανές αναζήτησης, όπως για παράδειγμα το Google, χρησιμοποιούν μηχανές ανάκτησης πληροφοριών (crawlers, spiders, bots ή ants), για να συλλέξουν τις πληροφορίες (αρχεία υπερκειμένου, εικόνας, βίντεο, κτλ) οι οποίες βρίσκονται αποθηκευμένες, κατά κατανεμημένο τρόπο, στους HTTP servers. Οι πληροφορίες αυτές αποτελούν τον Παγκόσμιο Ιστό (World Wide Web). Αυτό επιτρέπει στις μηχανές αναζήτησης να ανακτήσουν στον τοπικό τους δίσκο ένα υποσύνολο του WWW. Στην συνέχεια χρησιμοποιούν μια σειρά από αλγορίθμους για να δημιουργήσουν αποδοτικά ευρετήρια (indexes), τα οποία χρησιμοποιούνται στις αναζητήσεις σας όταν επισκέπτεστε τέτοιες μηχανές αναζήτησης! Σκοπός αυτής της άσκησης δεν είναι βεβαία η δημιουργία ενός νέου Google, αλλά η συγγραφή ενός εξειδικευμένου crawler, ο οποίος να επισκέπτεται τα αρχεία ενός ιστοχώρου που βρίσκονται σε κάποιο HTTP server του όποιου ξέρουμε το URL, να αποθηκεύει τοπικά το περιεχόμενο που ανακτάται, και στην συνέχεια να δημιουργεί ένα λεξικό με την συχνότητα εμφάνισης λέξεων στο ανακτημένο σύνολο ιστοσελίδων. ΙV. Προγραμματισμός Ιστού με το Κέλυφος Bash Σε αυτή την ενότητα της εκφώνησης θα δούμε πως μπορεί κανείς να διεκπεραιώσει μια αίτηση ανάκτησης ιστοσελίδας του WWW μέσω του κελύφους Bash. Στόχος μας δεν είναι να επεξηγήσουμε σε βάθος το πρωτόκολλο μεταφοράς υπερκειμένου HTTP ή την γλώσσα σήμανσης δεδομένων HTML, διότι αυτά είναι το αντικείμενο μελέτης άλλων μαθημάτων. Επιπλέον, δεν απαιτείται να γνωρίζετε τις ακριβείς λειτουργίες των πρωτοκόλλων που χρησιμοποιούνται στην εργασία αυτή για να διεκπεραιώσετε την άσκηση. Έστω ότι η μηχανή VPS σας έχει όνομα actaea.in.cs.ucy.ac.cy και μέσα στο DocumentRoot βρίσκεται το αρχείο index.html της Εικόνα 1. Aς δούμε λοιπόν τι γίνεται όταν κάποιος θελήσει να ανακτήσει μια ιστοσελίδα (ένα αρχείο του ιστοχώρου) που τοποθετήσατε στο DocumentRoot του HTTP server σας από το κέλυφος bash χωρίς την χρήση γραφικού φυλλομετρητή (browser). # Άνοιξε ένα τερματικό και εκτέλεσε την ακόλουθη εντολή, η οποία ανοίγει ένα tcp socket (ένα κανάλι επικοινωνίας) 6

με τον εξυπηρετητή actaea.in.cs.ucy.ac.cy, στην θύρα 80, για ανάγνωση/γραφή. exec 5<>/dev/tcp/actaea.in.cs.ucy.ac.cy/80 # Απόστειλε μια αίτηση για ανάκτηση της σελίδας /index.html echo -e "GET /index.html HTTP/1.1\nHost: actaea.in.cs.ucy.ac.cy\nconnection: close\n" >&5 # Εκτύπωσε το αποτέλεσμα στην οθόνη cat <&5 Αυτό θα επιστρέψει και θα εκτυπώσει στην οθόνη το ακόλουθο κείμενο HTTP/1.1 200 OK Date: Sun, 15 Jan 2017 15:53:05 GMT Server: Apache/2.4.6 (CentOS) Last-Modified: Fri, 13 Jan 2017 22:45:01 GMT ETag: "57-546019591fd3a" Accept-Ranges: bytes Content-Length: 87 Connection: close Content-Type: text/html; charset=utf-8 <html> <head> <title>webpage</title> </head> <body> <p>hello World</p> </body> </html> HTTP Header Content Στην συνέχεια πρέπει να κλείσετε το input/output redirection, για να απελευθερώσετε τον File Handler #5. # Κλείσε το output redirection για το socket exec 5>&- # Κλείσε το input redirection για το socket exec 5<&- Όπως είδαμε πιο πάνω, ανακτήσαμε μαζί με το ζητούμενο αρχείο index.html (Content) και ένα HTTP Header. To Header εκφράζει διάφορες μέτα-πληροφορίες, όπως για παράδειγμα, πότε δημιουργήθηκε το αρχείο, πόσο μεγάλο είναι κτλ. Από το HTTP Header, μας ενδιαφέρουν τα ακόλουθα: 1. Εάν βρούμε το κωδικό 200 (δηλαδή «HTTP/1.1 200 OK»), τότε η σελίδα υπάρχει στον server και επιστρέφεται κάτω από το header. 2. Εάν βρούμε οποιονδήποτε άλλο κωδικό (π.χ., HTTP/1.1 404 Not Found), τότε η σελίδα έχει κάποιο άλλο πρόβλημα (π.χ., δεν υπάρχει πλέον). Σε αυτή την περίπτωση πρέπει να προσθέσετε το URL σε ένα αρχείο (brokenurls.txt). Αυτό είναι χρήσιμο γιατί μπορεί κανείς να γνωρίζει στο τέλος της εκτέλεσης, όλα τα URLs τα οποία αναφέρονται μέσω του συγκεκριμένου δικτυακού χώρου και τα οποία δεν είναι προσβάσιμα πλέον (αυτό για λόγους συντήρησης του ιστόχωρου). 7

3. Τα "Content-Type: text/html" και "Content-Type: text/plain" υποδηλώνουν ότι πρόκειται για περιεχόμενο τύπου HTML και TEXT αντίστοιχα. Στην άσκηση θα πρέπει να επικεντρωθείτε μόνο στα δυο πιο πάνω ήδη πληροφορίας. Οποιοδήποτε άλλο content-type θα πρέπει να αγνοείται. Τα HTTP headers δεν χρειάζεται να αποθηκεύονται. Γνωρίζοντας τώρα πως μπορείτε να ανακτήσετε μια ιστοσελίδα στον τοπικό δίσκο, θα προχωρήσουμε στην περιγραφή της αναμενόμενης λειτουργίας του συστήματος. V. Περιγραφή Λειτουργίας Συστήματος Το σύστημα θα πρέπει να υλοποιεί τις εξής δυο λειτουργίες: Α) Αράχνη (Crawler) Η εντολή θα εκτελείται όπως φαίνεται παρακάτω:./crawler URL DEPTH όπου URL είναι η διεύθυνση του HTTP server στον οποίο είναι αποθηκευμένος ο ιστοχώρος που θα κάνετε crawling, και DEPTH το βάθος εξερεύνησης (δείτε πιο κάτω). Πρέπει να δίνεται μήνυμα λάθους όταν η εντολή δεν καλείται σωστά. Για σκοπούς πειραματισμού, η δοσμένη διεύθυνση URL που θα κτυπά ο crawler σας να είναι η διεύθυνση του VPS σας π.χ. actaea.in.cs.ucy.ac.cy. Μπορείτε να κατεβάσετε 5 στο DocumentRoot του HTTP server το περιεχόμενο του ιστοχώρου του μαθήματος ΕΠΛ371 που βρίσκεται εδώ (/assignments/course-template.zip) και να το αποσυμπιέσετε. Το αράχνη (crawler) θα πρέπει να κάνει μια κατά πλάτος διερεύνηση (breadth-firsttraversal) του γράφου που εκφράζει τον ιστοχώρο που φιλοξενείται στο δοθέν URL. Δηλαδή, η αράχνη θα επισκέπτεται τις ιστοσελίδες επίπεδο-επιπεδο μέχρι να ξεπεράσει το βάθος DEPTH, όπου DEPTH είναι παράμετρος που προσδιορίζεται από τον χρήστη. Οποιοσδήποτε σύνδεσμος δεν εμπίπτει κάτω από τον πιο πάνω URL θα πρέπει να αγνοείται (π.χ.,http://moodle.cs.ucy.ac.cy/course/info.php?id=42, https://www.cs.ucy.ac.cy/courses/epl222, http://goo.gl/cpef7j, κτλ. ). Ο λόγος που βάζουμε αυτό τον περιορισμό είναι για να μειώσουμε τον αριθμό τον σελίδων που ανακτά η αράχνη σας. actaea.in.cs.ucy.ac.cy/index.html DEPTH=0 actaea.in.cs.ucy.ac.cy /labs/labs.html DEPTH=1 actaea.in.cs.ucy.ac.cy/css/bootstrap.css DEPTH=1 5 Για τη δουλειά αυτή μπορείτε να χρησιμοποιήσετε την εντολή wget. 8

Για να διεκπεραιωθεί η προσπέλαση των ιστοσελίδων θα πρέπει προφανώς να έχετε κάποιο τρόπο να εξάγετε τους συνδέσμους (links) από μια ιστοσελίδα. Ένας σύνδεσμος είναι μια διεύθυνση κάποιας άλλης ιστοσελίδας. Για να εντοπίσετε ένα σύνδεσμο σε μια σελίδα πρέπει να εντοπίσετε το href= στο html κείμενο όταν περιέχεται σε σημαντήρα τύπου <a> ή <link>, όπως για παράδειγμα: <a href="links.html">links</a> <link rel="stylesheet" href="css/font-awesome.min.css"/> ή το src= στο html κείμενο όταν περιέχεται σε σημαντήρα τύπου <script>, όπως για παράδειγμα: <script src="js/bootstrap.min.js"></script> Οι σύνδεσμοι αυτοί μπορεί να είναι απόλυτοι (π.χ., actaea.in.cs.ucy.ac.cy/css/bootstrap.css) ή σχετικοί, με βάση το όνομα του HTTP server (π.χ., css/bootstrap.css). Σημειώστε ότι είναι απαραίτητο ο σύνδεσμος να εσωκλείεται μέσα σε μονά ή διπλά εισαγωγικά. Γενικότερα, επιτρέπονται και άλλοι χαρακτήρες (https://www.w3.org/tr/html4/intro/sgmltut.html#h-3.2.2) αλλά είναι εκτός του πεδίου εφαρμογής της παρούσας άσκησης. Επίσης, δεν είναι απαραίτητο να βρίσκεται σε μια γραμμή ένας σύνδεσμος (μπορεί να είναι διασπασμένο σε περισσότερες γραμμές) π.χ., <a href= labs/ labs.html >Labs</a> Περιορισμοί Crawler 1. To βάθος της διερεύνησης DEPTH, καθώς επίσης ο σύνδεσμος εκκίνησης URL, πρέπει να δίδονται από τον χρήστη είτε υπό μορφή μεταβλητών κελύφους, είτε σαν ορίσματα της αράχνης (command-line parameters) ή από αρχείο δεδομένων. 2. Το σύστημα ανακτά μόνο σελίδες με περιεχόμενο HTML (π.χ..html,.htm) ή TEXT (π.χ. css, js). Οι υπόλοιπες ιστοσελίδες αγνοούνται. 3. Καμιά ιστοσελίδα δεν ανακτάται από τον διαθέτη περισσότερο από μια φορά, κατά την διάρκεια κάθε κύκλου ανάκτησης και επεξεργασίας. 4. Οι ιστοσελίδες πρέπει να αποθηκεύονται στο /tmp/$user/data με την χρήση δομημένου καταλόγου, ο οποίος είναι πανομοιότυπος με τον κατάλογο του HTTP server. Δηλαδή π.χ., /tmp/$user/data/actaea.in.cs.ucy.ac.cy/index.html /tmp/$user/data/actaea.in.cs.ucy.ac.cy/labs/labs.html /tmp/$user/data/actaea.in.cs.ucy.ac.cy/css/bootstrap.css. 5. To brokenurl.txt περιέχει όλα τα URLs τα οποία δεν είναι προσβάσιμα. Το αρχείο έχει την μορφή : actaea.in.cs.ucy.ac.cy/indexxxxx.html actaea.in.cs.ucy.ac.cy/indexxυυxx.html. B) Αναλυτής Δεδομένων Η εντολή θα εκτελείται όπως φαίνεται παρακάτω: 9

./analyzer [options] και ανάλογα με τα options θα γίνεται ανάλυση των αρχείων που έχουν αποθηκευτεί τοπικά στο /tmp/$user/data με τις εντολές του UNIX που διδαχθήκατε στο μάθημα. Πρέπει να δίνεται μήνυμα λάθους όταν η εντολή δεν καλείται σωστά. Options: (α) tokenizer-stopwords-removed <filename> Η επιλογή αυτή θα είναι ένα φίλτρο το οποίο επεξεργάζεται την ανακτημένη ιστοσελίδα με το δοθέν filename (μόνο για αρχεία τύπου.html ή.htm) και εξάγει μια λίστα με όλες τις λέξεις (tokenize) και τις συχνότητες εμφάνισης τους σε ταξινομημένη σειρά από τη πιο συχνή στην πιο σπάνια, που πληρούν τα πιο κάτω: Από το αρχείο μας ενδιαφέρει μόνο ότι συμπεριλαμβάνεται στο body (βλέπε Εικόνα 1) της ιστοσελίδας (μεταξύ των tags <body> και </body>. Θα αφαιρούνται τα HTML tags και οι ειδικοί χαρακτήρες HTML, όπως αυτά περιγράφονται πιο κάτω: 1. HTML TAG Οτιδήποτε περικλείεται μεταξύ των συμβολών < >. π.χ., <html> <a href=ssss>, <td bgcolor= red width= 100% > Σε αυτή την κατηγορία περιλαμβάνονται και τα HTML σχόλια. Ένα σχόλιο ξεκινά με <!--και τερματίζει με --> <!-- This is a Multiline comment Var[0]; This should be ignored by your analysis --> 2. HTML Ειδικοί Χαρακτήρες Οτιδήποτε περικλείεται μεταξύ & και ; π.χ., & &nsbp; Á Οι ειδικοί χαρακτήρες ΔΕΝ πρέπει να περιλαμβάνονται στην ανάλυση. Θα αφαιρούνται οι αριθμοί. Με σκοπό τη βελτίωση της αναζήτησης, ορισμένες μηχανές αναζήτησης εξαλείφουν συνηθισμένες λέξεις που ονομάζονται stop words. Από τη δική σας λίστα θα αφαιρούνται οι λέξεις (της ιστοσελίδας) οι οποίες θεωρούνται stop words. Το πρόγραμμά σας θα βρίσκει τα stop words από το ένα αρχείο με το όνομα stopwords.txt (δίνεται). Οι λέξεις μέσα στη λίστα δεν κάνουν διάκριση μεταξύ πεζών και κεφαλαίων γραμμάτων. Η λίστα θα αποθηκεύεται στο αρχείο /tmp/$user/tokenizer.txt. Το αρχείο θα είναι της μορφής: 12 hello 7 world 3 computer 10

(β) show-outgoing-links Η επιλογή αυτή θα κάνει εξαγωγή όλων των συνδέσμων από κάθε αρχείο τύπου html ή htm και θα τα αποθηκεύει σε άλλο αρχείο /tmp/$user/outgoinglinks.txt. Οι έγκυροι σύνδεσμοι είναι αυτοί που περιέχονται σε href= μέσα σε σημαντήρα τύπου <a> και παραπέμπουν σε άλλο διαδικτυακό σύνδεσμο. Για παράδειγμα τα http://goo.gl/8nojmv και schedule.html είναι έγκυροι διαδικτυακοί σύνδεσμοι (απόλυτος και σχετικός αντίστοιχα) ενώ το syllabus.pdf δεν είναι. Για παράδειγμα, μέσα στο αρχείο outgoinglinks.txt θα έχει γραμμές τις πιο κάτω μορφής : index.html -> http://goo.gl/8nojmv, http://goo.gl/dllk2x, http://www.cs.ucy.ac.cy/~csp5pa1/, http://goo.gl/a1zsfa, schedule.html VΙ. Γενικοί Κανόνες 1. Το σύστημα δεν αφήνει ποτέ άχρηστα και μεταβατικά αρχεία στον δίσκο, ανεξάρτητα εάν διακοπεί η λειτουργία του προγράμματος από το κλείσιμο του κελύφους. 2. Το σύστημα πρέπει να χρησιμοποιεί τεχνικές δομημένου προγραμματισμού με την χρήση συναρτήσεων. 3. Το σύστημα πρέπει να ελαχιστοποιεί την χρήση πόρων του συστήματος (αρχεία, μνήμης, κτλ). 4. Το σύστημα πρέπει να μειώνει όσο το δυνατό περισσότερο τον χρόνο διεκπεραίωσης της ανάκτησης και επεξεργασίας των δεδομένων. Σημειώστε ότι η πιο πάνω περιγραφή θα σας επιτρέψει να δημιουργήσετε ένα σχετικά απλό crawler. Ένας πραγματικός crawler ωστόσο, είναι ένα πολύ-σύνθετο λογισμικό το οποίο πρέπει να λαμβάνει υπόψη μια πλειάδα άλλων παραμέτρων. Όπως αναφέρουν οι δημιουργοί του Google, Sergey Brin και Larry Page, στην δημοσίευση τους «The Anatomy of a Large- Scale Hypertextual Web Search Engine» (1998): Running a web crawler is a challenging task. There are tricky performance and reliability issues and even more importantly, there are social issues. Crawling is the most fragile application [in our search engine,] since it involves interacting with hundreds of thousands of web servers and various name servers which are all beyond the control of the system. Καλή Επιτυχία! 11