2024-04-10 15:45:09 +08:00
import socket
import struct
from flask import request , jsonify , Flask
import json
app = Flask ( __name__ )
2024-04-28 16:34:09 +08:00
import socket
import struct
def convert_ipv4_to_int ( ip_str ) :
binary_ip = socket . inet_aton ( ip_str )
# 使用 struct.unpack 解包二进制数据到一个大端整数
ip_int = struct . unpack ( ' !I ' , binary_ip ) [ 0 ]
return ip_int
2024-04-10 15:45:09 +08:00
def convert_ipv4_address ( ip_int ) :
return socket . inet_ntoa ( struct . pack ( ' !I ' , ip_int ) )
def parse_and_convert_ip ( data_part ) :
parts = data_part . split ( ' - ' )
src_ip = convert_ipv4_address ( int ( parts [ 0 ] ) )
dst_ip = convert_ipv4_address ( int ( parts [ 1 ] ) )
src_port = int ( parts [ 2 ] )
dst_port = int ( parts [ 3 ] )
protocol = int ( parts [ 4 ] )
return src_ip , dst_ip , src_port , dst_port , protocol
def send_test_data ( host , port , data ) :
with socket . socket ( socket . AF_INET , socket . SOCK_STREAM ) as s :
s . connect ( ( host , port ) )
s . sendall ( data . encode ( ) )
def format_data_to_json ( test_data ) :
data_parts = test_data . split ( " , " )
src_ip_v4 , dst_ip_v4 , src_port_v4 , dst_port_v4 , protocol_v4 = parse_and_convert_ip ( data_parts [ 1 ] )
2024-04-28 16:34:09 +08:00
2024-04-10 15:45:09 +08:00
formatted_data = {
" task_id " : 30650 ,
" rule_id " : 39 ,
" five_tuple_with_mask " : {
" src_ip " : src_ip_v4 ,
" dst_ip " : dst_ip_v4 ,
" src_port " : src_port_v4 ,
" dst_port " : dst_port_v4 ,
" protocol " : protocol_v4 ,
" mask_src_ip " : data_parts [ 5 ] ,
" mask_dst_ip " : data_parts [ 6 ] ,
" mask_src_port " : int ( data_parts [ 7 ] ) ,
" mask_dst_ip " : int ( data_parts [ 8 ] ) ,
" mask_protocol " : int ( data_parts [ 9 ] )
} ,
" content " : test_data # Keeping the original content in the 'content' field
}
return formatted_data
# if __name__ == "__main__":
# HOST = '127.0.0.1'
# PORT = 65432
# send_test_data(HOST, PORT, test_data)
#
# test_data="1702017420-1-175833107,1921297587-310737541-53420-6379-6-127-0,140717936336976-140717936336992-0-0-0-131-4481,0,000,440000,1,7,107,1,111,Amazon Data Services UK,0,0,440100,0,0,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,,9,10060101189,tcp.banner=$5115,39,0"
# test_data_2= "log_info,stream_v4,stream_v6,tunnel_v4,s_boundary,s_region,d_boundary,d_region,s_operators,s_owner,d_operators,d_owner,priority,flowid,s_city,s_district,d_city,d_district,msisdn,imsi,meid,uli,bsid,apn,event_id,return_info,file_type,file_name,file,url,cookie"
# print(len(test_data.split(",")), len(test_data_2.split(",")))
# print(test_data.split(",")[-7])
# print(test_data_2.split(",")[-7])
# print(test_data_2.split(",")[24])
#
# # formatted_json = format_data_to_json(test_data)
# # print(formatted_json)
# #
# # send_test_data(HOST, PORT, formatted_json)
# send_test_data(HOST, PORT, test_data)
#
# @app.route('/api/v1/kafkasend', methods=['POST'])
# def kafka_send():
# if request.method == 'POST' and request.is_json:
# data = request.json
# task_id = data.get('task_id', '')
# rule_id = data.get('rule_id', '')
#
# test_data = "1702017420-1-175833107,1921297587-310737541-53420-6379-6-127-0,140717936336976-140717936336992-0-0-0-131-4481,0,000,440000,1,7,107,1,111,Amazon Data Services UK,0,0,440100,0,0,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,,9,10060101189,tcp.banner=$5115,39,0"
#
# modified_data = f"{test_data}, {task_id}, {rule_id},{0}"
# HOST = '127.0.0.1'
# PORT = 65432
#
# send_test_data(HOST, PORT, modified_data)
# return jsonify({'message': 'Data processed successfully'}), 200
#
#
# return jsonify({'error': 'Invalid request'}), 400
@app.route ( ' /api/v1/kafkasend ' , methods = [ ' POST ' ] )
def kafka_send ( ) :
if request . method == ' POST ' and request . is_json :
data = request . get_json ( )
2024-04-28 16:34:09 +08:00
base_data = " 1702017420-1-175833107,2682412653-760391609-53420-6379-6-127-0,140717936336976-140717936336992-0-0-0-131-4481,0,000,440000,1,7,107,1,111,Amazon Data Services UK,0,0,440100,0,0,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,,9,10060101189,tcp.banner=$5115 "
base_data2 = " 1702017420-1-175833107,760391609-2682412653-53420-6379-6-127-0,140717936336976-140717936336992-0-0-0-131-4481,0,000,440000,1,7,107,1,111,Amazon Data Services UK,0,0,440100,0,0,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,,9,10060101189,tcp.banner=$5115 "
2024-04-10 15:45:09 +08:00
for item in data :
task_id = item . get ( ' task_id ' , ' ' )
rule_id = item . get ( ' rule_id ' , ' ' )
modified_data = f " { base_data } , { task_id } , { rule_id } , { 0 } "
2024-04-28 16:34:09 +08:00
modified_data2 = f " { base_data2 } , { task_id } , { rule_id } , { 0 } "
2024-04-10 15:45:09 +08:00
HOST = ' 127.0.0.1 '
PORT = 65432
2024-04-28 16:34:09 +08:00
print ( modified_data )
2024-04-10 15:45:09 +08:00
send_test_data ( HOST , PORT , modified_data )
2024-04-28 16:34:09 +08:00
send_test_data ( HOST , PORT , modified_data2 )
2024-04-10 15:45:09 +08:00
2024-04-28 16:34:09 +08:00
return jsonify ( { " success " : True , " code " : 200 } ) , 200
2024-04-10 15:45:09 +08:00
return jsonify ( { ' error ' : ' Invalid request ' } ) , 400
if __name__ == " __main__ " :
2024-04-28 16:34:09 +08:00
print ( " convert_ipv4_to_int: " , convert_ipv4_to_int ( " 159.226.94.109 " ) )
print ( " convert_ipv4_to_int: " , convert_ipv4_to_int ( " 45.82.167.185 " ) )
app . run ( host = ' 0.0.0.0 ' , port = 8088 , debug = True )