小编Mac*_*ion的帖子

发送SKB用于从内核空间传输

我目前正在编写一个内核模块,它将数据包有效负载修改为学习体验.我已完成数据包修改,但现在我想在原始后发送这个新修改的数据包(我不想丢弃原始数据包).我似乎无法找到发送SKB进行传输的内核函数.我已经尝试了,dev_queue_xmit(nskb)但这导致内核恐慌,我也尝试过,skb->next = nskb但没有做任何事情.我是否必须实施SKB列表处理?我不确定如何做到这一点,因为这篇文章似乎已经过时了.

编辑:

所以我在调用dev_queue_xmit(nskb)时能够修复内核恐慌,我不小心做了dev_queue_xmit(skb),它会删除skb并导致网络过滤器出现恐慌.问题是现在一切正常,但我没有看到重复的数据包被发送,没有第二个数据包的踪迹被发送.机器上的TCPDump看不到任何东西,目标上的TPCDump也看不到任何东西,以下是我的代码.

unsigned int in_hook(void *priv, struct sk_buff *skb, const struct nf_hook_state *state) {
    struct sk_buff *nskb = skb_copy(skb, GFP_KERNEL);
    /* Various other variables not relevant to the problem */
    __u32 saddr, daddr;
    saddr = ntohl(iph->saddr);
    if (saddr == ipToInt(10,0,2,12) || saddr == ipToInt(10,0,2,13)) {
        /*For loop that saves the payload contents into a variable */

        /* Here is where the problem is, 
        I have this if statement to prevent a …
Run Code Online (Sandbox Code Playgroud)

c linux kernel kernel-module linux-kernel

5
推荐指数
1
解决办法
591
查看次数

在 node-mysql 中为 graphql 解析器函数返回 mysql 查询

我是 graphql 和 node 的新手,很抱歉,如果这真的很简单,但我正在尝试执行 mysql 查询,以便 graphql 返回查询响应供客户端读取。我遇到的问题是,因为 node-mysql 是异步查询的,所以我无法直接获得查询响应。

经过一番修修补补,我想通了,新代码:

var root = {
    login: function({username, password}) {
        var s = `select password from users where username='${username}'`;
        var result = sql.query(s);
        return result.then(response => {
            return password == response[0].password
        });
}
Run Code Online (Sandbox Code Playgroud)

下面是函数定义 sql.query

exports.query = function(s, callback) {
    var promise = new Promise((resolve, reject) => {
        con.query(s, function(err, response) {
            if (err) throw err;
            resolve(response);
    });
});
return promise;
Run Code Online (Sandbox Code Playgroud)

Graphql 现在返回未定义响应。

javascript mysql node.js graphql

1
推荐指数
1
解决办法
1409
查看次数

标签 统计

c ×1

graphql ×1

javascript ×1

kernel ×1

kernel-module ×1

linux ×1

linux-kernel ×1

mysql ×1

node.js ×1