ip地址反查python模块编写

通过IP地址反查归属地的python模块
业务逻辑由其它C++模块已经完成了开发。

#include <Python.h>
#include "iplookup.h"


static 	il_db_t _g_db;
ipitem  ip_lookup(const char *query)
{
	const char *encoding = "UTF-8";
	data_type type = text;
	ipitem iphm;
	il_iplookup(query, iphm, _g_db, type, encoding);
	return iphm;
}


static PyObject * wrap_ip_lookup(PyObject *self, PyObject *args)
{
    const char * command;
    
    if (!PyArg_ParseTuple(args, "s", &command))//这句是把python的变量args转换成c的变量command
        return NULL;
    ipitem  iphm = ip_lookup(command);//调用c的函数
    
    return Py_BuildValue("(sssssss)",iphm.country ,iphm.province,iphm.city  ,iphm.district,iphm.isp     , iphm.type    , iphm.desc);
    
//把c的返回值n转换成python的对象
}

 // 3 方法列表
static PyMethodDef IpLocateMethods[] = {
  {"ip_lookup", wrap_ip_lookup, METH_VARARGS, "locate ip address."},
  {NULL, NULL, 0, NULL} 
 };

PyMODINIT_FUNC initiplocate(void)
{
    PyObject *m = Py_InitModule("iplocate", IpLocateMethods);
	const char* db_file = "/opt/iplookup/share/ip.db";
	_g_db = il_open(db_file);
    if (m == NULL) return;
}


编译安装:
g++ -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -fPIC -I. -I/opt
/python2.6/include/python2.6  -c iplocate.cpp  -o iplocate.o

g++  -Xlinker -export-dynamic  -pthread -shared -Wl,-O1 -Wl libiplookup_la-ip.o
libiplookup_la-iplookup.o libiplookup_la-iconv_ext.o   iplocate.o -o iplocate.so
-I /opt/python2.6/include/python2.6  -I /usr/include/

把生成的模块移到:
/opt/python2.6/lib/python2.6/lib-dynload/

你可能感兴趣的:(C++,c,python,ext,C#)