Sockets 将Ip地址转换为int(in_addr)以进行SWIG绑定

Sockets 将Ip地址转换为int(in_addr)以进行SWIG绑定,sockets,python-2.7,swig,Sockets,Python 2.7,Swig,我用python为一些c ipset代码(来自DnsMasq)构建了一个SWIF接口 它解决了两个大问题,ip地址被向后插入IpSet! i、 e.127.0.0.1变为1.0.0.127,当我将转换IP的s_addr设置为192.x.x.x及更高时,swig错误。。。 我玩过endianess,但当我玩的时候,或者当我使用高ip地址时,我会得到 在“in_addr_s_addr_set”方法中,参数2的类型为“int” 这是我的SWIG接口 %module ipset %{ #incl

我用python为一些c ipset代码(来自DnsMasq)构建了一个SWIF接口

它解决了两个大问题,ip地址被向后插入IpSet! i、 e.127.0.0.1变为1.0.0.127,当我将转换IP的s_addr设置为192.x.x.x及更高时,swig错误。。。 我玩过endianess,但当我玩的时候,或者当我使用高ip地址时,我会得到

在“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);

要修复SWIG绑定,我需要一个未签名的long

struct in_addr {
    unsigned long s_addr;
};
仍然不知道为什么,但为了解决这个问题,我需要将整数解包为little endian

sa = struct.unpack("<L",aton)[0]
sa=struct.unpack(“
sa = struct.unpack("<L",aton)[0]