Μετάβαση στο κύριο περιεχόμενο

Σύνταξη PAC (Proxy auto-config)

Πληροφορίες

Αν εντοπίσετε λάθος ή έχετε κάποια πρόταση, αφήστε μήνυμα στο φόρουμ Mudfish (https://forums.mudfish.net). Τα παραδείγματα και οι εξηγήσεις εδώ συντάχθηκαν με μετάφραση ή αναφορά στο περιεχόμενο των παρακάτω ιστοτόπων.

Η επέκταση Mudfish για προγράμματα περιήγησης υποστηρίζει τη μορφή αρχείου PAC (Proxy auto-config).

Συναρτήσεις PAC​

Τα προγράμματα περιήγησης που υποστηρίζουν PAC συνήθως διαθέτουν τις συναρτήσεις που ορίζει η τυπική μορφή της Netscape.

Ωστόσο, αυτές οι λειτουργίες εκτελούνται συνήθως μέσα σε sandbox, δηλαδή σε αυστηρά περιορισμένο περιβάλλον. Για παράδειγμα, δεν επιτρέπεται καθόλου η πρόσβαση σε πληροφορίες User Agent.

Παρακάτω περιγράφονται οι συναρτήσεις που επιτρέπονται μέσα στο sandbox. Τα παραδείγματα διατηρούν τον αρχικό κώδικα και τα κορεατικά σχόλια· το νόημα των σχολίων εξηγείται στα ελληνικά πριν από κάθε παράδειγμα.

dnsDomainIs​

Ελέγχει το όνομα υπολογιστή και επιστρέφει true αν υπάρχει αντιστοιχία. Συνήθως χρησιμοποιείται για εξαιρέσεις συγκεκριμένων ονομάτων.

Στο παράδειγμα, αν το όνομα είναι google.com ή αντίστοιχη υποδιεύθυνση, όπως maps.google.com ή www.google.com, το πρόγραμμα περιήγησης συνδέεται απευθείας χωρίς proxy.

   // 만약 hostname 이 google.com 과 같거나 하위 주소들이 매치된다면
// (예를 들어 maps.google.com, www.google.com),
// 브라우저로 하여금 proxy 을 거치지 않고 직접 접속하게 합니다.

if (dnsDomainIs(host, "google.com"))
return "DIRECT";

shExpMatch​

Συγκρίνει ένα όνομα υπολογιστή ή URL με συμβολοσειρά που χρησιμοποιεί έκφραση κελύφους και επιστρέφει true αν υπάρχει αντιστοιχία.

Το πρώτο παράδειγμα στέλνει απευθείας, χωρίς proxy, όλα τα αιτήματα των ονομάτων που τελειώνουν σε .local. Το δεύτερο κάνει το ίδιο για αιτήματα προς vpn.domain.com ή προς οποιονδήποτε φάκελο ή αρχείο κάτω από το http://abcdomain.com/folder/.

   // 모든 request 들 (.local 로 끝나는 모든 hostname 에 해당) 이
// 브라우저로 하여금 proxy 을 거치지 않고 직접 접속하게 합니다.

if (shExpMatch(url, "*.local"))
return "DIRECT";

// vpn.domain.com 에 접속할려고 하거나
// http://abcdomain.com/folder/ 하위의 모든 폴더 혹은 파일에 접속하는
// 요청들을 proxy 경유없이 직접 접속합니다.

if (shExpMatch(host, "vpn.domain.com") ||
shExpMatch(url, "http://abcdomain.com/folder/*"))
return "DIRECT";

isInNet​

Ελέγχει τη διεύθυνση IP ενός ονόματος υπολογιστή και επιστρέφει true αν ανήκει στο καθορισμένο υποδίκτυο. Αν δοθεί όνομα υπολογιστή ως όρισμα, μετατρέπεται σε IP μέσω επίλυσης DNS.

Στο παράδειγμα, η σύνδεση γίνεται απευθείας αν η IP του ζητούμενου ονόματος, μετά την επίλυση DNS, ανήκει στο εύρος IP που δίνεται ως όρισμα.

   // 만약 요청한 hostname 의 IP 주소가 (DNS resolving 후) 인자로 넘겨진
// IP 대역에 포함되는 것이면 직접 접속합니다.

if (isInNet(dnsResolve(host), "172.16.0.0", "255.240.0.0"))
return "DIRECT";

myIpAddress​

Επιστρέφει τη διεύθυνση IP του υπολογιστή σας.

Στο παράδειγμα, αν ο υπολογιστής ανήκει στο συγκεκριμένο εύρος IP, τα αιτήματα αποστέλλονται μέσω του proxy 10.10.5.1 στη θύρα 8080.

   // 만약 나의 컴퓨터가 특정 IP 대역에 속할 경우 proxy 10.10.5.1 (포트는 8080)
// 를 통해 요청하도록 합니다.

if (isInNet(myIpAddress(), "10.10.1.0", "255.255.255.0"))
return "PROXY 10.10.5.1:8080";

dnsResolve​

Μετατρέπει ένα όνομα υπολογιστή σε διεύθυνση IP μέσω επίλυσης DNS.

Στο παράδειγμα, η σύνδεση γίνεται απευθείας αν η IP του ζητούμενου υπολογιστή ανήκει σε ένα από τα καθορισμένα εύρη.

   // 만약 요청한 host 의 IP 가 지정한 범위에 속할 경우 직접 접속하도록
// 합니다.

if (isInNet(dnsResolve(host), "10.0.0.0", "255.0.0.0") ||
isInNet(dnsResolve(host), "172.16.0.0", "255.240.0.0") ||
isInNet(dnsResolve(host), "192.168.0.0", "255.255.0.0") ||
isInNet(dnsResolve(host), "127.0.0.0", "255.255.255.0"))
return "DIRECT";

isPlainHostName​

Επιστρέφει true αν το όνομα υπολογιστή δεν περιέχει κανέναν χαρακτήρα . (τελεία). Ένα παράδειγμα είναι το http://intranet. Συνήθως χρησιμοποιείται για πρόσβαση σε εσωτερικές διευθύνσεις ιστού.

Στο παράδειγμα, αν ο χρήστης ζητήσει ένα απλό όνομα υπολογιστή, όπως http://intranet/ ή http://webserver-name01/, η σύνδεση γίνεται απευθείας.

   // 만약 사용자가 plain hostname (예를 들면, http://intranet/ 혹은
// http://webserver-name01/) 를 요청할 경우, 직접 접속하도록 합니다.

if (isPlainHostName(host))
return "DIRECT";

localHostOrDomainIs​

Ελέγχει το όνομα υπολογιστή και επιστρέφει true αν το τμήμα του ονόματος υπολογιστή ταιριάζει.

Στο παράδειγμα, η σύνδεση γίνεται απευθείας όταν το ζητούμενο όνομα είναι «www» ή «www.google.com».

   // 만약 요청한 hostname 이 "www" 혹은 "www.google.com" 일 경우, 직접
// 접속합니다.

if (localHostOrDomainIs(host, "www.google.com"))
return "DIRECT";

isResolvable​

Μετατρέπει ένα όνομα υπολογιστή σε IP και επιστρέφει true αν η μετατροπή επιτύχει.

Αν η επίλυση του ονόματος τομέα δεν λειτουργεί σωστά, το πρόγραμμα περιήγησης μπορεί να παγώσει προσωρινά. Χρησιμοποιήστε αυτή τη συνάρτηση με προσοχή.

Στο παράδειγμα, αν ο διακομιστής DNS μπορεί να επιλύσει το ζητούμενο όνομα, το αίτημα αποστέλλεται μέσω του proxy proxy1.example.com.

   // 만약 요청한 hostname 이 DNS 서버로 부터 resolving 이 될 수 있다면,
// proxy1.example.com 프록시를 통해 요청합니다.

if (isResolvable(host))
return "PROXY proxy1.example.com:8080";

dnsDomainLevels​

Ελέγχει το όνομα υπολογιστή και επιστρέφει πόσες τελείες (.) περιέχει. Μπορεί, για παράδειγμα, να χρησιμοποιηθεί για εξαίρεση εσωτερικών διακομιστών ιστού.

Στο παράδειγμα, αν το όνομα περιέχει έστω μία τελεία, η σύνδεση γίνεται μέσω του proxy proxy1.example.com. Διαφορετικά γίνεται απευθείας.

   // 만약 hostname 이 . (dot) 을 하나라도 포함하고 있으면 proxy1.example.com
// 프록시를 통해 접속하고 그렇지 않으면 직접 접속합니다.

if (dnsDomainLevels(host) > 0)
return "PROXY proxy1.example.com:8080";
else
return "DIRECT";

weekdayRange​

Χρησιμοποιείται για τη δημιουργία χρονικών κανόνων, για παράδειγμα όταν θέλετε να επιστρέφεται ρύθμιση proxy μόνο σε συγκεκριμένες ημέρες.

Στο παράδειγμα, χρησιμοποιείται ο proxy proxy1.example.com από Δευτέρα έως Παρασκευή. Τις υπόλοιπες ημέρες η σύνδεση στο διαδίκτυο γίνεται απευθείας.

   // 만약 월요일부터 금요일 사이에는 proxy1.example.com 프록시를 사용하도록
// 하고 그렇지 않을 경우는 직접 인터넷에 접속하도록 합니다.

if (weekdayRange("MON", "FRI"))
return "PROXY proxy1.example.com:8080";
else
return "DIRECT";

dateRange​

Χρησιμοποιείται για τη δημιουργία χρονικών κανόνων, για παράδειγμα όταν θέλετε να εφαρμόζεται proxy μόνο σε συγκεκριμένους μήνες.

Στο παράδειγμα, χρησιμοποιείται ο proxy proxy1.example.com από τον Ιανουάριο έως τον Μάρτιο. Τους υπόλοιπους μήνες η σύνδεση γίνεται απευθείας.


// 만약 1월부터 3월까지는 proxy1.example.com 프록시를 사용하도록 설정하고
// 그렇지 않을 경우는 직접 접속하도록 조치합니다.

if (dateRange("JAN", "MAR"))
return "PROXY proxy1.example.com:8080";
else
return "DIRECT";

timeRange​

Χρησιμοποιείται όταν θέλετε να εφαρμόζεται proxy μόνο σε συγκεκριμένες ώρες.

Στο παράδειγμα, ο proxy proxy1.example.com χρησιμοποιείται μόνο από τις 8 το πρωί έως τις 6 το απόγευμα. Τις υπόλοιπες ώρες η σύνδεση γίνεται απευθείας.

   // 오직 아침 8 시부터 오후 6 시까지만 proxy1.example.com 을 사용하도록
// 하고 그렇지 않을 경우는 직접 접속합니다.

if (timeRange(8, 18))
return "PROXY proxy1.example.com:8080";
else
return "DIRECT";

alert​

Αυτή η συνάρτηση δεν υπήρχε στον αρχικό ορισμό της μορφής PAC, αλλά ορίζεται στον Internet Explorer και στο Firefox για την αντιμετώπιση προβλημάτων.

Στο παράδειγμα, το αποτέλεσμα της επίλυσης DNS εμφανίζεται στην κονσόλα σφαλμάτων του προγράμματος περιήγησης.

   // 브라우저의 error 콘솔창에 DNS resolving 한 결과를 출력하도록 합니다.

resolved_host = dnsResolve(host);
alert(resolved_host);