Qual è il modo più semplice di aggiungerne uno a una stringa binaria in Perl?

StackOverflow https://stackoverflow.com/questions/222043

  •  03-07-2019
  •  | 
  •  

Domanda

Ho una variabile che contiene un indirizzo IPv4 di 4 byte, nell'ordine di rete (questo è stato creato usando il pacchetto e la rappresentazione intera). Ho un'altra variabile, anche una sottorete di ordine di rete a 4 byte. Sto cercando di aggiungerli insieme e aggiungerne uno per ottenere il primo IP nella sottorete.

Per ottenere la rappresentazione ASCII, posso fare inet_ntoa ($ ip & amp; $ netmask) per ottenere l'indirizzo di base, ma è un errore fare inet_ntoa (((($ ip & amp; $ netmask) +1) ; ricevo un messaggio del tipo:

 Argument "\n\r&\0" isn't numeric in addition (+) at test.pm line 95.

Quindi quello che sta succedendo, il meglio che posso dire, è guardare i 4 byte e vedere che i 4 byte non rappresentano una stringa numerica e quindi rifiutarsi di aggiungere 1.

Un altro modo per dirlo: quello che voglio che faccia è aggiungere 1 al byte meno significativo, che so che è il 4 ° byte? Cioè, voglio prendere la stringa \ n \ r & amp; \ 0 e finire con la stringa \ n \ r & amp; \ 1 . Qual è il modo più semplice per farlo?

Esiste un modo per farlo senza dover decomprimere e reimballare la variabile?

È stato utile?

Soluzione

Quello che sta succedendo è che si crea una stringa di byte con $ ip & amp; $ netmask , quindi si prova a trattarla come un numero. Questo non funzionerà, come tale. Quello che devi alimentare in inet_ntoa è.

pack("N", unpack("N", $ip&$netmask) + 1)

Non penso che ci sia un modo più semplice per farlo.

Altri suggerimenti

Numeri e stringhe confuse. Forse il seguente codice sarà di aiuto:

use Socket;

$ip = pack("C4", 192,168,250,66); # why not inet_aton("192.168.250.66")
$netmask = pack("C4", 255,255,255,0);

$ipi = unpack("N", $ip);
$netmaski = unpack("N", $netmask);

$ip1 = pack("N", ($ipi&$netmaski)+1);
print inet_ntoa($ip1), "\n";

Quali output:

192.168.250.1
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top