Lấy một ví dụ về subnet mask 255 này. 255. 255. 240 mà biểu diễn CIDR là 28. Đây là các phương thức để chuyển đổi sang biểu diễn CIDR mà không cần sử dụng bất kỳ mô-đun nào
- Chia mặt nạ mạng theo dấu chấm, sao cho mỗi octet nằm trong danh sách
- Đối với mỗi mục trong danh sách, sử dụng hàm bin để lấy biểu diễn nhị phân của từng octet, nhớ gõ chuyển từng octet từ chuỗi sang int[], bin[] chỉ có thể chấp nhận đối tượng int[]
- Sau đó dùng hàm str[] để chuyển đổi đối tượng bin để sử dụng phương thức đếm, phương thức đếm dùng để đếm số “1” trong hệ nhị phân
- Sau đó tính tổng số “1” trong danh sách
netmask = "255.255.255.240" list_mask = netmask.split["."]
Kết quả sau khi chia như thế này. [‘255’, ‘255’, ‘255’, ‘240’]
processing = list[] for octet in lst_mask: processing.append[str[bin[int[octet]]].count["1"]]
Kết quả xử lý đối tượng là. [8, 8, 8, 4]
Sau đó tổng hợp các số nguyên trong danh sách
sum[processing]
Kết quả là 28
Toàn bộ mã có thể được đơn giản hóa với khả năng hiểu danh sách như thế này
sum[[str[bin[int[octet]]].count["1"] for octet in netmask.split["."]]]
Quảng cáo
Chia sẻ cái này
- Ứng dụng trò chuyện
Như thế này
Thích Đang tải.
Có liên quan
Thông thường, việc thiết lập giao diện mạng TCP/IP ethernet bao gồm địa chỉ IP, mặt nạ mạng và địa chỉ quảng bá. Thật không may cho bạn là người mới, hai công cụ ifconfig và ip hiển thị thông tin giống nhau [hoặc tương tự] ở một định dạng khác
$ /sbin/ifconfig
eth0 Link encap. Ethernet HWaddr 00. d0. c9. a5. 99. f4
inet addr. 146. 112. 129. 3 Bcast. 146. 112. 159. Mặt nạ 255. 255. 255. 224. 0
inet6 địa chỉ. fe80. 2d0. c9ff. kỳ tích5. Phạm vi 99f4/64. Liên kết
UP CHẠY PHÁT TRUYỀN ĐA MTU MTU. 1500 số liệu. 1
Gói RX. lỗi 14706157. 0 giảm. 0 vượt. 0 khung. 0
gói TX. 11728631 lỗi. 0 giảm. 0 vượt. 0 nhà mạng. 0
va chạm. 0 txqueuen. 100
byte RX. 3127295322 [2. 9 GiB] byte TX. 984587855 [938. 9 MiB]
Bộ nhớ. fd8e0000-fd900000
lo Link encap. Vòng lặp cục bộ
inet addr. 127. 0. 0. 1 mặt nạ. 255. 0. 0. 0
inet6 địa chỉ. . 1/128 Phạm vi. Máy chủ
MTU CHẠY LOOPBACK LÊN. 16436 Số liệu. 1
Gói RX. 890946 lỗi. 0 giảm. 0 vượt. 0 khung. 0
gói TX. 890946 lỗi. 0 giảm. 0 vượt. 0 nhà mạng. 0
va chạm. 0 txqueuen. 0
byte RX. 433573498 [413. 4 MiB] byte TX. 433573498 [413. 4 MiB]
$ /sbin/ip addr
1. lo. mtu 16436 trạng thái qdisc noqueue CHƯA BIẾT
link/loopback 00. 00. 00. 00. 00. 00 tỷ 00. 00. 00. 00. 00. 00
inet 127. 0. 0. Máy chủ phạm vi 1/8 lo
inet6. 1/128 máy chủ phạm vi
valid_lft foreverreferred_lft forever
2. eth0. trạng thái mtu 1500 qdisc pfifo_fast LÊN qlen 100
link/ether 00. d0. c9. a5. 99. f4 brd ff. ff. ff. ff. ff. ff
inet 146. 112. 129. 3/19 b 146. 112. 159. 255 phạm vi toàn cầu eth0
inet6 fe80. 2d0. c9ff. kỳ tích5. Liên kết phạm vi 99f4/64
valid_lft foreverreferred_lft forever
3. eth1. mtu 1500 qdisc trạng thái noop XUỐNG qlen 1000
link/ether 00. d0. c9. a5. 99. f5 brd ff. ff. ff. ff. ff. v
Nếu phần mềm của bạn mong đợi một ký hiệu chấm, nhưng tất cả những gì bạn nhận được từ nguồn bạn phân tích là số CIDR ngắn, hãy chuyển đổi nó. Nhưng bằng cách nào?
Một số mã Python để làm bạn hài lòng
Đừng ngạc nhiên, tôi không tìm thấy đoạn mã nhỏ và dễ nắm bắt nào trên Internet, có lẽ bạn cũng vậy. Điều đó hơi lạ, đặc biệt là vì cuối cùng, một giải pháp đơn giản không khó thực hiện. Đây là cách tiếp cận của tôi bằng Python
# CIDR to Netmask conversion # [c] 2010 Peter Bittner, //linux.bittner.it/blog # # Tip for an excellent background read: "IP subnetting made easy" # //articles.techrepublic.com.com/5100-10878_11-6089187.html def len2mask[len]: """Convert a bit length to a dotted netmask [aka. CIDR to netmask]""" mask = '' if not isinstance[len, int] or len < 0 or len > 32: print "Illegal subnet length: %s [which is a %s]" % [str[len], type[len].__name__] return None for t in range[4]: if len > 7: mask += '255.' else: dec = 255 - [2**[8 - len] - 1] mask += str[dec] + '.' len -= 8 if len < 0: len = 0 return mask[:-1] # Example for len in range[32,-1,-1]: print '/%d = %s' % [len, len2mask[len]]Ý tưởng chính là. Mặt nạ mạng nhị phân chứa tất cả các bit 1 ở bên trái và tất cả các bit 0 ở bên phải - không trộn lẫn - và số CIDR đếm các bit 1 đó. Vì vậy, từ trái sang phải,.
- Miễn là chúng ta có thể trừ 8 bit, chúng ta có một byte đầy những bit, tương ứng với '255' ở dạng thập phân. Dấu chấm [dừng hoàn toàn]
- Ngay sau khi chúng tôi chạm 0, tất cả các phần khác ở định dạng chấm sẽ là '0'
- Phần khó xảy ra khi mặt nạ mạng CIDR không phải là bội số của 8, khi đó chúng ta phải tính lũy thừa của phần còn lại [= số CIDR modulo 8] với cơ số 2 - NHƯNG. các bit 1 trong chuỗi nhị phân ở phía sai ở đây, hãy cẩn thận. Đó là cách chúng tôi đến. 255 - [2^[8 - dư] - 1]
Tất nhiên, bạn có thể triển khai thuật toán đơn giản này bằng bất kỳ ngôn ngữ nào khác mà bạn thích. Tất cả một mình, tự nhiên
Lưu ý bên lề
Lưu ý trong đầu ra mẫu ở trên của ifconfig và ip rằng ip liệt kê một giao diện mạng bổ sung so với ifconfig. Cả hai lệnh đã được thực thi trên một và cùng một máy, trực tiếp lần lượt.
Lý do cho điều này có thể là một trong những lý do khiến bạn có thể bắt đầu coi ip là công cụ thay vì ipconfig cho một số tác vụ, như tôi đã làm. ip cũng liệt kê các giao diện không hoạt động hoặc không được định cấu hình. Ví dụ, với liên kết ip -o, bạn có thể lấy địa chỉ MAC của tất cả các giao diện có sẵn [ở định dạng một dòng thuận tiện cho việc xử lý hậu kỳ], bất kể chúng đã được cấu hình hay chưa