tcpdump 源码下载

wget https://www.tcpdump.org/release/tcpdump-4.99.1.tar.gz
wget https://www.tcpdump.org/release/libpcap-1.10.1.tar.gz

交叉编译libpcap

tar xvf libpcap-1.10.1.tar.gz
cd libpcap-1.10.1/
./configure --prefix=$(pwd)/.. --host=arm-linux-gnueabihf --with-pcap=linux --disable-shared
make && make install

交叉编译tcpdump

tar xvf tcpdump-4.99.1.tar.gz
cd tcpdump-4.99.1/
./configure --prefix=$(pwd)/.. --host=arm-linux-gnueabihf --with-crypto=$(pwd)/..
make && make install

如果不需要OpenSSL的话

./configure --prefix=$(pwd)/.. --host=arm-linux-gnueabihf

./tcpdump -h

compiler: hesy May 19 2022 08:51:08
tcpdump version 4.99.1
libpcap version 1.10.1 (with TPACKET_V3)
OpenSSL 1.1.1d 10 Sep 2019

tcpdump for arm 下载, 依赖OpenSSL
tcpdump for arm

iconv source code linux

wget https://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.17.tar.gz

交叉编译 libiconv

tar xvf libiconv-1.17.tar.gz
cd libiconv-1.17/
./configure --prefix=$(pwd)/.. --host=arm-linux-gnueabihf
make && make install

生成静态库

./configure --prefix=$(pwd)/.. --host=arm-linux-gnueabihf --enable-static
make -j
find . -type f -name "*.a"

./lib/.libs/libiconv.a
./lib/libcharset.a
./libcharset/lib/.libs/libcharset.a
./srclib/libicrt.a

find . -type f -name "*.so*"

./lib/.libs/libiconv.so.2.6.1
./lib/libcharset.so.1.0.0
./libcharset/lib/.libs/libcharset.so.1.0.0
生成动态库

./configure --prefix=$(pwd)/.. --host=arm-linux-gnueabihf --enable-shared
make -j
find . -type f -name "*.a"

./lib/libcharset.a
./libcharset/lib/.libs/libcharset.a
./srclib/libicrt.a

find . -type f -name "*.so*"

./lib/.libs/libiconv.so.2.6.1
./lib/libcharset.so.1.0.0
./libcharset/lib/.libs/libcharset.so.1.0.0

iconv c++ 转码示例

int utf82gbk(string instr, string& outstr)
{
    iconv_t cd = iconv_open("gbk", "utf-8");
    size_t inbytesleft = instr.length();
    size_t outbytesleft = 3 * inbytesleft;
    char* outbuf = (char*)malloc(outbytesleft);
    memset(outbuf, 0, outbytesleft);
    size_t bytes = outbytesleft;
    char* inbuf = (char*)malloc(inbytesleft);
    memcpy(inbuf, instr.data(), instr.length());

    char* srcstart = inbuf;
    char* tempoutbuf = outbuf;

    int ret = iconv(cd, &srcstart, &inbytesleft, &tempoutbuf, &outbytesleft);
    if (ret < 0)
    {
        perror("iconv");
        free(inbuf);
        free(outbuf);
        return -1;
    }
    bytes -= outbytesleft;
    iconv_close(cd);
    outstr.assign((char*)outbuf, bytes);
    free(inbuf);
    free(outbuf);

    return 0;
}

int gbk2utf8(string instr, string& outstr)
{
    iconv_t cd = iconv_open("utf-8", "gbk");
    size_t inbytesleft = instr.length();
    size_t outbytesleft = 3 * inbytesleft;
    char* outbuf = (char*)malloc(outbytesleft);
    memset(outbuf, 0, outbytesleft);
    size_t bytes = outbytesleft;
    char* inbuf = (char*)malloc(inbytesleft);
    memcpy(inbuf, instr.data(), instr.length());

    char* srcstart = inbuf;
    char* tempoutbuf = outbuf;

    int ret = iconv(cd, &srcstart, &inbytesleft, &tempoutbuf, &outbytesleft);
    if (ret < 0)
    {
        perror("iconv");
        free(inbuf);
        free(outbuf);
        return -1;
    }
    bytes -= outbytesleft;
    iconv_close(cd);
    outstr.assign((char*)outbuf, bytes);
    free(inbuf);
    free(outbuf);

    return 0;
}

there is no way to use range-based for loops to erase. You should use the standard way:

for(auto it = allObjects.begin(); it != allObjects.end();)
{
    if(/* condition */)
        it = allObjects.erase(it);
    else
        ++it;
}

9000 正常 成功执行
6200 警告 信息未提供
6281 警告 回送数据可能出错
6282 警告 文件长度小于Le
6283 警告 选中的文件无效
6284 警告 FCI格式与P2指定的不符
6300 警告 鉴别失败
63Cx 警告 校验失败(x-允许重试次数)
6400 出错 状态标志位没有变
6581 出错 内存失败
6700 出错 长度错误
6882 出错 不支持安全报文
6981 出错 命令与文件结构不相容,当前文件非所需文件
6982 出错 操作条件(AC)不满足,没有校验PIN
6983 出错 认证方法锁定,PIN被锁定
6984 出错 随机数无效,引用的数据无效
6985 出错 使用条件不满足
6986 出错 不满足命令执行条件(不允许的命令,INS有错)
6987 出错 MAC丢失
6988 出错 MAC不正确
698D 保留
6A80 出错 数据域参数不正确
6A81 出错 功能不支持;创建不允许;目录无效;应用锁定
6A82 出错 该文件未找到
6A83 出错 该记录未找到
6A84 出错 文件预留空间不足
6A86 出错 P1或P2不正确
6A88 出错 引用数据未找到
6B00 出错 参数错误
6Cxx 出错 Le长度错误,实际长度是xx
6E00 出错 不支持的类:CLA有错
6F00 出错 数据无效
6D00 出错 不支持的指令代码
9301 出错 资金不足
9302 出错 MAC无效
9303 出错 应用被永久锁定
9401 出错 交易金额不足
9402 出错 交易计数器达到最大值
9403 出错 密钥索引不支持
9406 出错 所需MAC不可用
6900 出错 不能处理
6901 出错 命令不接受(无效状态)
61xx 正常 需发GET RESPONSE命令
6600 出错 接收通讯超时
6601 出错 接收字符奇偶错
6602 出错 校验和不对
6603 警告 当前DF文件无FCI
6604 警告 当前DF下无SF或KF