Advertisement
Guest User

Lookup IP

a guest
Nov 6th, 2017
1,132
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.13 KB | None | 0 0
  1. //===[Misc]=====================================================================
  2.  
  3. #include <a_http>
  4. #include <a_json>
  5.  
  6. #define GetPlayerHost(%1) LookupData[%1][Hostname]
  7. #define GetPlayerISP(%1) LookupData[%1][ISP]
  8. #define GetPlayerCountryCode(%1) LookupData[%1][Code]
  9. #define GetPlayerCountryName(%1) LookupData[%1][Country]
  10. #define GetPlayerCountryRegion(%1) LookupData[%1][Region]
  11. #define IsProxyUser(%1) LookupData[%1][Proxy]
  12.  
  13. enum ldata
  14. {
  15. Hostname[60],
  16. ISP[60],
  17. Code[3],
  18. Country[45],
  19. Region[43],
  20. Proxy
  21. };
  22.  
  23. new
  24. LookupData[MAX_PLAYERS][ldata],
  25. PlayerSession[MAX_PLAYERS],
  26. Retry[MAX_PLAYERS];
  27.  
  28. forward OnLookupResponse(sessionid, response, data[]);
  29. forward OnLookupComplete(playerid);
  30.  
  31. //===[Callbacks]================================================================
  32.  
  33. public OnPlayerConnect(playerid)
  34. {
  35. cleardata(LookupData[playerid][Hostname]);
  36. cleardata(LookupData[playerid][ISP]);
  37. cleardata(LookupData[playerid][Code]);
  38. cleardata(LookupData[playerid][Country]);
  39. cleardata(LookupData[playerid][Region]);
  40. LookupData[playerid][Proxy] = 0;
  41.  
  42. Retry[playerid] = 0;
  43. PlayerSession[playerid] = 0;
  44. LookupPlayerIP(playerid);
  45.  
  46. return CallLocalFunction("Lookup_OnPlayerConnect", "i", playerid);
  47. }
  48.  
  49. public OnLookupResponse(sessionid, response, data[])
  50. {
  51. new hostname[128], isp[128], code[128], country[128], region[128], proxy[128];
  52. new playerid = GetPlayerFromSession(sessionid);
  53.  
  54. if(playerid == -1) return 1;
  55.  
  56. if(response != 200)
  57. {
  58. if(Retry[playerid] == 0)
  59. {
  60. Retry[playerid] = 1;
  61. LookupPlayerIP(playerid);
  62. }
  63. return 1;
  64. }
  65.  
  66. new JSONNode:dataNode = json_parse_string(data);
  67.  
  68. json_get_string(dataNode, hostname, sizeof(hostname), "ipName");
  69. json_get_string(dataNode, isp, sizeof(isp), "isp");
  70. json_get_string(dataNode, code, sizeof(code), "countryCode");
  71. json_get_string(dataNode, country, sizeof(country), "country");
  72. json_get_string(dataNode, region, sizeof(region), "region");
  73. json_get_string(dataNode, proxy, sizeof(proxy), "query");
  74.  
  75. format(LookupData[playerid][Hostname], 60, hostname);
  76. format(LookupData[playerid][ISP], 60, isp);
  77. format(LookupData[playerid][Code], 60, code);
  78. format(LookupData[playerid][Country], 60, country);
  79. format(LookupData[playerid][Region], 60, region);
  80. format(LookupData[playerid][Proxy], 60, proxy);
  81.  
  82. json_close(dataNode);
  83. CallLocalFunction("OnLookupComplete", "i", playerid);
  84.  
  85. return 1;
  86. }
  87.  
  88. //===[Functions]================================================================
  89.  
  90. stock LookupPlayerIP(playerid)
  91. {
  92. if(!IsPlayerNPC(playerid))
  93. {
  94.  
  95. new ip[16], lQuery[60];
  96.  
  97. static
  98. SessionIndex;
  99. SessionIndex++;
  100. PlayerSession[playerid] = SessionIndex;
  101.  
  102. GetPlayerIp(playerid, ip, sizeof(ip));
  103. format(lQuery, sizeof(lQuery), "extreme-ip-lookup.com/json/%s", ip);
  104.  
  105. HTTP(SessionIndex, HTTP_GET, lQuery, "", "OnLookupResponse");
  106.  
  107. }
  108. }
  109.  
  110. stock GetPlayerFromSession(sessionid)
  111. {
  112. for(new i = 0; i < MAX_PLAYERS; i++)
  113. {
  114. if(IsPlayerConnected(i) && PlayerSession[i] == sessionid)
  115. return i;
  116. }
  117.  
  118. return -1;
  119. }
  120.  
  121. stock DisplayLookupData(playerid, targetid)
  122. {
  123. new lstr[300], boxname[40];
  124.  
  125. GetPlayerIp(targetid, boxname, sizeof(boxname));
  126. format(boxname, sizeof(boxname), "IP Lookup: %s", boxname);
  127.  
  128. format(lstr, sizeof(lstr),
  129. "Hostname: %s\n\
  130. ISP: %s\n\
  131. Country: %s (%s)\n\
  132. State/Region: %s",
  133. LookupData[targetid][Hostname],
  134. LookupData[targetid][ISP],
  135. LookupData[targetid][Country],
  136. LookupData[targetid][Code],
  137. LookupData[targetid][Region]);
  138.  
  139. ShowPlayerDialog(playerid, 30000, DIALOG_STYLE_MSGBOX, boxname, lstr, "Close", "");
  140. }
  141.  
  142. stock strmidex(dest[], const src[], start, end, maxlength=sizeof dest)
  143. {
  144. if(end - start > 1)
  145. strmid(dest, src, start, end, maxlength);
  146. }
  147.  
  148. stock cleardata(src[])
  149. {
  150. src[0] = '?';
  151.  
  152. new c = 1;
  153. while(src[c] != '\0')
  154. {
  155. src[c] = '\0';
  156. c++;
  157. }
  158. }
  159.  
  160. //===[Hooking]==================================================================
  161.  
  162. #if defined _ALS_OnPlayerConnect
  163. #undef OnPlayerConnect
  164. #else
  165. #define _ALS_OnPlayerConnect
  166. #endif
  167.  
  168. #define OnPlayerConnect Lookup_OnPlayerConnect
  169.  
  170. forward Lookup_OnPlayerConnect(playerid);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement