Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > de.comp.lang.php > #4486 > unrolled thread

IP-Maske berechnen

Started byKlaus Ketelaer <noreply@spambouncer.de>
First post2019-05-26 12:10 +0200
Last post2019-05-30 20:22 +0200
Articles 15 on this page of 35 — 7 participants

Back to article view | Back to de.comp.lang.php


Contents

  IP-Maske berechnen Klaus Ketelaer <noreply@spambouncer.de> - 2019-05-26 12:10 +0200
    Re: IP-Maske berechnen Claus Reibenstein <4spamersonly@kabelmail.de> - 2019-05-26 16:26 +0200
      Re: IP-Maske berechnen Ralph Aichinger <ra@pi.h5.or.at> - 2019-05-26 16:41 +0200
        Re: IP-Maske berechnen Claus Reibenstein <4spamersonly@kabelmail.de> - 2019-05-27 11:14 +0200
          Re: IP-Maske berechnen Arno Welzel <usenet@arnowelzel.de> - 2019-05-27 11:28 +0200
          Re: IP-Maske berechnen Ralph Aichinger <ra@pi.h5.or.at> - 2019-05-27 11:57 +0200
            Re: IP-Maske berechnen Willi Marquart <usenet@neppi.net> - 2019-05-27 15:28 +0200
              Re: IP-Maske berechnen Arno Welzel <usenet@arnowelzel.de> - 2019-05-27 15:36 +0200
              Re: IP-Maske berechnen Ralph Aichinger <ra@pi.h5.or.at> - 2019-05-27 15:41 +0200
      Re: IP-Maske berechnen Arno Welzel <usenet@arnowelzel.de> - 2019-05-26 16:59 +0200
        Re: IP-Maske berechnen Klaus Ketelaer <noreply@spambouncer.de> - 2019-05-26 17:36 +0200
          Re: IP-Maske berechnen Stefan+Usenet@Froehlich.Priv.at (Stefan Froehlich) - 2019-05-26 16:58 +0000
          Re: IP-Maske berechnen Arno Welzel <usenet@arnowelzel.de> - 2019-05-27 08:08 +0200
          Re: IP-Maske berechnen Willi Marquart <usenet@neppi.net> - 2019-05-27 12:22 +0200
            Re: IP-Maske berechnen Willi Marquart <usenet@neppi.net> - 2019-05-27 12:34 +0200
              Re: IP-Maske berechnen Arno Welzel <usenet@arnowelzel.de> - 2019-05-27 17:43 +0200
                Re: IP-Maske berechnen Willi Marquart <usenet@neppi.net> - 2019-05-27 18:16 +0200
                Re: IP-Maske berechnen Arno Welzel <usenet@arnowelzel.de> - 2019-05-28 11:51 +0200
                  Re: IP-Maske berechnen Willi Marquart <usenet@neppi.net> - 2019-05-30 12:21 +0200
                    Re: IP-Maske berechnen Arno Welzel <usenet@arnowelzel.de> - 2019-05-30 20:06 +0200
                      Re: IP-Maske berechnen Willi Marquart <usenet@neppi.net> - 2019-05-31 07:57 +0200
                        Re: IP-Maske berechnen Arno Welzel <usenet@arnowelzel.de> - 2019-06-01 13:17 +0200
            Re: IP-Maske berechnen Klaus Ketelaer <noreply@spambouncer.de> - 2019-05-27 21:19 +0200
              Re: IP-Maske berechnen Arno Welzel <usenet@arnowelzel.de> - 2019-05-28 02:35 +0200
                Re: IP-Maske berechnen Klaus Ketelaer <noreply@spambouncer.de> - 2019-05-28 09:24 +0200
                  Re: IP-Maske berechnen Arno Welzel <usenet@arnowelzel.de> - 2019-05-28 12:05 +0200
                    Re: IP-Maske berechnen Klaus Ketelaer <noreply@spambouncer.de> - 2019-05-30 09:05 +0200
                      Re: IP-Maske berechnen Stefan+Usenet@Froehlich.Priv.at (Stefan Froehlich) - 2019-05-30 07:11 +0000
                      Re: IP-Maske berechnen Arno Welzel <usenet@arnowelzel.de> - 2019-05-30 20:10 +0200
              Re: IP-Maske berechnen Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2019-05-28 15:40 +0200
                Re: IP-Maske berechnen Klaus Ketelaer <noreply@spambouncer.de> - 2019-05-30 09:13 +0200
                  Re: IP-Maske berechnen Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2019-05-30 10:12 +0200
                    Re: IP-Maske berechnen Klaus Ketelaer <noreply@spambouncer.de> - 2019-05-30 14:26 +0200
                      Re: IP-Maske berechnen Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2019-05-30 14:41 +0200
                      Re: IP-Maske berechnen Arno Welzel <usenet@arnowelzel.de> - 2019-05-30 20:22 +0200

Page 2 of 2 — ← Prev page 1 [2]


#4519

FromWilli Marquart <usenet@neppi.net>
Date2019-05-31 07:57 +0200
Message-ID<q9g1feh9oee3hgmbcl43b5e8la0d87t6st@neppi.net>
In reply to#4516
Arno Welzel schrieb:

>Willi Marquart:
>> Das geht doch:
>> 
>> <?php
>>   $netz=ip2long("134.119.0.0");
>>   $broad=ip2long("134.119.0.255");
>>   $mask= ~($netz ^ $broad);
>>   print(long2ip($mask));
>> ?>
>
>Da kommt dann heraus: 255.255.255.0
>
>Was ist da nun die CIDR-Maske? Also wie kommt man von dem Ergebnis auf
>134.119.0.0/24?

Ach ja, die klassische Netzmaske war ja gar nicht gesucht, dann zählen
wir halt die Einer im Ergebnis:
 print ( substr_count( sprintf("%b",$mask),"1"));

Gruß Willi

[toc] | [prev] | [next] | [standalone]


#4520

FromArno Welzel <usenet@arnowelzel.de>
Date2019-06-01 13:17 +0200
Message-ID<glf55tFlqlmU1@mid.individual.net>
In reply to#4519
Willi Marquart:

> Arno Welzel schrieb:
> 
>> Willi Marquart:
>>> Das geht doch:
>>>
>>> <?php
>>>   $netz=ip2long("134.119.0.0");
>>>   $broad=ip2long("134.119.0.255");
>>>   $mask= ~($netz ^ $broad);
>>>   print(long2ip($mask));
>>> ?>
>>
>> Da kommt dann heraus: 255.255.255.0
>>
>> Was ist da nun die CIDR-Maske? Also wie kommt man von dem Ergebnis auf
>> 134.119.0.0/24?
> 
> Ach ja, die klassische Netzmaske war ja gar nicht gesucht, dann zählen
> wir halt die Einer im Ergebnis:
>  print ( substr_count( sprintf("%b",$mask),"1"));

Stimmt - das ist eine einfache Lösung.


-- 
Arno Welzel
https://arnowelzel.de

[toc] | [prev] | [next] | [standalone]


#4503

FromKlaus Ketelaer <noreply@spambouncer.de>
Date2019-05-27 21:19 +0200
Message-ID<qchd7c$t1h$1@news.albasani.net>
In reply to#4496
Am 27.05.2019 um 12:22 schrieb Willi Marquart:
> Klaus Ketelaer schrieb:
> 
>>
>> Die Maske 134.119.0.0/20 soll den IP-Bereich
>>
>>    134.119.0.1 bis 134.119.15.254
>>
>> also
>>
>>    10000110.01110111.00000000.00000001 bis
>>    10000110.01110111.00001111.11111110
>> 	
>> berücksichtigen.
>>
>>>
>>>> Welche davon soll die Berechnung liefern? Nach welchen Kriterien?
>>>
>>> Eine fertige Funktion dafür in PHP gibt es wohl nicht. Zumindest finde
>>> ich in <https://www.php.net/manual/de/ref.network.php> nichts passendes.
>>
>> Ja, das dachte ich schon. Ich schreibe mir gerade meinen eigenen
>> Rechner.
>>
>> Ursprünglich wollte ich eine Funktion, die mir, wenn ich
>>
>> 134.119.0.1 , 134.119.15.254  als Parameter eingebe,
>>
>> die Maske 134.119.0.0/20 aus gibt.
> 
> Wenn du als Parameter die Netzadresse und die Broadcastadresse
> benutzt, also
> 134.119.0.0 und 134.119.15.255 und die beiden als 32-Bitzahl
> miteinander binär äquivalenz verknüpfst (auch bekannt als XNOR) dann
> ist das Ergebnis die gesuchte Maske:
> 

Mal abgesehen davon, dass ich das am Sonntag-Vormittag
bereits programmiert habe, wollte ich doch nur wissen,
ob es sowas fertig gibt.

> 10000110 01110111 00000000 00000000
> 10000110 01110111 00001111 11111110
> -----------------------------------
> 11111111 11111111 11110000 00000000
> 
> Voila, das wars.

Nicht dass die Umsetzung schwer wäre, aber ganz so banal
ist es doch nicht, denn eine IP-Adresse besteht nunmal
nicht aus Nullen und Einsen. Ein wenig mehr Arbeit ist
das schon. Für meine Bedürfnisse sind es dann über 200
Zeilen Code geworden.

Na ja, und das hätte ich mir halt sparen können, wenn es
etwas Fertiges geben hätte.

Frei nach: Es ist kein Problem, eine IP-Adresse händisch
in eine Zahl umzurechnen, aber ip2long ist halt bequemer...

Gruß Klaus

[toc] | [prev] | [next] | [standalone]


#4504

FromArno Welzel <usenet@arnowelzel.de>
Date2019-05-28 02:35 +0200
Message-ID<gl3e26F59h7U2@mid.individual.net>
In reply to#4503
Klaus Ketelaer:

> Am 27.05.2019 um 12:22 schrieb Willi Marquart:
>> Klaus Ketelaer schrieb:
>>
>>>
>>> Die Maske 134.119.0.0/20 soll den IP-Bereich
>>>
>>>    134.119.0.1 bis 134.119.15.254
[...]
> Nicht dass die Umsetzung schwer wäre, aber ganz so banal
> ist es doch nicht, denn eine IP-Adresse besteht nunmal
> nicht aus Nullen und Einsen. Ein wenig mehr Arbeit ist
> das schon. Für meine Bedürfnisse sind es dann über 200
> Zeilen Code geworden.

Ähm...?

Also für einen Adressbereich die Netzwerkmaske zu berechnen sind
wirklich nur zwei oder drei Befehle. Deine 200 Zeilen Code haben
definitiv nicht nur Netzwerkmasken berechnet.


-- 
Arno Welzel
https://arnowelzel.de

[toc] | [prev] | [next] | [standalone]


#4505

FromKlaus Ketelaer <noreply@spambouncer.de>
Date2019-05-28 09:24 +0200
Message-ID<qcinoc$aba$1@news.albasani.net>
In reply to#4504
Am 28.05.2019 um 02:35 schrieb Arno Welzel:
> Klaus Ketelaer:
> 
>> Am 27.05.2019 um 12:22 schrieb Willi Marquart:
>>> Klaus Ketelaer schrieb:
>>>
>>>>
>>>> Die Maske 134.119.0.0/20 soll den IP-Bereich
>>>>
>>>>     134.119.0.1 bis 134.119.15.254
> [...]
>> Nicht dass die Umsetzung schwer wäre, aber ganz so banal
>> ist es doch nicht, denn eine IP-Adresse besteht nunmal
>> nicht aus Nullen und Einsen. Ein wenig mehr Arbeit ist
>> das schon. Für meine Bedürfnisse sind es dann über 200
>> Zeilen Code geworden.
> 
> Ähm...?
> 
> Also für einen Adressbereich die Netzwerkmaske zu berechnen sind
> wirklich nur zwei oder drei Befehle. Deine 200 Zeilen Code haben
> definitiv nicht nur Netzwerkmasken berechnet.

Dann wird es wohl doch etwas Fertiges geben...

Gruß Klaus

[toc] | [prev] | [next] | [standalone]


#4507

FromArno Welzel <usenet@arnowelzel.de>
Date2019-05-28 12:05 +0200
Message-ID<gl4ffbFc35nU1@mid.individual.net>
In reply to#4505
Klaus Ketelaer:

> Am 28.05.2019 um 02:35 schrieb Arno Welzel:
>> Klaus Ketelaer:
>>
>>> Am 27.05.2019 um 12:22 schrieb Willi Marquart:
>>>> Klaus Ketelaer schrieb:
>>>>
>>>>>
>>>>> Die Maske 134.119.0.0/20 soll den IP-Bereich
>>>>>
>>>>>     134.119.0.1 bis 134.119.15.254
>> [...]
>>> Nicht dass die Umsetzung schwer wäre, aber ganz so banal
>>> ist es doch nicht, denn eine IP-Adresse besteht nunmal
>>> nicht aus Nullen und Einsen. Ein wenig mehr Arbeit ist
>>> das schon. Für meine Bedürfnisse sind es dann über 200
>>> Zeilen Code geworden.
>>
>> Ähm...?
>>
>> Also für einen Adressbereich die Netzwerkmaske zu berechnen sind
>> wirklich nur zwei oder drei Befehle. Deine 200 Zeilen Code haben
>> definitiv nicht nur Netzwerkmasken berechnet.
> 
> Dann wird es wohl doch etwas Fertiges geben...

Nein, ich meinte auch mit eigenem Code sollte das mit ein paar Zeilen zu
machen sein. Selbst wenn man die Adressen erst in binäre Darstellung
umbaut und dann "zu Fuß" die einzelnen Bits vergleicht, komme ich nicht
auf 200 Zeilen Code.

Deshalb hatte ich die Vermutung, dass Du meintest damit nicht nur die
Ermittelung der Netzwerkmaske für eine gegebene Anfangs- und Endadresse
eines IPv4-Subnetzes.

Ein Beispiel auf die Schnelle - in Aktion zu sehen auf
<https://arnowelzel.de/samples/ipv4mask.php>:

<?php
$address1 = '134.119.0.1';
$address2 = '134.119.15.254';

$address1Binary = substr(
    '00000000000000000000000000000000' . decbin(ip2long($address1)),
    -32);
$address2Binary = substr(
    '00000000000000000000000000000000' . decbin(ip2long($address2)),
    -32);

$mask = 32;
while (true) {
    if (substr($address1Binary, 32-$mask, 1) !=
        substr($address2Binary, 32-$mask, 1)) {
        break;
    }
    $mask--;
    if ($mask == 0) {
        break;
    }
}

$network = long2ip((int)bindec(
    substr(substr($address1Binary, 0, $mask) .
    '00000000000000000000000000000000', 0, 32)));

echo sprintf(
    'Address range: %s - %s, network: %s/%d',
    $address1, $address2, $network, $mask);
?>


-- 
Arno Welzel
https://arnowelzel.de

[toc] | [prev] | [next] | [standalone]


#4509

FromKlaus Ketelaer <noreply@spambouncer.de>
Date2019-05-30 09:05 +0200
Message-ID<qcnvbj$hi7$1@news.albasani.net>
In reply to#4507
Am 28.05.2019 um 12:05 schrieb Arno Welzel:
> Klaus Ketelaer:
> 
>> Am 28.05.2019 um 02:35 schrieb Arno Welzel:
>>> Klaus Ketelaer:
>>>
>>>> Am 27.05.2019 um 12:22 schrieb Willi Marquart:
>>>>> Klaus Ketelaer schrieb:
>>>>>
>>>>>>
>>>>>> Die Maske 134.119.0.0/20 soll den IP-Bereich
>>>>>>
>>>>>>      134.119.0.1 bis 134.119.15.254
>>> [...]
>>>> Nicht dass die Umsetzung schwer wäre, aber ganz so banal
>>>> ist es doch nicht, denn eine IP-Adresse besteht nunmal
>>>> nicht aus Nullen und Einsen. Ein wenig mehr Arbeit ist
>>>> das schon. Für meine Bedürfnisse sind es dann über 200
>>>> Zeilen Code geworden.
>>>
>>> Ähm...?
>>>
>>> Also für einen Adressbereich die Netzwerkmaske zu berechnen sind
>>> wirklich nur zwei oder drei Befehle. Deine 200 Zeilen Code haben
>>> definitiv nicht nur Netzwerkmasken berechnet.
>>
>> Dann wird es wohl doch etwas Fertiges geben...
> 
> Nein, ich meinte auch mit eigenem Code sollte das mit ein paar Zeilen zu
> machen sein. Selbst wenn man die Adressen erst in binäre Darstellung
> umbaut und dann "zu Fuß" die einzelnen Bits vergleicht, komme ich nicht
> auf 200 Zeilen Code.
> 
> Deshalb hatte ich die Vermutung, dass Du meintest damit nicht nur die
> Ermittelung der Netzwerkmaske für eine gegebene Anfangs- und Endadresse
> eines IPv4-Subnetzes.
> 
> Ein Beispiel auf die Schnelle - in Aktion zu sehen auf
> <https://arnowelzel.de/samples/ipv4mask.php>:
> 
> <?php
> $address1 = '134.119.0.1';
> $address2 = '134.119.15.254';
> 
> $address1Binary = substr(
>      '00000000000000000000000000000000' . decbin(ip2long($address1)),
>      -32);
> $address2Binary = substr(
>      '00000000000000000000000000000000' . decbin(ip2long($address2)),
>      -32);
> 
> $mask = 32;
> while (true) {
>      if (substr($address1Binary, 32-$mask, 1) !=
>          substr($address2Binary, 32-$mask, 1)) {
>          break;
>      }
>      $mask--;
>      if ($mask == 0) {
>          break;
>      }
> }
> 
> $network = long2ip((int)bindec(
>      substr(substr($address1Binary, 0, $mask) .
>      '00000000000000000000000000000000', 0, 32)));
> 
> echo sprintf(
>      'Address range: %s - %s, network: %s/%d',
>      $address1, $address2, $network, $mask);
> ?>
> 
> 

Also, erst einmal schrieb ich "für meine Bedürfnisse".

Ich möchte unter anderem sowas nachbilden:
https://www.adminsub.net/ipv4-subnet-calculator/134.119.176.0/20

Ich brauche diese Funktionalität in PHP, MySql und Visual Basic.

Weil ich ganz vergessen hatte, dass man sich im Usenet an allem fest
beißt, habe ich die Information unterschlagen, dass ich die Funktionen
zuerst in VB umgesetzt habe, weil ich sie danach leichter nach MySql
portieren kann.

Dann habe ich die gesamte Klasse mal kurz in das Notepad++ kopiert,
und auf die Anzahl der Zeilen gesehen. Da waren es dann knapp 200
Zeilen. (incl. Leerzeilen)

Bevor es nun wieder los geht, hier der Code zum selber zählen;-)

Option Explicit

Public Function GetNetworkMask(ByVal szIPFrom As String, ByVal szIPTo As 
String) As String
   Dim szMask          As String
   Dim iBytes          As Integer
   Dim i               As Integer

   szIPFrom = IPToBin(szIPFrom)
   szIPTo = IPToBin(szIPTo)

   iBytes = 32
   For i = 9 To 32
     If Left$(szIPFrom, i) = Left$(szIPTo, i) Then
       iBytes = i
     Else
       Exit For
     End If
   Next i

   szMask = BinToIP(Left$(szIPFrom, iBytes)) & "/" & iBytes

   GetNetworkMask = szMask
End Function

' 
====================================================================================================

Public Function IPToBin(ByVal szIP As String) As String
   Dim szArr()         As String
   Dim szBinär         As String
   Dim bByte           As Byte
   Dim i               As Integer

   On Error GoTo Fehler
     szArr = Split(szIP, ".")
     If UBound(szArr) <> 3 Then GoTo Fehler

     For i = 0 To 3
       bByte = Val(szArr(i))
       szBinär = szBinär & ByteToBin(bByte)
     Next i
     Debug.Assert Len(szBinär) = 32
   On Error GoTo 0

   IPToBin = szBinär
Exit Function

Fehler:
   IPToBin = ""
End Function

Public Function IPToLong(ByVal szIP As String) As Currency
   Dim szArr()         As String
   Dim cValue          As Currency
   Dim n               As Long

   If szIP > "" Then
     n = InStr(szIP, ":")
     If n > 0 Then szIP = Left$(szIP, n - 1)

     szArr = Split(szIP, ".")

     cValue = CLng(szArr(0)) * &H1000000
     cValue = cValue + CLng(szArr(1)) * &H10000
     cValue = cValue + CLng(szArr(2)) * &H100
     cValue = cValue + CLng(szArr(3))
   End If

   IPToLong = cValue
End Function

' 
====================================================================================================

Public Function BinToIP(ByVal szBinär As String) As String
   Dim szIP            As String
   Dim iByte           As Byte
   Dim i               As Integer

   szBinär = szBinär & String$(35, "0")

   If Mid$(szBinär, 9, 1) <> "0" And Mid$(szBinär, 9, 1) <> "1" Then
     szBinär = Replace$(szBinär, Mid$(szBinär, 9, 1), "")
   End If

   For i = 0 To 3
     iByte = i * 8 + 1
     szIP = szIP & BinToByte(Mid$(szBinär, iByte, 8)) & "."
   Next i

   BinToIP = Left$(szIP, Len(szIP) - 1)
End Function

Public Function LongToIP(ByVal cValue As Currency) As String
   Dim iByte1        As Integer
   Dim iByte2        As Integer
   Dim iByte3        As Integer
   Dim iByte4        As Integer

   iByte1 = Fix(cValue / &H1000000)
   cValue = cValue - (iByte1 * &H1000000)

   iByte2 = Fix(cValue / &H10000)
   cValue = cValue - (iByte2 * &H10000)

   iByte3 = Fix(cValue / &H100)
   iByte4 = cValue - (iByte3 * &H100)

   LongToIP = iByte1 & "." & iByte2 & "." & iByte3 & "." & iByte4
End Function

' 
====================================================================================================

Public Function ByteToBin(ByVal bValue As Byte) As String
   Dim bBit            As Byte
   Dim szBinär         As String

   bBit = 128
   Do
     szBinär = szBinär & IIf(bValue And bBit, "1", "0")
     bBit = bBit \ 2
   Loop Until bBit = 0
   Debug.Assert Len(szBinär) = 8

   ByteToBin = szBinär
End Function

Public Function BinToByte(ByVal szBinär As String) As Byte
   Dim bByte           As Byte
   Dim i               As Integer

   szBinär = Left$(szBinär & "00000000", 8)

   For i = 1 To 8
     If Mid$(szBinär, i, 1) = "1" Then
       bByte = bByte + 2 ^ (8 - i)
     End If
   Next i

   BinToByte = bByte
End Function

Public Function FormatBinärIP(ByVal szBinär As String, Optional ByVal 
szSeparator As String = " ", Optional ByVal szFiller As String = "") As 
String

   If szFiller = "" Then szFiller = " "

   szBinär = szBinär & String$(32, szFiller)
   szBinär = Trim$(Mid$(szBinär, 1, 8) & szSeparator & _
                   Mid$(szBinär, 9, 8) & szSeparator & _
                   Mid$(szBinär, 17, 8) & szSeparator & _
                   Mid$(szBinär, 25, 8))

   If szSeparator > "" Then
     Do
       If Right$(szBinär, 1) <> szSeparator Then
         Exit Do
       End If
       szBinär = Trim$(Left$(szBinär, Len(szBinär) - 1))
     Loop
   End If

   FormatBinärIP = Trim$(szBinär)
End Function

Gruß Klaus




[toc] | [prev] | [next] | [standalone]


#4510

FromStefan+Usenet@Froehlich.Priv.at (Stefan Froehlich)
Date2019-05-30 07:11 +0000
Message-ID<1t5cef81c9i78cdn3e8%sfroehli@Froehlich.Priv.at>
In reply to#4509
On Thu, 30 May 2019 09:05:22 Klaus Ketelaer wrote:
> Public Function IPToLong(ByVal szIP As String) As Currency

Im Zeiten knapper (IPv4-) Adressen wird zwar mitunter Geld dafür
verlangt, trotzdem habe ich das noch nie so direkt in Code
abgebildet gesehen :-)

Servus,
   Stefan

-- 
http://kontaktinser.at/ - die kostenlose Kontaktboerse fuer Oesterreich
Offizieller Erstbesucher(TM) von mmeike

Ein Fels in chaotischer Zeit! Stefan - Unglaublich!!
(Sloganizer)

[toc] | [prev] | [next] | [standalone]


#4517

FromArno Welzel <usenet@arnowelzel.de>
Date2019-05-30 20:10 +0200
Message-ID<glakkjFmgvuU1@mid.individual.net>
In reply to#4509
Klaus Ketelaer:

> Am 28.05.2019 um 12:05 schrieb Arno Welzel:
[...]
>> Nein, ich meinte auch mit eigenem Code sollte das mit ein paar Zeilen zu
>> machen sein. Selbst wenn man die Adressen erst in binäre Darstellung
>> umbaut und dann "zu Fuß" die einzelnen Bits vergleicht, komme ich nicht
>> auf 200 Zeilen Code.
>>
>> Deshalb hatte ich die Vermutung, dass Du meintest damit nicht nur die
>> Ermittelung der Netzwerkmaske für eine gegebene Anfangs- und Endadresse
>> eines IPv4-Subnetzes.
[...]
> Ich möchte unter anderem sowas nachbilden:
> https://www.adminsub.net/ipv4-subnet-calculator/134.119.176.0/20

Eben - das ist *nicht* nur die Berechnung einer Netzwerk-Maske für die
gegebene Anfangs und End-Adressen eines Netzwerks.

Selbst wenn es da eine fertige Funktion gäbe, musst Du den ganzen Rest
dieser Anwendung trotzdem bauen.

> Weil ich ganz vergessen hatte, dass man sich im Usenet an allem fest
> beißt, habe ich die Information unterschlagen, dass ich die Funktionen
> zuerst in VB umgesetzt habe, weil ich sie danach leichter nach MySql
> portieren kann.

Was genau soll "MySQL" als Programmiersprache sein?


-- 
Arno Welzel
https://arnowelzel.de

[toc] | [prev] | [next] | [standalone]


#4508

FromThomas 'PointedEars' Lahn <PointedEars@web.de>
Date2019-05-28 15:40 +0200
Message-ID<1859561.oMNUckLgyt@PointedEars.de>
In reply to#4503
Klaus Ketelaer wrote:

> Am 27.05.2019 um 12:22 schrieb Willi Marquart:
>> Wenn du als Parameter die Netzadresse und die Broadcastadresse
>> benutzt, also
>> 134.119.0.0 und 134.119.15.255 und die beiden als 32-Bitzahl
>> miteinander binär äquivalenz verknüpfst (auch bekannt als XNOR) dann
>> ist das Ergebnis die gesuchte Maske:

ACK, danke.
 
> Mal abgesehen davon, dass ich das am Sonntag-Vormittag
> bereits programmiert habe, wollte ich doch nur wissen,
> ob es sowas fertig gibt.
> 
>> 10000110 01110111 00000000 00000000
>> 10000110 01110111 00001111 11111110
>> -----------------------------------
>> 11111111 11111111 11110000 00000000
>> 
>> Voila, das wars.
> 
> Nicht dass die Umsetzung schwer wäre, aber ganz so banal
> ist es doch nicht, denn eine IP-Adresse besteht nunmal
> nicht aus Nullen und Einsen. Ein wenig mehr Arbeit ist
> das schon. Für meine Bedürfnisse sind es dann über 200
> Zeilen Code geworden.

Also ca. 190 zuviel:

<?php
  function ipv4_address_to_long ($ipv4_address)
  {
    $exponent = 32;
    return array_reduce(
      preg_split('/\./', $ipv4_address),
      function ($carry, $component) use (&$exponent) {
        $exponent -= 8;
        return $carry + ($component << $exponent);
      },
      0
    );
  }

  /* 16777216 */
  echo ipv4_address_to_long('1.0.0.0');

Dafür gibt es ausserdem seit Urzeiten[tm] eine PHP-Funktion:

<https://php.net/ip2long>

> Na ja, und das hätte ich mir halt sparen können, wenn es
> etwas Fertiges geben hätte.

Google^W die Suche auf php.net ist Dein Freund.  Hat mich weniger als 10 
Sekunden gekostet, die Funktion zu finden (dank Autocomplete reichte schon 
die Eingabe von “ip”).
 
> Frei nach: Es ist kein Problem, eine IP-Adresse händisch
> in eine Zahl umzurechnen, aber ip2long ist halt bequemer...

Ah, Du hast sie also auch gefunden :)

-- 
PointedEars
Zend Certified PHP Engineer <http://www.zend.com/en/yellow-pages/ZEND024953>
<https://github.com/PointedEars> | <http://PointedEars.de/wsvn>
Twitter: @PointedEars2 | Please do not cc me./Bitte keine Kopien per E-Mail.

[toc] | [prev] | [next] | [standalone]


#4511

FromKlaus Ketelaer <noreply@spambouncer.de>
Date2019-05-30 09:13 +0200
Message-ID<qcnvpv$fvu$1@news.albasani.net>
In reply to#4508
Am 28.05.2019 um 15:39 schrieb Thomas 'PointedEars' Lahn:
> Klaus Ketelaer wrote:
> 
>> Nicht dass die Umsetzung schwer wäre, aber ganz so banal
>> ist es doch nicht, denn eine IP-Adresse besteht nunmal
>> nicht aus Nullen und Einsen. Ein wenig mehr Arbeit ist
>> das schon. Für meine Bedürfnisse sind es dann über 200
>> Zeilen Code geworden.
> 
> Also ca. 190 zuviel:
> 
> <?php
>    function ipv4_address_to_long ($ipv4_address)
>    {
>      $exponent = 32;
>      return array_reduce(
>        preg_split('/\./', $ipv4_address),
>        function ($carry, $component) use (&$exponent) {
>          $exponent -= 8;
>          return $carry + ($component << $exponent);
>        },
>        0
>      );
>    }
> 
>    /* 16777216 */
>    echo ipv4_address_to_long('1.0.0.0');
> 

Mit so einem Code hättest Du in meinem Laden ein Problem. Den
dürftest Du umschreiben, frei nach "Mach es so, dass es in 2
Jahren auch noch jeder versteht".

Zudem bist Du mal wieder mit den Absendern etwas durcheinander
gekommen.


> Dafür gibt es ausserdem seit Urzeiten[tm] eine PHP-Funktion:
> 
> <https://php.net/ip2long>
> 
>> Na ja, und das hätte ich mir halt sparen können, wenn es
>> etwas Fertiges geben hätte.
> 
> Google^W die Suche auf php.net ist Dein Freund.  Hat mich weniger als 10
> Sekunden gekostet, die Funktion zu finden (dank Autocomplete reichte schon
> die Eingabe von “ip”).
>   
>> Frei nach: Es ist kein Problem, eine IP-Adresse händisch
>> in eine Zahl umzurechnen, aber ip2long ist halt bequemer...
> 
> Ah, Du hast sie also auch gefunden :)

Ja, vor Jahren...

Gruß Klaus

[toc] | [prev] | [next] | [standalone]


#4512

FromThomas 'PointedEars' Lahn <PointedEars@web.de>
Date2019-05-30 10:12 +0200
Message-ID<2482341.mvXUDI8C0e@PointedEars.de>
In reply to#4511
Klaus Ketelaer wrote:

> Am 28.05.2019 um 15:39 schrieb Thomas 'PointedEars' Lahn:
>> Klaus Ketelaer wrote:
>>> Nicht dass die Umsetzung schwer wäre, aber ganz so banal
>>> ist es doch nicht, denn eine IP-Adresse besteht nunmal
>>> nicht aus Nullen und Einsen. Ein wenig mehr Arbeit ist
>>> das schon. Für meine Bedürfnisse sind es dann über 200
>>> Zeilen Code geworden.
>> 
>> Also ca. 190 zuviel:
>> 
>> <?php
>>    function ipv4_address_to_long ($ipv4_address)
>>    {
>>      $exponent = 32;
>>      return array_reduce(
>>        preg_split('/\./', $ipv4_address),
>>        function ($carry, $component) use (&$exponent) {
>>          $exponent -= 8;
>>          return $carry + ($component << $exponent);
>>        },
>>        0
>>      );
>>    }
>> 
>>    /* 16777216 */
>>    echo ipv4_address_to_long('1.0.0.0');
>> 
> 
> Mit so einem Code hättest Du in meinem Laden ein Problem.

Das macht nichts; Dein Saftladen wird ja offensichtlich von einem 
inkompetenten Möchtegern geführt, und ich (als ZCE PHP) würde da
also weder arbeiten noch arbeiten wollen (noch müssen).

> Den dürftest Du umschreiben, frei nach "Mach es so, dass es in 2
> Jahren auch noch jeder versteht".

Nuhr.

Das ist ganz normaler, sauberer, effizienter, moderner (und als 
funktionierend getesteter) PHP-Code:

  - Funktion mit lokaler Variable zur Vermeidung von Seiteneffekten:

    <https://php.net/function>

  - Auftrennung eines Strings in ein Array mit einem regulären Ausdruck
    mit einer PCRE-Funktion (statt veraltet einer ERE-Funktion) –
    OK, hier könnte man auch einfach

       explode('.', $ipv4_address)

    verwenden;

    <https://php.net/preg_split>
    <https://php.net/explode>

  - Array-Funktion mit Callback (statt veraltet for-Schleife über ein Array)

    <https://php.net/array_reduce>

  - Closure mit Variablenreferenz.

    <https://www.php.net/manual/de/functions.anonymous.php>

Lauffähig seit PHP 5.3 (also Stand 2009; zur Erinnerung: wir sind jetzt bei 
PHP 7.0.33 oder höher).
 
> Zudem bist Du mal wieder mit den Absendern etwas durcheinander
> gekommen.

*Du* hattest behauptet, man bräuchte dafür über 200 Zeilen, oder?

>>> Frei nach: Es ist kein Problem, eine IP-Adresse händisch
>>> in eine Zahl umzurechnen, aber ip2long ist halt bequemer...
>> Ah, Du hast sie also auch gefunden :)
>
> Ja, vor Jahren...

Das merkt man.  Mach mal ein Update.

-- 
PointedEars
Zend Certified PHP Engineer <http://www.zend.com/en/yellow-pages/ZEND024953>
<https://github.com/PointedEars> | <http://PointedEars.de/wsvn>
Twitter: @PointedEars2 | Please do not cc me./Bitte
 keine Kopien per E-Mail.

[toc] | [prev] | [next] | [standalone]


#4514

FromKlaus Ketelaer <noreply@spambouncer.de>
Date2019-05-30 14:26 +0200
Message-ID<qcoi6h$u2s$1@news.albasani.net>
In reply to#4512
Am 30.05.2019 um 10:12 schrieb Thomas 'PointedEars' Lahn:
> Klaus Ketelaer wrote:
> 
>> Am 28.05.2019 um 15:39 schrieb Thomas 'PointedEars' Lahn:
>>> Klaus Ketelaer wrote:
>>>> Nicht dass die Umsetzung schwer wäre, aber ganz so banal
>>>> ist es doch nicht, denn eine IP-Adresse besteht nunmal
>>>> nicht aus Nullen und Einsen. Ein wenig mehr Arbeit ist
>>>> das schon. Für meine Bedürfnisse sind es dann über 200
>>>> Zeilen Code geworden.
>>>
>>> Also ca. 190 zuviel:
>>>
>>> <?php
>>>     function ipv4_address_to_long ($ipv4_address)
>>>     {
>>>       $exponent = 32;
>>>       return array_reduce(
>>>         preg_split('/\./', $ipv4_address),
>>>         function ($carry, $component) use (&$exponent) {
>>>           $exponent -= 8;
>>>           return $carry + ($component << $exponent);
>>>         },
>>>         0
>>>       );
>>>     }
>>>
>>>     /* 16777216 */
>>>     echo ipv4_address_to_long('1.0.0.0');
>>>
>>
>> Mit so einem Code hättest Du in meinem Laden ein Problem.
> 
> Das macht nichts; Dein Saftladen wird ja offensichtlich von einem
> inkompetenten Möchtegern geführt, und ich (als ZCE PHP) würde da
> also weder arbeiten noch arbeiten wollen (noch müssen).
> 

Bei dir frage ich mich jedes mal aufs neue, was Du wohl für einen
Job hast. Im Grunde kannst Du nur selbständig sein, denn jeder
klar denkende Arbeitgeber befördert Menschen mit deiner Sozial-
Inkompetenz in hohem Bogen aus seinem Saftladen.

Du Möchtegern ZCE PHP hast natürlich überhaupt keine Ahnung davon,
dass es da draußen noch ein richtiges Leben gibt, in dem sich nicht
alles um PHP dreht, und in dem man nicht abends mit der PHP-Bibel
ins Bett geht.

Bei mir sind Html, CSS, PHP, Perl, etc., Werkzeuge, die ich alle
Jubeljahre mal anpacke. Und weil ich nicht so ein unfehlbarer Gott
bin, wie Du, gestalte ich Code, in dem ich nicht so 100% firm bin,
nunmal so, dass ihn noch in 2 Jahren verstehe, ohne zig Bücher zum
nachschlagen zu bemühen.

Auch in dem VB-Code, den ich gepostet habe, hätte ich viele Dinge
effizienter machen können, aber bei mir steht die Lesbarkeit eines
Codes an erster Stelle. Performanceprobleme gibt es ja heute nicht
mehr...

>> Den dürftest Du umschreiben, frei nach "Mach es so, dass es in 2
>> Jahren auch noch jeder versteht".
> 
> Nuhr.

Von dem, was passiert, wenn jemand auf solchen Code stößt, habe ich
vermutlich mehr Ahnung als Du. Seit mehr als 20 Jahren reise ich
durch die Gegend und löse solche Funktionen auf. In ganz normalen
Unternehmen wird Code von ganz normalen Mitarbeitern gepflegt, und
nicht von Nerds.


> Das ist ganz normaler, sauberer, effizienter, moderner (und als
> funktionierend getesteter) PHP-Code:

Gäääähnnnn...

Ich werde am Montag mal einen Test machen. Da bin ich in einem
größeren Softwarehaus und werde die Routine mal einigen Leuten
vorlegen. Mal sehen, wer das auf Anhieb versteht...

>   
>> Zudem bist Du mal wieder mit den Absendern etwas durcheinander
>> gekommen.
> 
> *Du* hattest behauptet, man bräuchte dafür über 200 Zeilen, oder?
> 
Ach, und daraus leitest Du Genie dann ab, dass ich ip2long nicht
kenne?

Du hast ja noch nicht einmal die Ausgangsfrage verstanden, oder
warum hast Du ip2long quasi auscodiert?

>>>> Frei nach: Es ist kein Problem, eine IP-Adresse händisch
>>>> in eine Zahl umzurechnen, aber ip2long ist halt bequemer...
>>> Ah, Du hast sie also auch gefunden :)
>>
>> Ja, vor Jahren...
> 
> Das merkt man.  Mach mal ein Update.

Was verwendet man heute anstelle von ip2long?

Gruß Klaus

P.S.
Mein nächstes Update heißt: R E N T E !!

[toc] | [prev] | [next] | [standalone]


#4515

FromThomas 'PointedEars' Lahn <PointedEars@web.de>
Date2019-05-30 14:41 +0200
Message-ID<1857484.oMNUckLgyt@PointedEars.de>
In reply to#4514
Klaus Ketelaer wrote:

> Am 30.05.2019 um 10:12 schrieb Thomas 'PointedEars' Lahn:
>> Klaus Ketelaer wrote:
>>> Am 28.05.2019 um 15:39 schrieb Thomas 'PointedEars' Lahn:
>>>> <?php
>>>>     function ipv4_address_to_long ($ipv4_address)
>>>>     {
>>>>       $exponent = 32;
>>>>       return array_reduce(
>>>>         preg_split('/\./', $ipv4_address),
>>>>         function ($carry, $component) use (&$exponent) {
>>>>           $exponent -= 8;
>>>>           return $carry + ($component << $exponent);
>>>>         },
>>>>         0
>>>>       );
>>>>     }
>>>>
>>>>     /* 16777216 */
>>>>     echo ipv4_address_to_long('1.0.0.0');
>>>>
>>>
>>> Mit so einem Code hättest Du in meinem Laden ein Problem.
>> 
>> Das macht nichts; Dein Saftladen wird ja offensichtlich von einem
>> inkompetenten Möchtegern geführt, und ich (als ZCE PHP) würde da
>> also weder arbeiten noch arbeiten wollen (noch müssen).
> 
> Bei dir frage ich mich jedes mal aufs neue, was Du wohl für einen
> Job hast. Im Grunde kannst Du nur selbständig sein,

[_] Du kennst mich.

> denn jeder klar denkende Arbeitgeber

Mein Arbeitgeber wird sich sicher freuen, Deine unmassgebliche Meinung über 
ihn persönlich zu erfahren.

> befördert Menschen mit deiner Sozial-Inkompetenz in hohem Bogen aus seinem
> Saftladen.

Erwähnte ich schon „cholerisch“?  (Du spiegelst Dich gut.)

> Du Möchtegern ZCE PHP

LOL.  Siehe Signatur.

> hast natürlich überhaupt keine Ahnung davon, dass es da draußen noch ein
> richtiges Leben gibt, in dem sich nicht alles um PHP dreht, und in dem man
> nicht abends mit der PHP-Bibel ins Bett geht.

PHP ist nur eine von einem gefühlten Dutzend künstlicher Sprachen, die ich 
beherrsche.  Mein Spezialgebiet ist ECMAScript, also nix „PHP-Bibel“.  (Und 
ein Handbuch ist keine Bibel.)

Hier ist eine *PHP*-Newsgroup, Dein VB-Müll (Dein Code ist selbst für VB-
Verhältnisse noch Müll) ist hier komplett off-topic, und das richtige Leben 
spielt sich ausserhalb Deiner selbstgewählten Blase längst nicht mehr in 
Visual Basic ab.

Und getzt troll° Dich.

-- 
PointedEars
Zend Certified PHP Engineer <http://www.zend.com/en/yellow-pages/ZEND024953>
<https://github.com/PointedEars> | <http://PointedEars.de/wsvn>
Twitter: @PointedEars2 | Please do not cc me./Bitte keine Kopien per E-Mail.

[toc] | [prev] | [next] | [standalone]


#4518

FromArno Welzel <usenet@arnowelzel.de>
Date2019-05-30 20:22 +0200
Message-ID<glalbeFmmjuU1@mid.individual.net>
In reply to#4514
Klaus Ketelaer:

[...]
> Du Möchtegern ZCE PHP hast natürlich überhaupt keine Ahnung davon,

Thomas Lahn ist Zend Certified PHP Engineer, nicht "möchtegern" sondern
ganz real mit abgeschlossener Prüfung. Ich war nicht immer mit ihm einer
Meinung in der Vergangenheit - aber er ist im Bereich PHP und JavaScript
definitiv hoch kompetent.

> Bei mir sind Html, CSS, PHP, Perl, etc., Werkzeuge, die ich alle
> Jubeljahre mal anpacke. Und weil ich nicht so ein unfehlbarer Gott

Dann unterlasse es, anderen Leuten die PHP wirklich beherrschen, zu
erzählen, sie müssten ihren Code umschreiben, nur weil *Du* es nicht
verstehst.

> bin, wie Du, gestalte ich Code, in dem ich nicht so 100% firm bin,
> nunmal so, dass ihn noch in 2 Jahren verstehe, ohne zig Bücher zum
> nachschlagen zu bemühen.

Das ist dein persönliches Problem, wen Du Werkzeuge nutzt, die Du kaum
beherrschst.

> Von dem, was passiert, wenn jemand auf solchen Code stößt, habe ich
> vermutlich mehr Ahnung als Du. Seit mehr als 20 Jahren reise ich
> durch die Gegend und löse solche Funktionen auf. In ganz normalen
> Unternehmen wird Code von ganz normalen Mitarbeitern gepflegt, und
> nicht von Nerds.

Eine Technik zu beherrschen hat nichts mit "Nerd" zu tun, sondern mit
Ausbildung. Aber in der heutigen Zeit, wo Firmen praktisch Jeden
einstellen, der schon mal etwas "gecoded" hat, ist das wohl nicht mehr so.

Derzeit verdiene ich mein Geld u.A. damit, Code neu zu schreiben oder
Projekte umzubauen, die von "ganz normale Mitarbeitern" erstellt wurden,
die ihr "Wissen" aus Google und Copy&Paste haben.

[...]
> Ich werde am Montag mal einen Test machen. Da bin ich in einem
> größeren Softwarehaus und werde die Routine mal einigen Leuten
> vorlegen. Mal sehen, wer das auf Anhieb versteht...

Wenn das "Softwarehaus" den Code von Thomas nicht versteht, sind die
Leute da schlicht unfähig. "Softwarehaus" kann sich ja heutzutage auch
jeder nennen - das bedeutet gar nichts.



-- 
Arno Welzel
https://arnowelzel.de

[toc] | [prev] | [standalone]


Page 2 of 2 — ← Prev page 1 [2]

Back to top | Article view | de.comp.lang.php


csiph-web