Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python
- # -*- coding: utf-8 -*-
- from flask import Flask, request, jsonify
- import logging.config
- import struct
- import socket
- logging.basicConfig(level=logging.DEBUG)
- logger = logging.getLogger(__name__)
- app = Flask(__name__)
- def ip2int(addr):
- return struct.unpack("!I", socket.inet_aton(addr))[0]
- def int2ip(addr):
- return socket.inet_ntoa(struct.pack("!I", addr))
- @app.route('/cidr_range/<string:addr>/<int:mask>', methods=['GET'])
- def get_range(addr, mask):
- if request.method == 'GET':
- addr = addr.split('_')
- if len(addr) != 4:
- return jsonify({'error': 'Invalid cidr'})
- for i in addr:
- if int(i) > 255:
- return jsonify({'error': 'Invalid cidr'})
- addr = '.'.join(addr)
- first = ip2int(addr) & (-1 << 32 - mask)
- last = first + pow(2, 32 - mask) - 1
- return jsonify({'first_ip': int2ip(first+1), 'last_ip': int2ip(last)})
- @app.route('/cidr/ip/<string:addr_1>/in_range/<string:addr_2>/<int:mask>', methods=['GET'])
- def check_in_range(addr_1, addr_2, mask):
- if request.method == 'GET':
- addr_1 = addr_1.split('_')
- addr_2 = addr_2.split('_')
- if len(addr_1) != 4 or len(addr_2) != 4:
- return jsonify({'error': 'Invalid cidr'})
- for i in addr_1:
- if int(i) > 255:
- return jsonify({'error': 'Invalid cidr'})
- for i in addr_2:
- if int(i) > 255:
- return jsonify({'error': 'Invalid cidr'})
- addr_1 = '.'.join(addr_1)
- addr_2 = '.'.join(addr_2)
- first = ip2int(addr_2) & (-1 << 32 - mask)
- last = first + pow(2, 32 - mask) - 1
- if ip2int(addr_1) > first and ip2int(addr_1) < last:
- return jsonify({'result': 'True'})
- else:
- return jsonify({'result': 'False'})
- if __name__ == "__main__":
- app.run(port=5000)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement