- 论坛徽章:
- 0
|
本帖最后由 xiaocainiao2011 于 2011-08-27 20:56 编辑
请问有哪位高手对sendmsg函数比较熟悉,我做一个发包的函数,给出源ip和目的Ip地址进行发包,可接收端用tcpdump进行捕包时,显示的源IP地址是发包机器的地址而不是所给的源IP地址,请问这个数据包的源IP地址怎么改?我菜鸟,指点一下吧,课程设计实验遇到的问题
对源IP设定的代码:
send_m(struct sockaddr_in *src,struct sockaddr_in *dst,char data[])
struct msghdr msg;
struct cmsghdr *cmsg;
struct iovec iov;
........//对msg目的IP信息进行设置
//下面我认为是对数据包源IP进行设置的
char buf[CMSG_SPACE(sizeof(struct in_pktinfo))];
struct in_pktinfo *pktinfo;
struct sockaddr_in *sin;
msg.msg_control = buf;
msg.msg_controllen = sizeof(buf);
cmsg = CMSG_FIRSTHDR(&msg);
cmsg->cmsg_level = SOL_SOCKET;
cmsg->cmsg_type = SCM_RIGHTS;
cmsg->cmsg_len = CMSG_LEN(sizeof(struct in_pktinfo));
pktinfo = (struct in_pktinfo*)CMSG_DATA(cmsg);
memset(pktinfo, 0, sizeof(struct in_pktinfo));
sin = src;
memcpy(&pktinfo->ipi_spec_dst, &sin->sin_addr, sizeof(struct in_addr));
send_len = sendmsg(sock_fd, &msg, 0);
目的机器用tcpdump udp port 8888 捕获到的数据包的源IP地址是发送端的IP地址,而不是我所指定的任一IP地址 |
|