我在python中为一些c ipset代码构建了一个SWIF接口(来自DnsMasq)
它有两个大问题,ip地址向后插入IpSet! 即127.0.0.1变为1.0.0.127并且当我将s_addr设置为转换后的ips大约为192.x.x.x及更高时,swig错误... 我玩过endianess,但是当我这样做,或者当我使用高IP地址时,我得到了
in method' in_addr_s_addr_set',参数2类型' int'
这是我的SWIG界面
%module ipset
%{
#include <string.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/utsname.h>
#include <arpa/inet.h>
#include <linux/version.h>
#include <linux/netlink.h>
extern void ipset_init(void);
int add_to_ipset(const char *setname, const struct in_addr *ipaddr, int flags, int remove);
%}
struct in_addr {
int s_addr;
};
extern void ipset_init(void);
int add_to_ipset(const char *setname, const struct in_addr *ipaddr, int flags, int remove);
这是我的python
ina = ipset.in_addr()
aton = socket.inet_aton(ip)
sa = struct.unpack("!L",aton)[0]
ina.s_addr = sa
ipset.add_to_ipset("ipset-name", ina, socket.AF_INET, 0)
答案 0 :(得分:0)
要修复SWIG绑定,我需要一个unsigned long
struct in_addr {
unsigned long s_addr;
};
仍然不确定原因,但为了修复逆转我需要将整数解包为小端。
sa = struct.unpack("<L",aton)[0]