Avatar billede hugopedersen Nybegynder
25. januar 2009 - 19:52 Der er 12 kommentarer og
1 løsning

Læse IP oplysninger fra 1 maskine og skrive dem på en anden

Jeg har brug for at kunne læse IP oplysninger på en maskine og gemme dem for senere at kunne skrive dem på en anden maskine.

Årsagen er at hvis vores serviceteknikere skifter en computer, skal den nye maskine have de IP oplysninger der var på maskinen de skiftede. Jeg kopierer i forvejen datafiler ud på et USB stick, så et plus ville være hvis IP oplysningerne kom med også.

Jeg har brug for IP adresse, subnet mask og  default gateway.
Avatar billede nca Juniormester
25. januar 2009 - 20:02 #1
Jeg ville bruge et VB script, hvis jeg var dig.
Der er masser af eksempler på nettet om hvordan du får fat i den, gemmer den i en fil og senere indlæser den fra en fil.
Avatar billede spil2vind Nybegynder
25. januar 2009 - 23:03 #2
Brug WinSock og nedenstående:

function GetIPFromHost(var HostName, IPaddr, WSAErr: string): Boolean;
type
  Name = array[0..100] of Char;
  PName = ^Name;
var
  HEnt: pHostEnt;
  HName, HName1: PName;
  WSAData: TWSAData;
  i: Integer;
begin
  Result := False;
  if WSAStartup($0101, WSAData) <> 0 then begin
    WSAErr := 'Winsock is not responding."';
    Exit;
  end;
  IPaddr := '';
  New(HName);
  if GetHostName(HName^, SizeOf(Name)) = 0 then begin
    HostName := StrPas(HName^);
    HEnt := GetHostByName(HName^);
    for i := 0 to HEnt^.h_length - 1 do begin
      IPaddr := Concat(IPaddr,IntToStr(Ord(HEnt^.h_addr_list^[i])) + '.');
    end;
    SetLength(IPaddr, Length(IPaddr) - 1);
    Result := True;
  end
  else begin
    case WSAGetLastError of
    WSANOTINITIALISED:WSAErr:='WSANotInitialised';
    WSAENETDOWN      :WSAErr:='WSAENetDown';
    WSAEINPROGRESS  :WSAErr:='WSAEInProgress';
    end;
  end;
  Dispose(HName);
  WSACleanup;
end;

procedure TForm2.Button1Click(Sender: TObject);
var
  Host, IP, Err: string;
begin
  if GetIPFromHost(Host, IP, Err) then begin
    Edit1.Text := Host;
    Edit2.Text := IP;
  end
  else
    MessageDlg(Err, mtError, [mbOk], 0);

end;
Avatar billede hugopedersen Nybegynder
26. januar 2009 - 06:54 #3
spil2vind> efter min beste overbevisning så er det 'kun' IP adressen du læser. Så er der jo 5 trin mere.

nca> jeg har godt set at der findes VB scripts der skulle kunne gøre det. Men alle dem jeg har set er på en eller anden måde navngivne forbindelser. Og jeg har ingen chance for at vide om forbindelsen hedder 'LAN connection' 'Local Area...' eller noget helt tredie.
Avatar billede nca Juniormester
26. januar 2009 - 08:06 #4
Jeg bruger selv dette script til at vise maskinens netværksadresser.
Måske kan det bruges?

sIp = ""
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "!\\" & strComputer & "\root\cimv2")
Set colAdapters = objWMIService.ExecQuery("Select * from Win32_NetworkAdapterConfiguration Where IPEnabled = True")
For Each objAdapter in colAdapters
    sDNSHostName = objAdapter.DNSHostName
    If Not IsNull(objAdapter.IPAddress) Then
      For i = LBound(objAdapter.IPAddress) To UBound(objAdapter.IPAddress)
        sIp = sIp + objAdapter.IPAddress(i) + ", "
      Next
    End If
Next
' Skip det ekstra ', '
sIp = Left(sIp, Len(sIp)-2)
Avatar billede hugopedersen Nybegynder
26. januar 2009 - 08:25 #5
Det vil jeg da ikke afvise - jeg skal lige arbejde lidt med det så vender jeg tilbage.
Avatar billede hugopedersen Nybegynder
27. januar 2009 - 14:40 #6
nca> jeg har rodet lidt med dit forslag, men gateway driller mig lidt at finde.
Avatar billede nca Juniormester
27. januar 2009 - 19:37 #7
Dette script viser hvis alt, hvad du har behov for

' WMI script that returns configuration data similar to that returned by IpConfig.
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colAdapters = objWMIService.ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")
n = 1
WScript.Echo

For Each objAdapter in colAdapters

  WScript.Echo "Network Adapter " & n
  WScript.Echo "================="
  WScript.Echo "  Description: " & objAdapter.Description
  WScript.Echo "  Physical (MAC) address: " & objAdapter.MACAddress
  WScript.Echo "  Host name:              " & objAdapter.DNSHostName

  If Not IsNull(objAdapter.IPAddress) Then
      For i = 0 To UBound(objAdapter.IPAddress)
        WScript.Echo "  IP address:            " & objAdapter.IPAddress(i)
      Next
  End If

  If Not IsNull(objAdapter.IPSubnet) Then
      For i = 0 To UBound(objAdapter.IPSubnet)
        WScript.Echo "  Subnet:                " & objAdapter.IPSubnet(i)
      Next
  End If

  If Not IsNull(objAdapter.DefaultIPGateway) Then
      For i = 0 To UBound(objAdapter.DefaultIPGateway)
        WScript.Echo "  Default gateway:        " & objAdapter.DefaultIPGateway(i)
      Next
  End If

  WScript.Echo
  WScript.Echo "  DNS"
  WScript.Echo "  ---"
  WScript.Echo "    DNS servers in search order:"

  If Not IsNull(objAdapter.DNSServerSearchOrder) Then
      For i = 0 To UBound(objAdapter.DNSServerSearchOrder)
        WScript.Echo "      " & objAdapter.DNSServerSearchOrder(i)
      Next
  End If

  WScript.Echo "    DNS domain: " & objAdapter.DNSDomain

  If Not IsNull(objAdapter.DNSDomainSuffixSearchOrder) Then
      For i = 0 To UBound(objAdapter.DNSDomainSuffixSearchOrder)
        WScript.Echo "    DNS suffix search list: " & objAdapter.DNSDomainSuffixSearchOrder(i)
      Next
  End If

  WScript.Echo
  WScript.Echo "  DHCP"
  WScript.Echo "  ----"
  WScript.Echo "    DHCP enabled:        " & objAdapter.DHCPEnabled
  WScript.Echo "    DHCP server:        " & objAdapter.DHCPServer

  If Not IsNull(objAdapter.DHCPLeaseObtained) Then
      utcLeaseObtained = objAdapter.DHCPLeaseObtained
      strLeaseObtained = WMIDateStringToDate(utcLeaseObtained)
  Else
      strLeaseObtained = ""
  End If
  WScript.Echo "    DHCP lease obtained: " & strLeaseObtained

  If Not IsNull(objAdapter.DHCPLeaseExpires) Then
      utcLeaseExpires = objAdapter.DHCPLeaseExpires
      strLeaseExpires = WMIDateStringToDate(utcLeaseExpires)
  Else
      strLeaseExpires = ""
  End If
  WScript.Echo "    DHCP lease expires:  " & strLeaseExpires

  WScript.Echo
  WScript.Echo "  WINS"
  WScript.Echo "  ----"
  WScript.Echo "    Primary WINS server:  " & objAdapter.WINSPrimaryServer
  WScript.Echo "    Secondary WINS server: " & objAdapter.WINSSecondaryServer
  WScript.Echo

  n = n + 1

Next

Function WMIDateStringToDate(utcDate)
  WMIDateStringToDate = CDate(Mid(utcDate, 5, 2)  & "/" & _
                              Mid(utcDate, 7, 2)  & "/" & _
                              Left(utcDate, 4)    & " " & _
                              Mid (utcDate, 9, 2) & ":" & _
                              Mid(utcDate, 11, 2) & ":" & _
                              Mid(utcDate, 13, 2))
End Function
Avatar billede Slettet bruger
27. januar 2009 - 20:06 #8
Hvis du sider direkte på maskinen, så prøv dette:
Start >Kør.
Tast: cmd /c ipconfig /all >c:\ip.txt&notepad c:\ip.txt
Klik OK.

:-)
Avatar billede Slettet bruger
27. januar 2009 - 20:19 #9
Kopier de næste 2 linier ind i notesblok, og gem filen på din USB-pen som GetIP.cmd
@echo off
ipconfig /all >%computername%_IP.txt

Når du har din USB-pen i maskinen, skal du blot dobeltklikke på filen: GetIP.cmd
Så får du en fil med navnet: NavnPåComputer_IP.txt

:-)
Avatar billede hugopedersen Nybegynder
28. januar 2009 - 06:51 #10
Ja men ud fra nca's forslag har jeg fået lavet mig et script der læser adresse, subnet og gateway og gemmer det i en fil.

Jeg har så efterfølgende tilrettet det script jeg allerede havde til at sætte IP adresserne så det læser denne fil og sætter adresserne.
Så nu er der kun 2 ting tilbage:

1.  test, test og atter test
2.  nac lægger et svar så han kan få sine point for sin VBS løsning selvom det er i Delphi kategorien :-)
Avatar billede nca Juniormester
28. januar 2009 - 09:22 #11
Det var dejligt at du kunne bruge min hjælp.
Jeg har programmeret i Delphi i masser af år, men bruger mere og mere VBS til ad hoc opgaver.
Avatar billede hugopedersen Nybegynder
28. januar 2009 - 09:40 #12
VBS er også et dejligt sprog :-)
Jeg er selv erfaren MS Access udvikler så det 'lugter lidt af fisk'
Avatar billede arne_v Ekspert
01. februar 2009 - 05:17 #13
Det er nemmere i VBS men man kan også bruge WMI i Delphi:

program wmifun;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  ActiveX,
  Variants,
  WbemScripting_TLB in 'WbemScripting_TLB.pas';

var
  loc : ISWbemLocator;
  serv : ISWbemServices;
  objset : ISWbemObjectSet;
  enum : IEnumVariant;
  temp : OleVariant;
  val : Cardinal;
  obj : ISWbemObject;
  prop : ISWbemProperty;
  addr : OleVariant;
  i : integer;

begin
  CoInitialize(nil);
  loc := CoSWbemLocator.Create;
  serv :=  loc.ConnectServer('.', 'root\cimv2', '', '', '','', 0, nil);
  objset := serv.ExecQuery('Select * from Win32_NetworkAdapterConfiguration Where IPEnabled = True', 'WQL', wbemFlagReturnImmediately and wbemFlagForwardOnly , nil);
  enum := (objset._NewEnum) as IEnumVariant;
  while (enum.Next(1, temp, val) = S_OK) do begin
    obj := IUnknown(temp) as ISWBemObject;
    prop := obj.Properties_.Item('IPAddress', 0);
    addr := prop.Get_Value;
    for i := VarArrayLowBound(addr,1) to VarArrayHighBound(addr,1) do begin
      write(VarToStr(addr[i]));
    end;
    writeln;
  end;
  CoUninitialize();
end.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester