首页
社区
课程
招聘
[求助]hook怎么实现修改dscp值?
发表于: 2020-11-12 20:40 2474

[求助]hook怎么实现修改dscp值?

2020-11-12 20:40
2474
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
void SetDSCP(SOCKET s, int new_dscp)
{
    int retval, ec;
 
    int tos = 0;
    int toslen = sizeof(tos);
    retval = getsockopt(s, IPPROTO_IP, IP_TOS, (char *)&tos, &toslen);
    if (retval == SOCKET_ERROR)
    {
        ec = WSAGetLastError();
        dbg("getsockopt(%d)=SOCKET_ERROR. ec=0x%x, msg:%s", s, ec, GetErrorMsg(ec));
    }
    else
    {
        ec = WSAGetLastError();
        dbg("getsockopt(%d,%d)=%d. ec=0x%x, msg:%s", s, tos, retval, ec, GetErrorMsg(ec));
    }
 
    int iptos = new_dscp << 2;
    retval = setsockopt(s, IPPROTO_IP, IP_TOS, (const char *)&iptos, sizeof(iptos));
    if (retval == SOCKET_ERROR)
    {
        ec = WSAGetLastError();
        dbg("setsockopt(%d)=SOCKET_ERROR. ec=0x%x, msg:%s", s, ec, GetErrorMsg(ec));
    }
    else
    {
        ec = WSAGetLastError();
        dbg("setsockopt(%d,%d)=%d. ec=0x%x, msg:%s", s, tos, retval, ec, GetErrorMsg(ec));
    }
}
 
int PASCAL FAR New_connect(IN SOCKET s, IN const struct sockaddr FAR *name, IN int namelen)
{
    SetDSCP(s, 2);
    return Old_connect(s, name, namelen);
}

结果一直返回SOCKET_ERROR。
getsockopt(956)=SOCKET_ERROR. ec=0x273a, msg:在 getsockopt 或 setsockopt 调用中指定的一个未知的、无效的或不受支持的选项或层次。
setsockopt(956)=SOCKET_ERROR. ec=0x273a, msg:在 getsockopt 或 setsockopt 调用中指定的一个未知的、无效的或不受支持的选项或层次。

 

hook connect函数,在连接前先修改DSCP,这个思路有错吗?请问错在哪里需要才能实现修改dscp呢?


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

最后于 2020-11-12 20:43 被qkong编辑 ,原因:
收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//