📄 find_ip.cxx
字号:
//// find_ip.cxx//// When used behind NAT, this finds the IP address of the NAT box.//// Roger Hardiman//#include <ptlib.h>#include <ptclib/http.h>#include <ptclib/html.h>class FindIP : public PProcess{ PCLASSINFO(FindIP, PProcess) public: void Main(); BOOL get_ip(PString server_url, PString &ip_address);};PCREATE_PROCESS(FindIP)void FindIP::Main(){ cout << "Find IP - Find the IP address of your NAT box" << endl; PString ip; if (get_ip("http://dnscheck.blueyonder.co.uk:888/cgi-bin/checker.pl",ip)) { cout << ip << endl; } if (get_ip("http://checkip.dyndns.org:8245/",ip)) { cout << ip << endl; } if (get_ip("http://checkip.dyndns.org/",ip)) { cout << ip << endl; } if (get_ip("http://www.lawrencegoetz.com/programs/ipinfo/",ip)) { cout << ip << endl; } if (get_ip("http://www.whatismyipaddress.com/",ip)) { cout << ip << endl; } if (get_ip("http://tools.onedown.net/ipaddress",ip)) { cout << ip << endl; }}BOOL FindIP::get_ip(PString server_url, PString &ip_address){ cout << "Trying " << server_url << " - " << flush; BOOL result = FALSE; PHTTPClient web("webserver"); PString html; if (web.GetTextDocument(server_url,html)) { if (!html.IsEmpty()) { // cout << "The web server returned the data" << endl << html << endl; // Now parse the HTML and pull out the IP address. Just look // for anything of the form N.N.N.N where N is an integer. PRegularExpression regex("[0-9]*[.][0-9]*[.][0-9]*[.][0-9]*"); PINDEX pos,len; if (html.FindRegEx(regex, pos, len)) { ip_address = html.Mid(pos,len); cout << "IP obtained." << endl; //cout << "Your real IP is " << ip_address << endl; result = TRUE; } else { cout << "No IP address found on page." << endl; } } else { cout << "Page is empty." << endl; } } else { cout << "Could not get page from server: " << web.GetLastResponseCode() << ' ' << web.GetLastResponseInfo() << endl; } return result;}// End of find_ip.cxx
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -