Toon posts:

[VB6, JScript] Bepalen van outside IP adres

Pagina: 1
Acties:

Verwijderd

Topicstarter
Met verwijzing naar [rml][ ALG?] Automatisch publiceren van logon, logoff en IP adres[/rml] heb ik de volgende vraag. Ik had inderdaad gehoopt op meer dan Ja of Nee, maar de reden dat ik de vraag zo open stelde was in de hoop dat er wat algemene brainstorm aktiviteit zou ontstaan. Te specifieke vragen leveren vaak te specifieke antwoorden op (maar dat is mijn mening, en blijkbaar is dit niet het geschikte forum daarvoor :'( mijn excuses daarvoor).

Maar goed, Specifiek:
Hoe kan ik vanuit VB6 of Jscript (deze talen hebben mijn voorkeur) bepalen wat het outside IP adres van en computer is zonder dat de gebruiker merkt dat ik dit doe. (de computer zit achter een NAT router).
Via VB kan ik wel het LocalIP adres bepalen, maar daar heb ik dus niets aan.
Een zoekopdracht op internet en dit forum leverde ook geen oplossing.

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 14:37

gorgi_19

Kruimeltjes zijn weer op :9

Een connectie maken naar http://www.whatsmyip.org/ en dmv een regular expression de <title></title> parsen en het IP er tussen uit vissen? :)

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
Dat is een mogelijkheid, maar welke garantie heb ik dat die site, zeg, 10 jaar blijft draaien en altijd een IP adres in de title heeft? Bovendien staat er op de site: "PLEASE do not use any automated software or scripts to load this site over and over.
It is becoming a big burdon on my bandwidth. Thanks." Dus...

[ Voor 35% gewijzigd door Verwijderd op 01-10-2004 18:38 ]


  • Kuhlie
  • Registratie: December 2002
  • Niet online
Ivm NAT zal iets, of iemand, aan de andere kant (dwz: de internet-kant) jou moeten vertellen wat voor ip-adres je hebt. Je zult dus altijd een verbinding naar buiten moeten maken naar een service die vertelt van wat voor ip-adres die verbinding kwam. Je kunt natuurlijk ook zelf zo'n service opzetten:

PHP:
1
<?=$_SERVER['REMOTE_ADDR']; ?>


die je dan 10 jaar laat staan ;)

[ Voor 7% gewijzigd door Kuhlie op 01-10-2004 19:03 . Reden: remote_addr gefixt naar REMOTE_ADDR ]


  • klinz
  • Registratie: Maart 2002
  • Laatst online: 10-08 15:44

klinz

weet van NIETS

Aangenomen er tussen de NAT router en de client verder geen IP-routers zitten kun je een ping doen met een TTL van 2 om het IP-adres te bepalen.

  • JapJap
  • Registratie: Maart 2001
  • Laatst online: 07-01 11:02
Een IPCONFIG commando uitvoeren?

  • TrailBlazer
  • Registratie: Oktober 2000
  • Laatst online: 10:02

TrailBlazer

Karnemelk FTW

met ipconfig krijg je het lokale ip

  • bramseltje
  • Registratie: September 2001
  • Laatst online: 23-07 23:59
Doe een traceroute naar een bekend IP adress (bijvoorbeeld een van de root dns-servers :Y)) met een maximale hopcount van (hoeveel stapjes zit ik van mijn eerste buiten-netwerkse pc af).
Lees dan het laatste regeltje uit, en voila, je hebt je IP :)

iets van
code:
1
c:\>tracert 123.123.123.123 -d -h <je getalletje>

en dan wat je terug krijgt uitlezen. Dit werkt, heb zoiets ooit een keer gebruikt in een scriptje dat checkte of PC's online waren (met ping, niet traceroute)

of in een tekstbestandje stoppen:
code:
1
tracert 123.123.123.123 -d -h <jegetalletje> > test.txt

en dan dat stebandje uitlezen...

Stop dit in een script dat uitgevoerd wordt zodra de pc opstart en het bestandje bijvoorbeeld opslaat op een share van je server (of een mapped network drive).
Je zou ook een programmaatje kunnen schrijven met VB dat het tekstbestandje uitleest, verwerkt en dan verwijderd.

kun je d'r wat mee?

  • Sjaaky
  • Registratie: Oktober 2000
  • Laatst online: 12:52
klinz schreef op 01 oktober 2004 @ 19:05:
Aangenomen er tussen de NAT router en de client verder geen IP-routers zitten kun je een ping doen met een TTL van 2 om het IP-adres te bepalen.
In een traceroute kan ik nergens mijn externe ip bekennen. Nu werk ik wel met alcatel home->pro sip spoofing, dus misschien dat het normaal wel zou moeten werken?

Het lullige van NAT is natuurlijk dat het als doel heeft om naar buiten te handelen alsof het om een pc (of whatever) met 1 ip gaat, en naar binnen toe juist zo transparant mogelijk te werk gaat. Dus je zal idd op het application level uitkomen. In principe is elke ftp server geschikt om je externe ip aan op te vragen. Nadeel is dat een goede NAT router ook dit weet te omzeilen.

  • bramseltje
  • Registratie: September 2001
  • Laatst online: 23-07 23:59
het is wel omslachtig zo, maar als je de -d optie weglaat, dan zou je bij je router (o.i.d.) een naam krijgen, die je vervolgens weer kunt pingen want daarbij krijg je van de externe dns als het goed is het ip terug.

Werkt waarschijnlijk niet als je een eigen dns server hebt draaien, maar ik denk dat op die router alleen een DNS-forwarder loopt?

code:
1
2
3
4
5
c:\tracert www.google.nl -h 3

  1    <1 ms    <1 ms    <1 ms  bram.mshome.net [192.168.0.1]
  2    26 ms    30 ms    23 ms  e93129.upc-e.chello.nl [213.93.93.129]
  3    33 ms    28 ms    28 ms  vlan50.ah00rs01.net.upc.nl [212.142.25.65]


code:
1
2
3
4
5
c:\>ping bram.mshome.net -n 1

Pinging bram.mshome.net [192.168.0.1] with 32 bytes of data:

Reply from 192.168.0.1: bytes=32 time<1ms TTL=128


en voila, je hebt een ip... omdat ik hier een lokale dns server heb draaien (deel internet met een PC) werkt 't niet, maar misschien dat je dat kunt proberen?

Verwijderd

Topicstarter
Okay, Dank jullie wel.
Geen van de oplossingen werkten bij mij (tracert gaf continue een Time Out). Maar tijdens het expirimenteren kwam ik erachter dat de "Machine Name" een vaste prefix heeft. Dit maakte het geheel wel heel erg makkelijk natuurlijk. Ik ping nu gewoon naar de reverse DNS en krijg dan vanzelf het IP adres.

iig bedankt voor het aanzetje ;-)

  • Sjaaky
  • Registratie: Oktober 2000
  • Laatst online: 12:52
Als je in je applicatie dan maar wel de mogelijkheid open laat om mensen het externe ip zelf in te laten stellen :). Wat jij volgens mij zoekt is een dyndns.org achtige oplossing. Maar goed dit is P&W ...

De oplossing met de machine name gaat volgens mij ook niet overal werken, maar als het alleen voor jezelf is maakt dat natuurlijk niet uit.

Verwijderd

Topicstarter
In principe zal dit programma maar op 1 computer draaien ja, dus zo'n groot probleem zal het niet zijn. De reden voor dit programma is dat ik op afstand een computer heb met daarop VNC, en telkens als dat ding aangezet wordt wil ik daarvan automatisch het nieuwe IP nummer ontvangen. We werken nu met mailtjes, maar dat is veel te omslachtig. Vandaar.

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Verwijderd schreef op 01 oktober 2004 @ 23:05:
In principe zal dit programma maar op 1 computer draaien ja, dus zo'n groot probleem zal het niet zijn. De reden voor dit programma is dat ik op afstand een computer heb met daarop VNC, en telkens als dat ding aangezet wordt wil ik daarvan automatisch het nieuwe IP nummer ontvangen. We werken nu met mailtjes, maar dat is veel te omslachtig. Vandaar.
IPReply :D

(Uitgesproken: IE-PI-RI-PLI op z'n nederlands, dus niet engels :+)en ja, ik weet hoe je het hoort uit te spreken, maar dan is het lang niet zo lollig...
Heb ik 5 of 7 jaar geleden eens geschreven. Was een app (service?) welke op mijn servertje draaide. Ik kon me servertje gewoon een mail sturen (zat toen nog bij Demon) en hij popte die gewoon uit de pop3 box. Als het subject "ipreply" was, en de mail body bevatte een wachtwoord, dan stuurde hij een reply op het afzenderadres met zijn huidige IP's (gewoon alle ip's die aan die bak hingen). Heb dat ding jaren gebruikt :Y) Werkte als een tiet :D

Overigens moet die app/service dan dus wel draaien op de server met een outside ip. Als die server weer achter een router/nat-ding hangt schiet je er natuurlijk niks mee op.

[ Voor 25% gewijzigd door RobIII op 01-10-2004 23:28 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Verwijderd

Topicstarter
Zoiets heb ik nu dus ook. Bij het opstarten van de computer wordt er automatisch een mailtje verstuurt naar mij en via een scriptje in outlook parsed dit het IP adres in de Subject. Het nadeel is dat XP veel te goed beveiligd is en er dus telkens een dialoogvenstertje verschijnt met de mededeling dat een programma een mailtje wil versturen en of je dat wilt toestaan? Bovendien moet iemand daarvoor inloggen, en ik wil eigenlijk dat het al gebeurt als je nog in het welkomschem zit.

Oh:
wacht ff, bedoel je nou dat ik die andere computer moet "spammen" met "ipreply" mailtjes?

[ Voor 10% gewijzigd door Verwijderd op 01-10-2004 23:42 ]


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Verwijderd schreef op 01 oktober 2004 @ 23:40:
Zoiets heb ik nu dus ook. Bij het opstarten van de computer wordt er automatisch een mailtje verstuurt naar mij en via een scriptje in outlook parsed dit het IP adres in de Subject. Het nadeel is dat XP veel te goed beveiligd is en er dus telkens een dialoogvenstertje verschijnt met de mededeling dat een programma een mailtje wil versturen en of je dat wilt toestaan? Bovendien moet iemand daarvoor inloggen, en ik wil eigenlijk dat het al gebeurt als je nog in het welkomschem zit.

Oh:
wacht ff, bedoel je nou dat ik die andere computer moet "spammen" met "ipreply" mailtjes?
Mijn servertje draaide een service. Die service hield een oogje op een popbox. Als daar een mailtje in verscheen (as in: ik stuurde een mailtje vanuit locatie X naar "huis") met een bepaald subject ("ipreply" of whatever) dan en in de body een wachtwoord ("geheim") dan stuurde die service een reply op die mail met in de body alle IP's die er aan hingen.

Ik zat dus bijv. bij een vriend en wilde bij mijn servertje om te FTP-en ofzo. En natuurlijk kon ik mijn IP niet onthouden. Ik stuurde dan een mailtje vanuit die vriend (met zijn adres dus vriend@zijndomein.nl) naar de server (via "robIII@demon.nl") met het juiste subject en body. Binnen 5 minuten ofzo kreeg ik dan een reply van mijn servertje...

Of, om het nog duidelijker te maken: Ik kon nooit mijn IP onthouden, maar wel mijn email adres ;)

Ik gebruikte overigens geen outlook (express) ofzo om die mail te versturen vanuit de server, maar gewoon een COM-componentje (Dundas mailer als ik me niet vergis...is nog gratis ook!). Helaas kan ik het ding nergens meer vinden, anders had ik het wel gepost. Je kon het "benodigde" password en subject instellen, de interval om de pop-box te pollen en natuurlijk de POP3 gegevens etc.

Met al die batched SMTP van tegenwoordig moet je per ommegaande eigenlijk net zo goed een reply kunnen krijgen en het scheelt nog pollen ook! Mocht je Exchange draaien, dan kun je daar makkelijk een plugin voor schrijven... Ik draai zelf Mercury op het moment, maar ook daar valt wel een plugin voor te schrijven... 't is gewoon maar een idee, ik wist niet dat je zo serieus zou happen :+

[ Voor 11% gewijzigd door RobIII op 01-10-2004 23:53 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Verwijderd

Topicstarter
HAP HAP :*)

Het is een leuk idee, het enige probleem dat ik zie is dat ik outlook express op de remote computer dus als service moet laten draaien. Overigens ben ik al jaren op zoek naar een goede e-mail client als vervanger voor outlook (office versie) die a) als service draait en b) archiveringsfuncties heeft. Maar dat terzijde. Punt is wel, dat als ik dat heb, ik geen proggie nodig heb maar altijd gewoon via e-mail zou kunnen pingen. Goed idee! _/-\o_

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Verwijderd schreef op 02 oktober 2004 @ 00:08:
HAP HAP :*)

Het is een leuk idee, het enige probleem dat ik zie is dat ik outlook express op de remote computer dus als service moet laten draaien. Overigens ben ik al jaren op zoek naar een goede e-mail client als vervanger voor outlook (office versie) die a) als service draait en b) archiveringsfuncties heeft. Maar dat terzijde. Punt is wel, dat als ik dat heb, ik geen proggie nodig heb maar altijd gewoon via e-mail zou kunnen pingen. Goed idee! _/-\o_
Waarom heb je outlook nodig op de remote computer? Die app kan toch lekker zelf poppen? En je kunt op locatie, als er geen mailclient voorhanden is, desnoods met telnet nog een mailtje sturen...

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Verwijderd

Topicstarter
Ah, dat bedoel ik nou...
Ik was Telnet helemaal vergeten! Ik zat maar te klooien met IMAPI enzo, terwijl ik natuurlijk gewoon alle security kon omzeilen met Winsock! Stom |:(

Nu moet ik helaas toegeven dat het ene tijd geleden is voor me, maar voorlopig heb ik dit:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
Private ReturnedData As String

Private Sub Form_Load()
   Dim CurrentIP As String
   Dim CommaPosition As Long
   Dim ClosedPosition As Long
   
On Error Resume Next
   Winsock1.RemoteHost = "mail.server.nl"
   Winsock1.RemotePort = 25
   ReturnedData = ""
   Winsock1.Connect
   Do While Winsock1.State <> sckConnected
      DoEvents
      If Winsock1.State = sckError Then GoTo LPExit
   Loop
   Winsock1.SendData "HELO Mailserver" & vbCrLf
   Do While ReturnedData = "" 'this is temporary to prevent code from
      DoEvents                'executing before a getdata has occured
   Loop
   CommaPosition = InStr(1, ReturnedData, "[")
   If CommaPosition > 0 Then
      ClosedPosition = InStr(CommaPosition, ReturnedData, "]")
      CommaPosition = CommaPosition + 1
      ClosedPosition = ClosedPosition - CommaPosition
      CurrentIP = Mid$(ReturnedData, CommaPosition, ClosedPosition)
   End If
   Winsock1.SendData "mail from: ik@ergens.nl" & vbCrLf
   Winsock1.SendData "rcpt to: jij@ergens.nl" & vbCrLf
   Winsock1.SendData "data" & vbCrLf
   Winsock1.SendData "subject: IP " & CurrentIP & vbCrLf & vbCrLf
   Winsock1.SendData "." & vbCrLf
LPExit:
   Winsock1.Close
   Unload Me
End Sub


Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
   Winsock1.GetData ReturnedData
End Sub

Het probleem is nu dat de DataArrival event niet wordt "geraised" (hoe noem je dat in het NL eigenlijk?) Vandaar dat ik die ReturnedData="" loop erin heb gelast, maar daar blijft 'ie nu eeuwig in hangen natuurlijk. Dus wat doe ik fout?
(Oh, en let niet op de namen van de var's aub)

[ Voor 8% gewijzigd door Verwijderd op 02-10-2004 16:17 ]


  • Kuhlie
  • Registratie: December 2002
  • Niet online
Dit heeft te maken met het feit dat VB met non-blocking sockets werkt. Helaas werkt dit net niet altijd even goed zoals je wilt: de DataArrival zal niet worden geraised voordat het blok code waarin de .Connect is uitgevoerd is afgelopen.

Je kunt de senddata's beter in de _DataArrival-event uitvoeren.

Verwijderd

Topicstarter
Okay, das opgelost...maar nu wordt er geen mail verstuurt?

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
Private ReturnedData As String

Private Sub Form_Load()
On Error Resume Next
   Winsock1.RemoteHost = "mail.server.nl"
   Winsock1.RemotePort = 25
   Winsock1.Connect
   Do While Winsock1.State <> sckConnected
      DoEvents
      If Winsock1.State = sckError Then ExitProg
   Loop
   Winsock1.SendData "HELO Mailserver" & vbCrLf
End Sub

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
On Error Resume Next
   Winsock1.GetData ReturnedData
   SendMailData
End Sub

Private Sub SendMailData()
   Dim CurrentIP As String
   Dim StartPosition As Long
   Dim EndPosition As Long
   
On Error Resume Next
   StartPosition = InStr(1, ReturnedData, "[")
   If StartPosition > 0 Then
      EndPosition = InStr(StartPosition, ReturnedData, "]")
      StartPosition = StartPosition + 1
      EndPosition = EndPosition - StartPosition
      CurrentIP = Mid$(ReturnedData, StartPosition, EndPosition)
   End If
   Winsock1.SendData "mail from: ik@ergens.nl" & vbCrLf
   Winsock1.SendData "rcpt to: jij@ergens.nl" & vbCrLf
   Winsock1.SendData "data" & vbCrLf
   Winsock1.SendData "subject: IP " & CurrentIP & vbCrLf & vbCrLf
   Winsock1.SendData "." & vbCrLf
   ExitProg
End Sub

Private Sub ExitProg()
   Winsock1.Close
   Unload Me
End Sub


In de eerste versie (boven) ontvang ik gewoon mailtjes met "IP" als subject, maar in deze versie ontvang ik dus helemaal geen mailtjes meer. (En ja, ik heb zowel de server als de mail adressen in het programma op echte waarden staan)

  • Kuhlie
  • Registratie: December 2002
  • Niet online
Haal ExitProg eens weg. Anders krijgt Visual Basic de tijd niet om de data ook daadwerkelijk te versturen.

Verwijderd

Topicstarter
Dat was het inderdaad. Raar. Daardoor ontstaat overigens wel de situatie dat de Dataarrivel event steeds weer wordt aangeroepen. Tijdens een test stuurde ik ruim 1300 mailtjes naar mezelf. Maar goed. Het werkt nu en ik kan dit gebruiken om inloggen, uitloggen en ip-veranderingen naar mezelf te sturen vanaf de remote computer.
Bedankt voor de hulp. :)
Pagina: 1