Я пытаюсь сделать pac-файл прокси для своего Squid. Я предполагаю изменить перенаправление, если пользователь находится в моей сети или, например, дома, и я пытаюсь сделать это с помощью мой адрес() функция.
Я тестировал этот PAC с большинством функций, которые мы можем использовать в PAC: http://findproxyforurl.com/debug-pac-file/ .
function FindProxyForURL(url, host) {
debugPAC ="PAC Debug Information\n";
debugPAC +="-----------------------------------\n";
debugPAC +="Machine IP: " + myIpAddress() + "\n"; <-----|
debugPAC +="Hostname: " + host + "\n";
if (isResolvable(host)) {resolvableHost = "True"} else {resolvableHost = "False"};
debugPAC +="Host Resolvable: " + resolvableHost + "\n";
debugPAC +="Hostname IP: " + dnsResolve(host) + "\n";
if (isPlainHostName(host)) {plainHost = "True"} else {plainHost = "False"};
debugPAC +="Plain Hostname: " + plainHost + "\n";
debugPAC +="Domain Levels: " + dnsDomainLevels(host) + "\n";
debugPAC +="URL: " + url + "\n";
// Protocol can only be determined by reading the entire URL.
if (url.substring(0,5)=="http:") {protocol="HTTP";} else
if (url.substring(0,6)=="https:") {protocol="HTTPS";} else
if (url.substring(0,4)=="ftp:") {protocol="FTP";}
else {protocol="Unknown";}
debugPAC +="Protocol: " + protocol + "\n";
// Reduce volume of alerts to a useable level, e.g. only alert on static text pages.
if (!shExpMatch(url,"*.(js|xml|ico|gif|png|jpg|jpeg|css|swf)*")) {alert(debugPAC);}
return "DIRECT";
}
Но на выходе у меня адрес ipv6 ?!
PAC-alert: PAC Debug Information
-----------------------------------
Machine IP: fe80::xxx:xxx:xxxx:xxxx <-----|
Hostname: download.cdn.mozilla.net
Host Resolvable: True
Hostname IP: 93.184.221.133
Plain Hostname: False
Domain Levels: 3
URL: http://download.cdn.mozilla.net/pub/firefox/releases/37.0.2/update/win32/fr/firefox-37.0.2.complete.mar
Protocol: HTTP
Это нормально? Или есть другой способ получить ipv4-адрес пользователя? Если да, то я не могу сделать такой тест:
if ( isInNet(myAddress, "10.0.0.0","255.0.0.0") ) ?
Спасибо за вашу помощь
В myIpAddress
функция основана на предположении, что хост имеет только один адрес. Это никогда не было верным предположением.
Лучшей альтернативой была бы функция, возвращающая список IP-адресов. Похоже, Microsoft представила свой собственный расширение делать именно это.
Это имело бы смысл для myIpAddress
чтобы вернуть адрес, содержащий наиболее полезную информацию. Однако на это нельзя полагаться. Есть сообщения о myIpAddress
иногда возвращается 127.0.0.1
что в основном бесполезно.
В вашем случае это явно не было оптимальным выбором, потому что локальный адрес ссылки содержит менее полезную информацию для сценария PAC, чем локальный или глобальный адрес. И я предполагаю, что в вашем случае у хоста есть хотя бы один локальный или глобальный адрес, который он мог бы вернуть вместо этого.
В целом моя лучшая рекомендация - написать FindProxyForURL
так что ему не нужно знать IP-адрес хоста (или чтобы сервер, обслуживающий сценарий PAC, вставлял IP-адрес клиента в сценарий с помощью сценариев на стороне сервера).
Если значительная часть ваших пользователей использует браузер с поддержкой Microsoft расширение вы также можете добавить FindProxyForURLEx
функция, которая использует преимущества myIPAddressEx
Также не рекомендуется использовать dnsResolve
в сценарии PAC из-за возможной блокировки браузера во время разрешения DNS.