免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1317 | 回复: 2
打印 上一主题 下一主题

内核 如何 发包. [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-12-20 14:09 |只看该作者 |倒序浏览
socket系统调用在系统调用表里并没有.不知道应该如何用socket bind connect这样的接口发包.

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
2 [报告]
发表于 2005-12-20 14:50 |只看该作者
用sys_socketcall.

论坛徽章:
0
3 [报告]
发表于 2005-12-21 10:41 |只看该作者
这是linuxforum的daemeon兄给的一个小程序:

  1. #include <linux/module.h>
  2. #include <linux/kernel.h>
  3. #include <linux/init.h>
  4. #include <linux/workqueue.h>
  5. #include <linux/in.h>
  6. #include <linux/inet.h>
  7. #include <linux/socket.h>
  8. #include <net/sock.h>

  9. static struct socket *sock;
  10. static struct work_struct work;
  11. static int udp_sendto(struct socket *sock, void * buff, size_t len,
  12.                 unsigned flags, struct sockaddr *addr, int addr_len)
  13. {
  14.         struct kvec vec;
  15.         struct msghdr msg;

  16.         vec.iov_base=buff;
  17.         vec.iov_len=len;

  18.         memset(&msg, 0x00, sizeof(msg));
  19.         msg.msg_name=addr;
  20.         msg.msg_namelen=addr_len;
  21.         msg.msg_flags = flags | MSG_DONTWAIT;

  22.         return kernel_sendmsg(sock, &msg, &vec, 1, len);
  23. }



  24. static char buffer[128];

  25. static void sendmsg(void *dummy)
  26. {
  27.         int n;
  28.         struct sockaddr_in addr;
  29.         memset(&addr, 0x00, sizeof(addr));
  30.         addr.sin_family = AF_INET;
  31.         addr.sin_port = htons(1000);
  32.         addr.sin_addr.s_addr = in_aton("61.139.2.69");
  33.         n = udp_sendto(sock, buffer, 128, 0, (struct sockaddr *)&addr, sizeof(addr));
  34.         printk("send %i bytes\n", n);

  35. }

  36. static int __init socket_init(void)
  37. {
  38.         INIT_WORK(&work, sendmsg, NULL);
  39.         sock_create_kern(PF_INET, SOCK_DGRAM, 0, &sock);
  40.         schedule_work(&work);
  41.         return 0;
  42. }

  43. static void __exit socket_exit(void)
  44. {
  45.         sock_release(sock);
  46. }



  47. module_init(socket_init);
  48. module_exit(socket_exit);
  49. MODULE_AUTHOR("daemeon www.linuxforum.net");
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP