Page 2 of 5
Re: How can I obtain my internet address?
Posted: Fri Dec 19, 2014 3:13 pm
by heartbone
Vera wrote:heartbone wrote:HeX0R, although yours is by far the easiest to implement, I consider it to be the least stable as far as longevity, which is why it's used third.
But I'm thinking that perhaps I have it backwards.
I wouldn't consider 6 years availability to be unstable
???
Vera, if you look at
the original post from 4 years ago, that site (
http://h3x0r.ath.cx/Sonstiges/ShowMyIp12.php) is no longer there.
Btw: thanks for your collection and inspiration how to get it.
Here's a further variation you might like to add:
And thanks for your contribution to the procedure.
I slightly modified your loop exit logic to remove the
Break statement.
Code: Select all
Procedure.s GetExternalIPAddress()
; RETURNS A STRING CONTAINING THE CURRENT (IPv4} EXTERNAL IP ADDRESS.
; RETRIEVED FROM ANY ONE OF 9 WEBSITES
; ALL 9 TESTED GOOD Monday, December 22, 2014. 6:57-6:59 PM CST
; A PREVIOUS CALL TO InitNetwork() IS REQUIRED.
; WHICH=1 EXTRACT IP ADDRESS FROM http://ip.gwhois.org/
; WHICH=2 EXTRACT IP ADDRESS FROM http://checkip.dyndns.org
; WHICH=3 EXTRACT IP ADDRESS FROM http://ipecho.net/plain
; WHICH=4 EXTRACT IP ADDRESS FROM http://hex0rs.coderbu.de/Sonstiges/ShowMyIp12.php
; WHICH=5 EXTRACT IP ADDRESS FROM http://www.cmyip.com
; WHICH=6 EXTRACT IP ADDRESS FROM http://lloydsplace.com/whatsmyip.php
; WHICH=7 EXTRACT IP ADDRESS FROM http://www.realip.info/api/p/realip.php
; WHICH=8 EXTRACT IP ADDRESS FROM http://www.iplocation.net/
; WHICH=9 EXTRACT IP ADDRESS FROM http://www.whatsmyip.net/
WHICH= Random(8)+ 1 : START= WHICH : EXTADDR$= ""
Repeat
Select WHICH
Case 1
If ReceiveHTTPFile("http://ip.gwhois.org/","IPADDRESS")
ReadFile(1,"IPADDRESS") : EXTADDR$= ReadString(1) : CloseFile(1) : DeleteFile("IPADDRESS")
EndIf
Case 2
HEADER$= GetHTTPHeader("http://checkip.dyndns.org")
STIND= FindString(HEADER$, "Current IP Address:", 1)+ 20
IND= FindString(HEADER$,"</body></html>",1)- STIND
If IND > 0 : EXTADDR$ = Mid(HEADER$,STIND,IND) : EndIf
Case 3
If ReceiveHTTPFile("http://ipecho.net/plain","IPADDRESS")
ReadFile(1,"IPADDRESS") : EXTADDR$= ReadString(1) : CloseFile(1) : DeleteFile("IPADDRESS")
EndIf
Case 4
EXTADDR$= StringField(GetHTTPHeader("http://hex0rs.coderbu.de/Sonstiges/ShowMyIp12.php"),2,Chr(34))
Case 5
If ReceiveHTTPFile("http://www.cmyip.com","IPADDRESS")
ReadFile(1,"IPADDRESS")
Dim sIP.s(0) : sIP(0) = ""
While Eof(1) = 0 And sIP(0) = ""
EXTADDR$= ReadString(1)
If FindString(EXTADDR$,"My IP Address",1)
CreateRegularExpression(0,"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}")
If ExtractRegularExpression(0,EXTADDR$,sIP()) > 0 : EXTADDR$= sIP(0) : EndIf
FreeRegularExpression(0)
EndIf
Wend
CloseFile(1) : DeleteFile("IPADDRESS")
EndIf
Case 6
If ReceiveHTTPFile("http://lloydsplace.com/whatsmyip.php","IPADDRESS")
ReadFile(1,"IPADDRESS")
Dim sIP.s(0) : sIP(0) = ""
While Eof(1) = 0 And sIP(0) = ""
EXTADDR$= ReadString(1)
CreateRegularExpression(0,"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}")
If ExtractRegularExpression(0,EXTADDR$,sIP()) > 0 : EXTADDR$= sIP(0) : EndIf
FreeRegularExpression(0)
Wend
CloseFile(1) : DeleteFile("IPADDRESS")
EndIf
Case 7
If ReceiveHTTPFile("http://www.realip.info/api/p/realip.php","IPADDRESS")
ReadFile(1,"IPADDRESS")
Dim sIP.s(0) : sIP(0) = ""
While Eof(1) = 0 And sIP(0) = ""
EXTADDR$= ReadString(1)
CreateRegularExpression(0,"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}")
If ExtractRegularExpression(0,EXTADDR$,sIP()) > 0 : EXTADDR$= sIP(0) : EndIf
FreeRegularExpression(0)
Wend
CloseFile(1) : DeleteFile("IPADDRESS")
EndIf
Case 8
If ReceiveHTTPFile("http://www.iplocation.net/","IPADDRESS")
ReadFile(1,"IPADDRESS")
Dim sIP.s(0) : sIP(0) = ""
While Eof(1) = 0 And sIP(0) = ""
EXTADDR$= ReadString(1)
If FindString(EXTADDR$,"Your IP Address is",1)
CreateRegularExpression(0,"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}")
If ExtractRegularExpression(0,EXTADDR$,sIP()) > 0 : EXTADDR$= sIP(0) : EndIf
FreeRegularExpression(0)
EndIf
Wend
CloseFile(1) : DeleteFile("IPADDRESS")
EndIf
Case 9
If ReceiveHTTPFile("http://www.whatsmyip.net/","IPADDRESS")
ReadFile(1,"IPADDRESS")
Dim sIP.s(0) : sIP(0) = ""
While Eof(1) = 0 And sIP(0) = ""
EXTADDR$= ReadString(1)
If FindString(EXTADDR$," Address is ",1)
CreateRegularExpression(0,"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}")
If ExtractRegularExpression(0,EXTADDR$,sIP()) > 0 : EXTADDR$= sIP(0) : EndIf
FreeRegularExpression(0)
EndIf
Wend
CloseFile(1) : DeleteFile("IPADDRESS")
EndIf
EndSelect
If CountString(EXTADDR$,".")<>3 Or Len(EXTADDR$)<7 Or Len(EXTADDR$)>15 : EXTADDR$= "" : EndIf
WHICH +1 : If WHICH=10 : WHICH= 1 : EndIf
Until EXTADDR$<>"" Or WHICH=START
ProcedureReturn EXTADDR$
EndProcedure
Marlin wrote:OK, now I actually got to provide some
code about getting the external IP address from the router using upnp.
I even tested it, and it works fine here.
{SNIP}
Thanks for the addition
Marlin.
Although I'm still not convinced that code is not dependent on an external website,
I'd consider using your code as a separate fallback procedure to be called in the case the above
GetExternalIPAddress() procedure returns a null string.
Re: How can I obtain my internet address?
Posted: Fri Dec 19, 2014 9:43 pm
by Vera
heartbone wrote:???
Vera, if you look at the original post from 4 years ago...
You might like to see an
even more original post from 2008 ... and a hint suggesting, that
if you change the address all will be well
Somehow you too figured out that there was a change
I slightly modified your loop exit logic to remove the Break statement.
You're welcome to any customization.
I thought it might be good not to have the whole file read, after the search was successful. Some of the sides one could use are heavily overloaded (also within the html-code) ... but the one I shared is rather straight forward and slim.
I like your idea to pick a random address.
Ty dear
Marlin
I could fax my biography to you
Re: How can I obtain my internet address?
Posted: Fri Dec 19, 2014 9:46 pm
by netmaestro
I will never leave you or forsake you:
http://lloydsplace.com/whatsmyip.php
Re: How can I obtain my internet address?
Posted: Fri Dec 19, 2014 10:46 pm
by Vera
...
...
... but how come you have the same IP as me ?
Re: How can I obtain my internet address?
Posted: Sat Dec 20, 2014 2:57 am
by Marlin
heartbone wrote:Although I'm still not convinced that code is not dependent on an external website
I understand, that things may [sometimes] not be what they appear to be, especially in circumstances with unclear perception,
but I don't believe the compiler will betray us in such a way as to compile white to black and black to white.
Code that does access external sites, does access external sites.
Code that does not access external sites, does not access external sites.
Considering that the opposite should be true is ludicrous, or an indication of damaged logic.
When needing a response from an external site, you need to wait for it to arrive,
which can take some time, especially when there is a lot of traffic.
Vera wrote:I could fax my biography to you
No, I'm currently not prepared to receive faxes.
You could mail it to me though.
That could be interesting.
On the second thought, listening is easier then reading.
Maybe a movie would be even better.
Re: How can I obtain my internet address?
Posted: Sat Dec 20, 2014 4:57 am
by heartbone
I've added your contribution into the mix.
Here is yet another answer to the topic's question.
If you insert the
GetExternalIPAddress() procedure listed at the top of this page into the top of the following 3 line code snippet, and compile it into an executable, then you 'll have a handy little utility.
Code: Select all
InitNetwork()
ExamineIPAddresses()
MessageRequester("EXTERNAL IPv4 = "+GetExternalIPAddress(),"INTERNAL LAN ADDRESS = "+IPString(NextIPAddress()),#PB_MessageRequester_Ok)
Unfortunately the AVIRA Free antivirus that I use in Windows® freaks out and won't let me run it without first turning off the AV.
Security Alert
Type: Detection
A virus or unwanted program 'TR/ATRAPS.Gen' was found in file 'C:\PureNasic\miscellaneous\ShowMyIPs\ShowMyIPs.exe'.
Access to this file was denied.
---more information ----
Special detection
TR/ATRAPS.Gen
Description:
A generic detection routine designed to detect common family characteristics shared in several variants.
This special detection routine was developed in order to detect unknown variants and will be enhanced continuously.
Last modificaion: • 7.09.10.38/8.02.10.38 ( 04/04/2012 )
-----------------------
So it seems as if I'll have to massage the executable to satisfy the AV before I deploy this tool.
Re: How can I obtain my internet address?
Posted: Sat Dec 20, 2014 6:00 am
by Marlin
heartbone wrote:Unfortunately the AVIRA Free antivirus that I use in Windows® freaks out and won't let me run it without first turning off the AV.
Those "Anti"virus programs are sometimes outright dangerous.
There was one, that deleted my application without recourse - sometimes.
Other times it merely blocked it, other times (some updates later) it ignored it completely.
Re: How can I obtain my internet address?
Posted: Sat Dec 20, 2014 12:20 pm
by HeX0R
Vera wrote:heartbone wrote:???
Vera, if you look at the original post from 4 years ago...
You might like to see an
even more original post from 2008 ... and a hint suggesting, that
if you change the address all will be well
Somehow you too figured out that there was a change
Exactly, but anyway the situation is far from being perfect, thinking about programs which used the old domain to obtain the ip.
I had to switch because dynDNS wanted to have money for the redirector.
Therefore I decided to better get a whole server than paying for nothing but a redirection.
The new domain should be safe until I die
Re: How can I obtain my internet address?
Posted: Sat Dec 20, 2014 4:48 pm
by Rescator
Do note that the IP may not be guaranteed.
For example your LAN may use 192.168.x.x and then your WAN and ISP may use 172.x.x.x and so on, depending on the ISP you may actually be behind a ISP NAT, and I think (my router knowledge is limited when it comes to NAT) it is possible that two machines (or routers) on the Same ISP network may end up referring to each other using the 172.x.x.x address.
So your machine may have 3 IP's, one LAN IP, one iSP IP (via your routers WAN) and one "Internet" IP via the ISP's WAN.
Now if a PC gets a IP for a internal network then it will probably throw an error (unless another ISP are using the same range for their internal network).
But normally, asking a website to echo back the IP of yourself tend to work, provided that server isn't within the same ISP local network as your router, I have no idea what will be returned in that case. (anyone got a clue?).
Re: How can I obtain my internet address?
Posted: Sat Dec 20, 2014 5:07 pm
by Thunder93
Typically when you behind Router (or ISP Modem + Router capable) you'll be with Internal / Private IP address. Differs from External IP address or true IP that is giving by the ISP, and that is echo backed by sites like whatsmyrealip.com.
Re: How can I obtain my internet address?
Posted: Sat Dec 20, 2014 8:53 pm
by Hi-Toro
Another option, for those who want to self-host an IP checker:
Code: Select all
<?php
if ($_SERVER["HTTP_X_FORWARDED_FOR"]) {
$ip = $_SERVER["HTTP_X_FORWARDED_FOR"];
} else {
$ip = $_SERVER["REMOTE_ADDR"];
}
echo $ip;
exit();
?>
Save as ip.php, upload to your own web space, then visit in your web browser for quick test. (The HTTP_X_FORWARDED_FOR check deals with non-anonymous proxies such as those used by many ISPs.)
My web space uses chunked encoding (out of my control), which makes it a little trickier to read the value, but the code below (not beautiful/foolproof, was just for my own use!) checks for chunked encoding and decodes as necessary, but I've only tested it on my site, which returns the IP string only. Note that Lloyd's Place returns a full web page, using non-chunked encoding, so on testing it will return the full HTML for the page, which you'd have to parse for the IP address.
Code: Select all
InitNetwork ()
Procedure.s GetIP ()
; Chunked encoding example...
; NB. Returns IP string only...
host$ = "www.hi-toro.com" ; NOTE: Leave out http://
file$ = "/ip.php" ; Needs slash at start!
; Non-chunked encoding example...
; NB. Returns full page HTML including IP as string...
;host$ = "lloydsplace.com"
;file$ = "/whatsmyip.php"
crlf$ = Chr (13) + Chr (10)
ip$ = ""
chunked = #False
www = OpenNetworkConnection (host$, 80)
If www
; Only valid for chunked response from http://hi-toro.com/ip.php, may need
; amending for other hosts...
downloadsize = 65536
*get = AllocateMemory (downloadsize)
SendNetworkString (www, "GET " + file$ + " HTTP/1.1" + crlf$)
SendNetworkString (www, "Host: " + host$ + crlf$)
SendNetworkString (www, "User-Agent: " + "PB Downloader" + crlf$)
SendNetworkString (www, "Accept: text/plain" + crlf$)
SendNetworkString (www, crlf$)
recvd = 0
gotnd = #False ; netdata is zero until data starts coming in...
Repeat
netdata = NetworkClientEvent (www)
If netdata = #PB_NetworkEvent_Data
gotnd = #True ; Can read events until zero after we have an event!
recvd = ReceiveNetworkData (www, *get + recvd, downloadsize - recvd)
EndIf
Delay (100)
Until gotnd = #True And netdata = 0 ; Had a response and no more data
response$ = PeekS (*get)
If FindString (response$, "Transfer-Encoding: chunked")
chunked = #True
EndIf
; Debug response$
; EXAMPLE RESPONSE, comes as a single string (with newline characters):
; HTTP/1.1 200 OK ; <----- [START OF HEADER]
; Date: Tue, 20 Sep 2011 14:13:34 GMT
; Server: Apache/2.0.63 (Unix) mod_ssl/2.0.63 OpenSSL/0.9.8e-fips-rhel5 mod_auth_passthrough/2.1 mod_bwlimited/1.4 FrontPage/5.0.2.2635
; X-Powered-By: PHP/5.2.9
; Transfer-Encoding: chunked
; Content-Type: text/html
; ; <----- [END OF HEADER (blank line)]
; e ; <----- [CHUNKED RESPONSE: BYTES IN HEX, E (14) HERE]
; 99.100.101.102 ; <----- [EXAMPLE IP ADDRESS HERE!]
; 0 ; <----- [ZERO DENOTES END OF DATA CHUNK]
; ; <----- [BLANK LINE INDICATES END OF ALL DATA]
; SKIP HEADER...
If chunked
Repeat
eol = FindString (response$, crlf$, 1)
thisline$ = Left (response$, eol - 1)
response$ = Right (response$, Len (response$) - (eol + 1))
Until thisline$ = ""
; FIND THE LINE CONTAINING THE IP (second line in this case, but should really read
; the number of bytes, $e, and then the data. Still, it comes separated with newlines,
; so what the hell!)...
count = 0
Repeat
count = count + 1
eol = FindString (response$, crlf$, 1)
thisline$ = Left (response$, eol - 1)
response$ = Right (response$, Len (response$) - (eol + 1))
If count = 2
ip$ = thisline$
EndIf
Until thisline$ = ""
Else
; Non-chunked...
Repeat
eol = FindString (response$, crlf$, 1)
thisline$ = Left (response$, eol - 1)
response$ = Right (response$, Len (response$) - (eol + 1))
Until thisline$ = ""
ip$ = response$
EndIf
CloseNetworkConnection (www)
EndIf
ProcedureReturn ip$
EndProcedure
Debug GetIP ()
Re: How can I obtain my internet address?
Posted: Sat Dec 20, 2014 11:00 pm
by heartbone
OK, I'm trying to grok all this.
I am assuming that self-host means that it's a file on an internet site that's under your control, or one where you can post pages and scripts to.
And that you've put a script
Code: Select all
<?php
if ($_SERVER["HTTP_X_FORWARDED_FOR"]) {
$ip = $_SERVER["HTTP_X_FORWARDED_FOR"];
} else {
$ip = $_SERVER["REMOTE_ADDR"];
}
echo $ip;
exit();
?>
on a that server which when accessed returns the IP.
At first glance that seemed close in function to cases 1 & 3 in
GetExternalIPAddress() above, and was wondering why we couldn't build code like it to use from our apps.
Then I realized that the script must only work from an internet server.
It is interesting to see the processing innards of grabbing data from a server.
I'll assume that what's in your
ip.php code is essentially what is going on at the other web sites when they extract the ip and send it back to me.
I hope that I've got it.
Thanks.
Re: How can I obtain my internet address?
Posted: Sun Dec 21, 2014 12:37 am
by Hi-Toro
Yeah, that sounds about right. In most cases these days you can't get your own IP address other than from an external source (whereas connecting via an old analogue modem used to give you your public IP), hence running the PHP script from your web space allows your local PC to connect to a known server that can actually 'read' the remote IP making the request (ie. the remote IP making the request being your local PC).
Your own router would be able to tell you your IP address, but because there are so many routers with different GUIs/protections out there, it would in practise be really difficult even to ask your own router for its public IP address. They really ought to come up with a standard interface across routers for at least this basic piece of information!
Re: How can I obtain my internet address?
Posted: Sun Dec 21, 2014 6:36 am
by Marlin
Hi-Toro wrote:They really ought to come up with a standard interface across routers for at least this basic piece of information!
"They" came up with
upnp quite some time ago (
example code above;
second code tag).
An old router would
not necessarily come up to date all by itself - some might get something like automatic updates, though I tend to reserve myself some control over such things.
Re: How can I obtain my internet address?
Posted: Sun Dec 21, 2014 3:48 pm
by Hi-Toro
UPnP is frequently disabled, though, isn't it? The example fails to connect to my router, too, even though I've amended the IP (and I just logged in to confirm UPnP is enabled).
Interesting to see an example of UPnP usage, though, never really known much about it before.