Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > de.comp.lang.php > #4486 > unrolled thread
| Started by | Klaus Ketelaer <noreply@spambouncer.de> |
|---|---|
| First post | 2019-05-26 12:10 +0200 |
| Last post | 2019-05-30 20:22 +0200 |
| Articles | 15 on this page of 35 — 7 participants |
Back to article view | Back to de.comp.lang.php
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]
| From | Willi Marquart <usenet@neppi.net> |
|---|---|
| Date | 2019-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]
| From | Arno Welzel <usenet@arnowelzel.de> |
|---|---|
| Date | 2019-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]
| From | Klaus Ketelaer <noreply@spambouncer.de> |
|---|---|
| Date | 2019-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]
| From | Arno Welzel <usenet@arnowelzel.de> |
|---|---|
| Date | 2019-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]
| From | Klaus Ketelaer <noreply@spambouncer.de> |
|---|---|
| Date | 2019-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]
| From | Arno Welzel <usenet@arnowelzel.de> |
|---|---|
| Date | 2019-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]
| From | Klaus Ketelaer <noreply@spambouncer.de> |
|---|---|
| Date | 2019-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]
| From | Stefan+Usenet@Froehlich.Priv.at (Stefan Froehlich) |
|---|---|
| Date | 2019-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]
| From | Arno Welzel <usenet@arnowelzel.de> |
|---|---|
| Date | 2019-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]
| From | Thomas 'PointedEars' Lahn <PointedEars@web.de> |
|---|---|
| Date | 2019-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]
| From | Klaus Ketelaer <noreply@spambouncer.de> |
|---|---|
| Date | 2019-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]
| From | Thomas 'PointedEars' Lahn <PointedEars@web.de> |
|---|---|
| Date | 2019-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]
| From | Klaus Ketelaer <noreply@spambouncer.de> |
|---|---|
| Date | 2019-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]
| From | Thomas 'PointedEars' Lahn <PointedEars@web.de> |
|---|---|
| Date | 2019-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]
| From | Arno Welzel <usenet@arnowelzel.de> |
|---|---|
| Date | 2019-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