Rev 5 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 5 | Rev 11 | ||
---|---|---|---|
1 | #!/usr/bin/php |
1 | #!/usr/bin/php |
2 | <?php |
2 | <?php |
3 | 3 | ||
4 | # |
4 | # |
5 | # VWhois (ViaThinkSoft WHOIS, a fork of generic Whois / gwhois) |
5 | # VGWhoIs (ViaThinkSoft Global WhoIs, a fork of generic Whois / gwhois) |
6 | # Subprogram: gov TLD whois |
6 | # Subprogram: gov TLD whois |
7 | # |
7 | # |
8 | # (c) 2014 by Daniel Marschall, ViaThinkSoft <info@daniel-marschall.de> |
8 | # (c) 2014 by Daniel Marschall, ViaThinkSoft <info@daniel-marschall.de> |
9 | # |
9 | # |
10 | # License: https://www.gnu.org/licenses/gpl-2.0.html (GPL version 2) |
10 | # License: https://www.gnu.org/licenses/gpl-2.0.html (GPL version 2) |
11 | # |
11 | # |
12 | 12 | ||
13 | require_once __DIR__ . '/../../shared/php_includes/common_functions.inc.php'; |
13 | require_once __DIR__ . '/../../shared/php_includes/common_functions.inc.php'; |
14 | 14 | ||
15 | $domain = isset($argv[1]) ? $argv[1] : ''; |
15 | $domain = isset($argv[1]) ? $argv[1] : ''; |
16 | 16 | ||
17 | // This service does output more verbose information (e.g. Agency) in comparison to the whois service. |
17 | // This service does output more verbose information (e.g. Agency) in comparison to the whois service. |
18 | $friendly_url = 'https://www.dotgov.gov/portal/web/dotgov/whois'; |
18 | $friendly_url = 'https://www.dotgov.gov/portal/web/dotgov/whois'; |
19 | 19 | ||
20 | /* |
20 | /* |
21 | $viewstate = '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'; |
21 | $viewstate = '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'; |
22 | $session_id = 'k2NNSnyK9Kvh3BZHpTphvrL12yFTn6TcMJpZrj865x7qLQCvvjs2SK3XB0GxG5qSlX2JhcxymvNqTWqlmdQ311gwVywf8fxNJKVG9p4mccGvXQLbl1LLMxdDBzWt2jFD'; |
22 | $session_id = 'k2NNSnyK9Kvh3BZHpTphvrL12yFTn6TcMJpZrj865x7qLQCvvjs2SK3XB0GxG5qSlX2JhcxymvNqTWqlmdQ311gwVywf8fxNJKVG9p4mccGvXQLbl1LLMxdDBzWt2jFD'; |
23 | $unknown1 = '1882029245'; |
23 | $unknown1 = '1882029245'; |
24 | $unknown2 = '1390916170265'; |
24 | $unknown2 = '1390916170265'; |
25 | */ |
25 | */ |
26 | 26 | ||
27 | $x = file_get_contents2($friendly_url); |
27 | $x = file_get_contents2($friendly_url); |
28 | 28 | ||
29 | if (!preg_match('@name="javax.faces.ViewState" id="javax.faces.ViewState" value="(.*)"@ismU', $x, $m)) { |
29 | if (!preg_match('@name="javax.faces.ViewState" id="javax.faces.ViewState" value="(.*)"@ismU', $x, $m)) { |
30 | echo "Error (A) while querying whois service. Please manually check at $friendly_url\n"; |
30 | echo "Error (A) while querying whois service. Please manually check at $friendly_url\n"; |
31 | exit(1); |
31 | exit(1); |
32 | } |
32 | } |
33 | $viewstate = $m[1]; |
33 | $viewstate = $m[1]; |
34 | $viewstate = str_replace('+', '%2B', $viewstate); |
34 | $viewstate = str_replace('+', '%2B', $viewstate); |
35 | $viewstate = str_replace('/', '%2F', $viewstate); |
35 | $viewstate = str_replace('/', '%2F', $viewstate); |
36 | 36 | ||
37 | if (!preg_match('@getSessionId:function\\(\\){return"([^!]+)!([^!]+)!([^!]+)"}@ismU', $x, $m)) { |
37 | if (!preg_match('@getSessionId:function\\(\\){return"([^!]+)!([^!]+)!([^!]+)"}@ismU', $x, $m)) { |
38 | echo "Error (B) while querying whois service. Please manually check at $friendly_url\n"; |
38 | echo "Error (B) while querying whois service. Please manually check at $friendly_url\n"; |
39 | exit(1); |
39 | exit(1); |
40 | } |
40 | } |
41 | $session_id = $m[1]; |
41 | $session_id = $m[1]; |
42 | $unknown1 = $m[2]; |
42 | $unknown1 = $m[2]; |
43 | $unknown2 = $m[3]; |
43 | $unknown2 = $m[3]; |
44 | 44 | ||
45 | # --- |
45 | # --- |
46 | 46 | ||
47 | $bef = ''; |
47 | $bef = ''; |
48 | #$bef .= 'vtor -- '; |
48 | #$bef .= 'vtor -- '; |
49 | $bef .= 'curl "https://www.dotgov.gov/portal/web/dotgov/whois?p_p_id=domainAvailabilityCheck_portlet_WAR_dotgov_portlets&p_p_lifecycle=1&p_p_state=normal&p_p_mode=view&p_p_col_id=column-3&p_p_col_count=1&_domainAvailabilityCheck_portlet_WAR_dotgov_portlets_com.sun.faces.portlet.VIEW_ID="%"2FWEB-INF"%"2Fxhtml"%"2Fregistration"%"2FdomainAvailabilityCheck.xhtml&_domainAvailabilityCheck_portlet_WAR_dotgov_portlets_com.sun.faces.portlet.NAME_SPACE=_domainAvailabilityCheck_portlet_WAR_dotgov_portlets_"'; |
49 | $bef .= 'curl "https://www.dotgov.gov/portal/web/dotgov/whois?p_p_id=domainAvailabilityCheck_portlet_WAR_dotgov_portlets&p_p_lifecycle=1&p_p_state=normal&p_p_mode=view&p_p_col_id=column-3&p_p_col_count=1&_domainAvailabilityCheck_portlet_WAR_dotgov_portlets_com.sun.faces.portlet.VIEW_ID="%"2FWEB-INF"%"2Fxhtml"%"2Fregistration"%"2FdomainAvailabilityCheck.xhtml&_domainAvailabilityCheck_portlet_WAR_dotgov_portlets_com.sun.faces.portlet.NAME_SPACE=_domainAvailabilityCheck_portlet_WAR_dotgov_portlets_"'; |
50 | 50 | ||
51 | $bef .= ' -H "Cookie: JSESSIONID='.$session_id.'!'.$unknown1.'; GUEST_LANGUAGE_ID=en_US; COOKIE_SUPPORT=true"'; |
51 | $bef .= ' -H "Cookie: JSESSIONID='.$session_id.'!'.$unknown1.'; GUEST_LANGUAGE_ID=en_US; COOKIE_SUPPORT=true"'; |
52 | $bef .= ' -H "Host: www.dotgov.gov"'; |
52 | $bef .= ' -H "Host: www.dotgov.gov"'; |
53 | $bef .= ' -H "Origin: https://www.dotgov.gov"'; |
53 | $bef .= ' -H "Origin: https://www.dotgov.gov"'; |
54 | $bef .= ' -H "Accept-Encoding: gzip,deflate"'; |
54 | $bef .= ' -H "Accept-Encoding: gzip,deflate"'; |
55 | $bef .= ' -H "Accept-Language: de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4"'; |
55 | $bef .= ' -H "Accept-Language: de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4"'; |
56 | $bef .= ' -H "User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:32.0) Gecko/20100101 Firefox/32.0"'; |
56 | $bef .= ' -H "User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:32.0) Gecko/20100101 Firefox/32.0"'; |
57 | #$bef .= ' -H "Content-Type: application/x-www-form-urlencoded"'; |
57 | #$bef .= ' -H "Content-Type: application/x-www-form-urlencoded"'; |
58 | $bef .= ' -H "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"'; |
58 | $bef .= ' -H "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"'; |
59 | $bef .= ' -H "Cache-Control: max-age=0"'; |
59 | $bef .= ' -H "Cache-Control: max-age=0"'; |
60 | $bef .= ' -H "Referer: https://www.dotgov.gov/portal/web/dotgov/whois;jsessionid='.$session_id.'!'.$unknown1.'!'.$unknown2.'?p_p_id=domainAvailabilityCheck_portlet_WAR_dotgov_portlets&p_p_lifecycle=1&p_p_state=normal&p_p_mode=view&p_p_col_id=column-3&p_p_col_count=1&_domainAvailabilityCheck_portlet_WAR_dotgov_portlets_com.sun.faces.portlet.VIEW_ID="%"2FWEB-INF"%"2Fxhtml"%"2Fregistration"%"2FdomainAvailabilityCheck.xhtml&_domainAvailabilityCheck_portlet_WAR_dotgov_portlets_com.sun.faces.portlet.NAME_SPACE=_domainAvailabilityCheck_portlet_WAR_dotgov_portlets_"'; |
60 | $bef .= ' -H "Referer: https://www.dotgov.gov/portal/web/dotgov/whois;jsessionid='.$session_id.'!'.$unknown1.'!'.$unknown2.'?p_p_id=domainAvailabilityCheck_portlet_WAR_dotgov_portlets&p_p_lifecycle=1&p_p_state=normal&p_p_mode=view&p_p_col_id=column-3&p_p_col_count=1&_domainAvailabilityCheck_portlet_WAR_dotgov_portlets_com.sun.faces.portlet.VIEW_ID="%"2FWEB-INF"%"2Fxhtml"%"2Fregistration"%"2FdomainAvailabilityCheck.xhtml&_domainAvailabilityCheck_portlet_WAR_dotgov_portlets_com.sun.faces.portlet.NAME_SPACE=_domainAvailabilityCheck_portlet_WAR_dotgov_portlets_"'; |
61 | $bef .= ' -H "Connection: keep-alive"'; |
61 | $bef .= ' -H "Connection: keep-alive"'; |
62 | $bef .= ' --data '.escapeshellarg('domainAvailabilityCheckForm=domainAvailabilityCheckForm&domainAvailabilityCheckForm%3ArequestedDomainName='.$domain.'&domainAvailabilityCheckForm%3Asubmit=Check+Availability&javax.faces.ViewState='.$viewstate); |
62 | $bef .= ' --data '.escapeshellarg('domainAvailabilityCheckForm=domainAvailabilityCheckForm&domainAvailabilityCheckForm%3ArequestedDomainName='.$domain.'&domainAvailabilityCheckForm%3Asubmit=Check+Availability&javax.faces.ViewState='.$viewstate); |
63 | $bef .= ' --compressed'; |
63 | $bef .= ' --compressed'; |
64 | $bef .= ' --silent'; |
64 | $bef .= ' --silent'; |
65 | 65 | ||
66 | $out = array(); |
66 | $out = array(); |
67 | exec($bef, $out, $code); |
67 | exec($bef, $out, $code); |
68 | 68 | ||
69 | if ($code != 0) { |
69 | if ($code != 0) { |
70 | echo "Error (C) while querying whois service. Please manually check at $friendly_url\n"; |
70 | echo "Error (C) while querying whois service. Please manually check at $friendly_url\n"; |
71 | exit($code); |
71 | exit($code); |
72 | } |
72 | } |
73 | 73 | ||
74 | $x = implode('', $out); |
74 | $x = implode('', $out); |
75 | 75 | ||
76 | if (!preg_match('@<strong>(.*)</tr>@ismU', $x, $m)) { |
76 | if (!preg_match('@<strong>(.*)</tr>@ismU', $x, $m)) { |
77 | echo "Error (D) while querying whois service. Please manually check at $friendly_url\n"; |
77 | echo "Error (D) while querying whois service. Please manually check at $friendly_url\n"; |
78 | exit(1); |
78 | exit(1); |
79 | } |
79 | } |
80 | 80 | ||
81 | $x = $m[1]; |
81 | $x = $m[1]; |
82 | 82 | ||
83 | $x = str_replace('<br />', "\n", $x); |
83 | $x = str_replace('<br />', "\n", $x); |
84 | 84 | ||
85 | $x = strip_tags($x); |
85 | $x = strip_tags($x); |
86 | $x = trim($x); |
86 | $x = trim($x); |
87 | $x = trimHereDoc($x); // jede einzelne Zeile |
87 | $x = trimHereDoc($x); // jede einzelne Zeile |
88 | 88 | ||
89 | $x = preg_replace('@[ \\t]+@m', ' ', $x); |
89 | $x = preg_replace('@[ \\t]+@m', ' ', $x); |
90 | 90 | ||
91 | echo "% Parsing via regex from '$friendly_url'\n\n"; |
91 | echo "% Parsing via regex from '$friendly_url'\n\n"; |
92 | echo "$x\n\n"; |
92 | echo "$x\n\n"; |
93 | exit(0); |
93 | exit(0); |
94 | 94 | ||
95 | # --- |
95 | # --- |
96 | 96 | ||
97 | function trimHereDoc($t) { |
97 | function trimHereDoc($t) { |
98 | # http://stackoverflow.com/a/1655176 |
98 | # http://stackoverflow.com/a/1655176 |
99 | return implode("\n", array_map('trim', explode("\n", $t))); |
99 | return implode("\n", array_map('trim', explode("\n", $t))); |
100 | } |
100 | } |