首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何确定接口名称

如何确定接口名称
EN

Stack Overflow用户
提问于 2014-12-11 06:39:05
回答 1查看 58关注 0票数 1

我有一些代码发送tcp包与SOCK_RAW套接字。我的程序只接受一个参数:主机的名称

以下是该程序的工作原理的描述:

代码语言:javascript
运行
复制
getaddrinfo(argv[1], NULL, hints, &answ) //argv[1] it is host name
....
....
socket(tmp->ai_family, tmp->ai_socktype, tmp->ai_protocol) //tmp = answ->ai_next
....
....
/* filling the tcphdr struct */
send_frame->source = s_port;
send_frame->dest = d_port;
send_frame->seq = seq_num;
send_frame->ack_seq = ack_num;
send_frame->doff = 5;
send_frame->fin = 0;
send_frame->syn = 1;
send_frame->rst = 0;
send_frame->psh = 0;
send_frame->ack = 0;
send_frame->urg = 0;
send_frame->window = 0xffff;
send_frame->check = 0;
/* in this part I form a pseudo tcp header for checksum */
/* but for pseudo header i need a source ip address */
/* but I can not know before, what will be the source address */
/* and I can not form the pseudo header, because I do not know what my source address */
sendto(sock, send_frame, sizeof(struct tcphdr), 0, tmp->ai_addr, tmp->ai_addrlen);

在评论中,我解释了问题,请澄清:我如何确定我的源ip地址,这将取决于我发送数据包的位置。我不想把我的设备的程序名称,它可能是tun0,wlan0和My_Custom_Net_Interface_0012。是否有一种简单的机制来找到src地址,只知道目的地?

我立即想到有必要分析路由表,但我需要一种更简单的方法,如果存在这种方法的话。

我找到了答案:

代码语言:javascript
运行
复制
    connect(sock, tmp->ai_addr, tmp->ai_addrlen);
    struct sockaddr_in addr;
    socklen_t len = sizeof(struct sockaddr_in);
    getsockname(sock, (struct sockaddr *)&addr, &len);
    printf("%s\n", inet_ntoa(addr.sin_addr));

如果该问题是感兴趣的,则可以更不用说,如果不是,则可以删除

EN

回答 1

Stack Overflow用户

发布于 2017-03-23 20:10:25

我找到了答案:

代码语言:javascript
运行
复制
    connect(sock, tmp->ai_addr, tmp->ai_addrlen);
    struct sockaddr_in addr;
    socklen_t len = sizeof(struct sockaddr_in);
    getsockname(sock, (struct sockaddr *)&addr, &len);
    printf("%s\n", inet_ntoa(addr.sin_addr));

--伊万·伊万诺维奇

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27412201

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档