如何在Perl中給定IP地址和子網掩碼的情況下創建有效的IP範圍?我理解生成IP範圍的概念,但需要幫助用Perl編寫。例如,如果我與IP地址和子網掩碼相同,我會得到子網號碼。給這個數字加1應該給我第一個有效的IP。如果我將子網掩碼和子網號碼反轉,我應該得到廣播地址。從它減去1應該給最後一個有效的IP地址。如何在Perl中給定IP地址和子網掩碼來創建有效的IP範圍?
3
A
回答
3
見perldoc perlop有關位運算符的信息(它們是相同的,因爲在大多數其他類似C語言):
&
是位與|
是位或^
是按位XOR>>
是右移<<
是左實英尺
但是,如果你真的想做一些網絡塊和IP地址的工作(而不是簡單地回答家庭作業 - 儘管我很好奇你會用Perl做什麼課程),但是,你能避免轉向CPAN重新發明輪子:
0
3
如果你想與位運算符自己玩,就變成這樣:
#!/usr/bin/perl
use strict;
use warnings;
use Socket;
my $ip_address = '192.168.0.15';
my $netmask = 28;
my $ip_address_binary = inet_aton($ip_address);
my $netmask_binary = ~pack("N", (2**(32-$netmask))-1);
my $network_address = inet_ntoa($ip_address_binary & $netmask_binary);
my $first_valid = inet_ntoa(pack('N', unpack('N', $ip_address_binary & $netmask_binary) + 1));
my $last_valid = inet_ntoa(pack('N', unpack('N', $ip_address_binary | ~$netmask_binary) - 1));
my $broadcast_address = inet_ntoa($ip_address_binary | ~$netmask_binary);
print $network_address, "\n";
print $first_valid, "\n";
print $last_valid, "\n";
print $broadcast_address, "\n";
exit;
配網::子網掩碼它更容易理解:
#!/usr/bin/perl
use strict;
use warnings;
use Net::Netmask;
my $ip_address = '192.168.0.15';
my $netmask = 28;
my $block = Net::Netmask->new("$ip_address/$netmask");
my $network_address = $block->base();
my $first_valid = $block->nth(1);
my $last_valid = $block->nth($block->size - 2);
my $broadcast_address = $block->broadcast();
print $network_address, "\n";
print $first_valid, "\n";
print $last_valid, "\n";
print $broadcast_address, "\n";
exit;
0
下面的代碼片段可以幫助你找到rhel7上的ip地址和子網掩碼
my $ip=`hostname -i`;
my $subnet = `ip addr show|grep -i ".*${ip}/.*"|tail -1|cut -d "/" -f2|cut -d " " -f1`;
相關問題
- 1. 來自IP地址/網絡掩碼使用VBScript的IP範圍電纜因子
- 2. 如何計算IP地址和網絡掩碼時的IP範圍?
- 3. 帶子網掩碼的IP地址範圍
- 4. 從IP範圍計算子網掩碼
- 5. 如何創建IP地址範圍
- 6. 計算來自2個給定IP地址的IP範圍數
- 7. 如何獲得給定開始和結束IP地址的IP地址範圍?
- 8. 在perl中迭代IP地址範圍
- 9. Perl:獲取不在給定列表中的IP地址範圍
- 10. 給定一個子網範圍和IP地址的列表中選擇該IP地址落在
- 11. 如何用Perl解析IP地址和地址範圍?
- 12. 如何根據給定的子網掩碼來判斷哪個IP有效
- 13. 給定一個IP地址和子網掩碼,如何計算CIDR?
- 14. 如何在Java中爲IP地址生成子網掩碼?
- 15. 導出網絡掩碼給定起始和結束IP地址
- 16. 函數返回的IP地址列表對於給定的IP地址和子網掩碼
- 17. 如何在swift中獲取本地和子網掩碼的ip地址
- 18. 如何從IP地址列表中查找IP地址範圍
- 19. 變換IP地址,IP地址範圍(起始IP - 結束IP)
- 20. 有效的方法來映射我的IP地址與java中的子網和子網掩碼
- 21. 從IP地址和子網掩碼獲取網絡ID
- 22. 從IP地址獲得子網掩碼和網關
- 23. 如何快速找到IP地址範圍內的IP地址?
- 24. java掩碼ip地址
- 25. 在文件中查找帶子網掩碼的IP地址
- 26. 從C中的IP地址和子網掩碼計算子網號碼
- 27. 驗證IP地址/網絡掩碼
- 28. 如何計算在C中的IP地址和子網掩碼的AND操作?
- 29. 轉換IP範圍的IP地址
- 30. 如何知道從子網掩碼搜索哪些IP地址?
你只是要求Perl的按位操作,還是一個例子? – Baxter 2009-11-15 20:00:00
我正在尋找一個例子(我認爲Perl的按位操作將用於創建示例) – user211491 2009-11-15 20:04:09