code_junkie

How do you validate that a string is a valid IP address in C++?

Nov 12th, 2011
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.97 KB | None | 0 0
  1. [mihailim@home ~]$ ping 0xc0a8010a
  2. PING 0xc0a8010a (192.168.1.10) 56(84) bytes of data.
  3. ^C
  4. --- 0xc0a8010a ping statistics ---
  5. 3 packets transmitted, 0 received, 100% packet loss, time 2479ms
  6.  
  7. bool Config::validateIpAddress(const string ipAddress)
  8. {
  9. struct sockaddr_in sa;
  10. int result = inet_pton(AF_INET, ipAddress.c_str(), &(sa.sin_addr));
  11. return result != 0;
  12. }
  13.  
  14. std::string ipAddress = "127.0.0.1";
  15. boost::system::error_code ec;
  16. boost::asio::ip::address::from_string( ipAddress, ec );
  17. if ( ec )
  18. std::cerr << ec.message( ) << std::endl;
  19.  
  20. bool IsIPAddress(std::string & ipaddr)
  21. {
  22.  
  23. StringTokenizer quads(ipaddr,".");
  24.  
  25. if (quads.countTokens() != 4) return false;
  26.  
  27. for (int i=0; i < 4; i++)
  28. {
  29. std::string quad = quads.nextToken();
  30. for (int j=0; j < quad.length(); j++
  31. if (!isdigit(quad[j])) return false;
  32.  
  33. int quad = atoi(quads.GetTokenAt(i));
  34. if (quad < 0) || (quad > 255)) return false;
  35. }
  36.  
  37. return true;
  38. }
  39.  
  40. bool validate_ip_address(const std::string& s)
  41. {
  42. static const boost::regex e("\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}");
  43. return regex_match(s, e);
  44. }
  45.  
  46. vector<string> &split(const string &s, char delim, vector<string> &elems) {
  47. stringstream ss(s);
  48. string item;
  49. while(getline(ss, item, delim)) {
  50. elems.push_back(item);
  51. }
  52. return elems;
  53. }
  54.  
  55. vector<string> split(const string &s, char delim) {
  56. vector<string> elems;
  57. return split(s, delim, elems);
  58. }
  59.  
  60.  
  61. bool isIPAddress(string ipaddr){
  62.  
  63. if (ipaddr.length()){
  64. vector<string> _ip=split(ipaddr,'.');
  65. if (_ip.size()==4){
  66. for (int i=0; i < 4; i++){
  67. for (int j=0; j < _ip[i].length(); j++)
  68. if (!isdigit(_ip[i][j])) return false;
  69. if ((atoi(_ip[i].c_str()) < 0) || (atoi(_ip[i].c_str()) > 255)) return false;
  70. }
  71. return true;
  72. }
  73. }
  74. return false;
  75. }
Add Comment
Please, Sign In to add comment