Solved

Retrieve list of IP Address from tnsnames.ora file.

Posted on 2007-11-20
9
1,118 Views
Last Modified: 2008-02-01
Hi Experts,

I want to write a code in delphi to find out the existing IP addresses in the tnsnames.ora file.
How can it be done.

Thanks
0
Comment
Question by:Asmitagoyal
  • 4
  • 4
9 Comments
 
LVL 19

Expert Comment

by:MerijnB
ID: 20326261
can you post the contents of the file you want to extract the ip's from?
0
 

Author Comment

by:Asmitagoyal
ID: 20326398
hi
the contents of the tnsnames.ora file are as under:

TEST1 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 100.10.10.1)(PORT = 1111))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = TestService)
    )
  )

TEST2 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 100.10.10.2)(PORT = 1111))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = TestService)
    )
  )

TEST3 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 100.10.10.3)(PORT = 1111))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = TestService)
    )

These are the values stored in tnsnames.ora file. now through delphi code i want to get the list of all the IPs.
0
 
LVL 19

Accepted Solution

by:
MerijnB earned 200 total points
ID: 20326455
see this working example
procedure CollectIPs(FileName: string; IPs: TStringList; IncludePortNumbers: boolean);

const HOST_SEP = 'HOST = ';

      PORT_SEP = 'PORT = ';

var Data: TStringList;

    i: integer;

    p: integer;

    IP, Port: string;

begin

 Data := TStringList.Create();
 

 try

  Data.LoadFromFile(FileName);
 

  for i := 0 to Data.Count - 1 do

  begin

   IP := '';

   Port := '';
 

   p := Pos(HOST_SEP, Data[i]);
 

   if p > 0 then

   begin

    IP := Copy(Data[i], p + Length(HOST_SEP), 255);

    IP := LeftStr(IP, Pos(')', IP) - 1);
 

    if IncludePortNumbers then

    begin

     p := Pos(PORT_SEP, Data[i]);
 

     if p > 0 then

     begin

      Port := ':' + Copy(Data[i], p + Length(PORT_SEP), 255);

      Port := LeftStr(Port, Pos(')', Port) - 1);

     end;
 

     if IP <> '' then

      IPs.Add(IP + Port);

    end;

   end;
 

  end;
 

 finally

  Data.Free();

 end;

end;
 

procedure TForm2.Button1Click(Sender: TObject);

var IPs: TStringList;

begin

 IPs := TStringList.Create();
 

 try

  CollectIPs('c:\tnsnames.ora', IPs, true);

  IPs.SaveToFile('c:\addresses.lst');

 finally

  IPs.Free();

 end;

end;

Open in new window

0
 

Author Comment

by:Asmitagoyal
ID: 20326793
Hi
This has solved the problem.
In continuation with this i've another problem.
Suppose i'm connected to Test2 server. Now is there any way to find out the location of the tnsnames.ora file and then get the IP address of the corresponding server.

Thanks
0
Free Trending Threat Insights Every Day

Enhance your security with threat intelligence from the web. Get trending threat insights on hackers, exploits, and suspicious IP addresses delivered to your inbox with our free Cyber Daily.

 
LVL 19

Expert Comment

by:MerijnB
ID: 20327007
do you mean you want to know where the tnsnames.ora file is located, or how to find an ip for given server (Test2) in this tnsnames.ora file?
0
 

Author Comment

by:Asmitagoyal
ID: 20327167
hi
you have told the solution for getting the IP address but is there any way to find the location of tnsnames.ora other than hardcoding it.

Thanks
0
 
LVL 19

Expert Comment

by:MerijnB
ID: 20327179
I don't know where it is normally located. Do you have any information on this?
0
 
LVL 1

Assisted Solution

by:Metalnib
Metalnib earned 50 total points
ID: 20327798
It can be found in the ORACLE_HOME/network/admin directory on the client, usually.
echo %ORACLE_HOME%
Or it can be in any directory pointed by TNS_ADMIN
But if you use DBX connection with SID, oracle driver will find it for you.
0
 

Author Comment

by:Asmitagoyal
ID: 20338443
Hi
i want a delphi code which automatically finds out the file. Is there any way to find it out.
0

Featured Post

IT, Stop Being Called Into Every Meeting

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

Join & Write a Comment

In this tutorial I will show you how to use the Windows Speech API in Delphi. I will only cover basic functions such as text to speech and controlling the speed of the speech. SAPI Installation First you need to install the SAPI type library, th…
Hello everybody This Article will show you how to validate number with TEdit control, What's the TEdit control? TEdit is a standard Windows edit control on a form, it allows to user to write, read and copy/paste single line of text. Usua…
This demo shows you how to set up the containerized NetScaler CPX with NetScaler Management and Analytics System in a non-routable Mesos/Marathon environment for use with Micro-Services applications.
This video shows how to remove a single email address from the Outlook 2010 Auto Suggestion memory. NOTE: For Outlook 2016 and 2013 perform the exact same steps. Open a new email: Click the New email button in Outlook. Start typing the address: …

762 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

20 Experts available now in Live!

Get 1:1 Help Now