Hi Kipp, I'd say don't bother pack()ing. At the moment, I think the function pretty much s**ks. use eval() instead. The following doesn't have that one-liner compactness of the others, but it shows you what is going on. The bitwise & does a real cute little trick with its operands, evaluating them in hex context or digit-by-digit (I can't tell which, and the two may be functionally indistinguishable.) Therefore I got results like 192 & 255 = 010 [the nine and five match on the 0 bit, no other digits match any bits with their corresponding digit in the other number.
That doesn't quite get us there. Here is my approach: #!/usr/bin/perl my ($IP_String, $MaskString) = split(/ +/, $ARGV[0]); @IP_Address = ExtractBytes($IP_String); @Mask = ExtractBytes($MaskString); @NetworkAddress = AND_MaskArray(4, \@IP_Address, \@Mask, $ARGV); print "$NetworkAddress[0]\.$NetworkAddress[1]\.$NetworkAddress[2]\.$NetworkAddress[3]"; sub ExtractBytes { my $DottedString = $_[0]; @AddressBytes = split (/\./, $DottedString); return @AddressBytes; } sub AND_MaskArray { $limit = $_[0]; my @result; for (my $i = 0; $i < $limit; $i++) { $Temp = eval($IP_Address[$i]) & eval($Mask[$i]); $result[$i] = $Temp; } return @result; } And will handle any kind of and-masking. I had it set up to do or-ing, too, then dumped that part when I could concieve of no useful purpose for or-ing IPs. This will also extract a classless IP subnet, or a host mask if the parameters are reversed. E:\d_drive\perlStuff>andips.pl "192.168.0.102 255.255.0.0" 192.168.0.0 E:\d_drive\perlStuff>andips.pl "221.215.156.68 255.255.255.128" 221.215.156.0 E:\d_drive\perlStuff>andips.pl "221.215.156.168 255.255.255.128" 221.215.156.128 E:\d_drive\perlStuff>andips.pl "221.215.156.168 0.0.0.127" Joseph "Kipp, James" wrote: > Happy Hollidays > > I want to bitwize AND 2 IP adr strings, not sure of how to pack() them to be > able to AND them. before i start playing with pack,sprintf,socket,etc.. I > was wondering if someone already had a way. > > Thanks > > > > -- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]