Code archives/Networking/GetLocalIP function

This code has been declared by its author to be Public Domain code.

Download source code

GetLocalIP function by markcw2014
A cross-platform version of LocalIP here http://www.blitzmax.com/codearcs/codearcs.php?code=3004

I couldn't find this anywhere when I searched.

Intended to be used with the gnet lobby, see here http://www.blitzmax.com/codearcs/codearcs.php?code=2818
or here http://www.blitzmax.com/codearcs/codearcs.php?code=1413

The idea is you send your pc's local ip name or address (not localhost/127.0.0.1) to the server_name slot on the gnet lobby. If you send the ip name you can convert it back to ip address by HostIps, as in the example here. This method is a substitute for 'real' broadcasting (message sent to all lan pcs).

Having read a bit about "leaking" of ip addresses, I believe the external ip is the one that is most dangerous to share but this changes with every connection so I don't think it's really important to encrypt any ips sent to the gnet lobby.
' Get pc's local (lan) ip, win/mac/linux

SuperStrict

Framework Brl.EventQueue
Import Brl.StandardIO
Import pub.freeprocess
Import brl.socket

' example
Local ip:String=GetLocalIP()

Print "host name:"+HostName(HostIp(ip)) ' get pc's local name from ip

Local ips:Int[] = HostIps(HostName(HostIp(ip))) ' get pc's local ip from name
For Local i:Int = EachIn ips
	If i=HostIp(ip) Then Print "host ip:"+DottedIP(i)
Next

Function GetLocalIP:String()
?Win32
	Return DottedIP(HostIp("",0))
?Not Win32
	Local proc:TProcess=TProcess.Create("ifconfig",0)
	Local ps:String,is:String,spi:Int,ssi:Int,sci:Int
	While proc.Status() ' get ifconfig results
		If proc.pipe.ReadAvail()
			ps=proc.pipe.ReadString(proc.pipe.ReadAvail())
		EndIf
	Wend
	While spi>-1 ' get pc's local ip
		spi=ps.Find("inet ",spi+1)
		For sci=spi+5 To spi+15
			If ps[sci..sci+1]>="0" And ps[sci..sci+1]<="9" Then Exit
		Next
		ssi=ps.Find(" ",sci)
		is=ps[sci..ssi]
		If is<>"127.0.0.1" And is<>"" Then Exit
	Wend
	Return is
?
End Function

Comments

None.

Code Archives Forum