⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 152.htm

📁 unix高级编程原吗
💻 HTM
字号:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>CTerm非常精华下载</title>
</head>
<body bgcolor="#FFFFFF">
<table border="0" width="100%" cellspacing="0" cellpadding="0" height="577">
<tr><td width="32%" rowspan="3" height="123"><img src="DDl_back.jpg" width="300" height="129" alt="DDl_back.jpg"></td><td width="30%" background="DDl_back2.jpg" height="35"><p align="center"><a href="http://apue.dhs.org"><font face="黑体"><big><big>123</big></big></font></a></td></tr>
<tr>
<td width="68%" background="DDl_back2.jpg" height="44"><big><big><font face="黑体"><p align="center">               ● UNIX网络编程                       (BM: clown)                </font></big></big></td></tr>
<tr>
<td width="68%" height="44" bgcolor="#000000"><font face="黑体"><big><big><p   align="center"></big></big><a href="http://cterm.163.net"><img src="banner.gif" width="400" height="60" alt="banner.gif"border="0"></a></font></td>
</tr>
<tr><td width="100%" colspan="2" height="100" align="center" valign="top"><br><p align="center">[<a href="index.htm">回到开始</a>][<a href="136.htm">上一层</a>][<a href="153.htm">下一篇</a>]
<hr><p align="left"><small>发信人: guru ( Darkness), 信区: unp <br>

标  题: set raw ethernet <br>

发信站: UNIX编程 (2001年06月28日00:15:48 星期四), 站内信件 <br>

  <br>

: 小许 于 2000-11-29 18:32:52 加贴在 绿盟科技论坛(bbs.nsfocus.com)--UNIX系统安全 <br>

  <br>

: <br>

  <br>

Re: [rtl] raw ethernet questions <br>

  <br>

  <br>

  <br>

------------------------------------------------------------------------------- <br>

  <br>

Subject: Re: [rtl] raw ethernet questions <br>

  <br>

From: Bernd Blessmann (bibi@online.de) <br>

  <br>

Date: Wed Apr 12 2000 - 19:06:31 EDT <br>

  <br>

  <br>

  <br>

sorted by: [ date ] [ thread ] [ subject ] [ author ] <br>



  <br>

Next message: wycc@link.ece.uci.edu: "RED-Linux 1.0a7" <br>

  <br>

Previous message: Brian Harrington: "Fw: Minimum Specification PC104 for minirt <br>

  <br>

rtlinux? (Non garbled!)" <br>

  <br>

------------------------------------------------------------------------------- <br>

  <br>

  <br>

  <br>

Hi j_clifton, <br>

  <br>

  <br>

  <br>

as far as I know, the E&S can use UDP, too. But I磛e written a little <br>

  <br>

C-program to send raw ethernet form linux which compiles fine (I am <br>

  <br>

using SuSE-Linux, but this should not matter). The code is attached. <br>

  <br>

I've got the information out of the man pages. <br>



  <br>

  <br>

  <br>

Hope this helps <br>

  <br>

  <br>

  <br>

Bernd <br>

  <br>

  <br>

  <br>

j_clifton@aerosimulation.com wrote: <br>

  <br>

> <br>

  <br>

> Anyone (especially simulation types) have any examples of using raw ethernet? <br>

  <br>

I <br>

  <br>

> am trying to connect a Evans & Sutherland ESIG 5350 Image generator and they <br>

  <br>

se <br>

se <br>

  <br>

> raw ethernet. I am running Redhat 6.0/6.1 SMP. <br>

  <br>

> <br>

  <br>

> I read the network newsgroups and cobbled up some code but it doesn't compile <br>

  <br>

  <br>

  <br>

> Man 4 packet refers to using a sockaddr_ll struct to pass the MAC address but <br>

  <br>

> bind, sendto, and recvfrom all complain about type errors because they want a <br>

  <br>

> sockaddr, not a sockaddr_ll. Also, what is a sll_ifindex? <br>

  <br>

> <br>

  <br>

> -- [rtl] --- <br>

  <br>

> To unsubscribe: <br>

  <br>

> echo "unsubscribe rtl" | mail majordomo@rtlinux.org OR <br>



  <br>

> echo "unsubscribe rtl <Your_email>" | mail majordomo@rtlinux.org <br>

  <br>

> --- <br>

  <br>

> For more information on Real-Time Linux see: <br>

  <br>

> http://www.rtlinux.org/rtlinux/ <br>

  <br>

  <br>

  <br>

  <br>

  <br>

  <br>

  <br>

/* <br>

  <br>

* $Id: rp_send.c,v 1.2 2000/01/27 21:43:27 bernd Exp bernd $ <br>

  <br>

* <br>

  <br>

* raw packet sender for testing rtl-ethernet receiver <br>



  <br>

* - - ---- <br>

  <br>

* <br>

  <br>

* this uses PF_PACKET and SOCK_RAW and must be run as root <br>

  <br>

* <br>

  <br>

* (c) Bernd Blessmann <br>

  <br>

* <br>

  <br>

* Author: Bernd Blessmann, 26.01.2000 <br>

  <br>

* <br>

  <br>

*/ <br>

  <br>

  <br>

  <br>

  <br>



#include <stdio.h> <br>

  <br>

#include <stdlib.h> <br>

  <br>

#include <unistd.h> <br>

  <br>

#include <errno.h> <br>

  <br>

#include <string.h> <br>

  <br>

  <br>

  <br>

  <br>

  <br>

#include <sys/types.h> <br>

  <br>

  char hw_dest_addr[ETH_ALEN] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; <br>

  <br>

  char* msg; /* to send; contains header and data */ <br>



  <br>

  short int proto = ETH_P_IP; <br>

  <br>

  int i; <br>

  <br>

  int msg_size; <br>

  <br>

  int packet_socket; <br>

  <br>

  struct sockaddr_ll ll_source_addr; <br>

  <br>

  struct sockaddr_ll ll_dest_addr; <br>

  <br>

  struct ethhdr ether_header; <br>

  <br>

  data_struct_t data; <br>

  <br>

  <br>

  <br>

  <br>

  <br>

  <br>

 (packet_socket = socket(PF_PACKET, SOCK_RAW, htons(proto))) == -1 ) { <br>

  <br>

    perror("rp_send: main(): socket()"); <br>

  <br>

    exit (1); <br>

  <br>

  } <br>

  <br>

  <br>

  <br>

  <br>

  <br>

  /* source address for bind */ <br>

  <br>

  ll_source_addr.sll_family = AF_PACKET; <br>

  <br>

  ll_source_addr.sll_protocol = htons(proto); <br>

  <br>

  ll_source_addr.sll_ifindex = 3; <br>

  <br>

  ll_source_addr.sll_halen = ETH_ALEN; <br>



  <br>

  memcpy (ll_source_addr.sll_addr, hw_source_addr, ETH_ALEN); <br>

  <br>

  <br>

  <br>

  <br>

  <br>

  /* destinatin address for sendto */ <br>

  <br>

  ll_dest_addr.sll_family = AF_PACKET; <br>

  <br>

  ll_dest_addr.sll_protocol = htons(proto); <br>

  <br>

  ll_dest_addr.sll_ifindex = 3; <br>

  <br>

  ll_dest_addr.sll_halen = ETH_ALEN; <br>

  <br>

  memcpy (ll_dest_addr.sll_addr, hw_dest_addr, ETH_ALEN); <br>

  <br>

  <br>

  <br>

  <br>

bind (packet_socket, <br>

  <br>

            (struct sockaddr*)&ll_source_addr, <br>

  <br>

            sizeof(ll_source_addr)) == -1 ) { <br>

  <br>

    perror("rp_send: main(): bind()"); <br>

  <br>

    exit (1); <br>

  <br>

  } <br>

  <br>

  <br>

  <br>

  <br>

  <br>

  /* ethernet header */ <br>

  <br>

  memcpy (ether_header.h_dest, hw_dest_addr, ETH_ALEN); <br>

  <br>

  memcpy (ether_header.h_source, hw_source_addr, ETH_ALEN); <br>



  <br>

  /* length of data instead of protocol */ <br>

  <br>

  /* ether_header.h_proto = htons(proto); */ <br>

  <br>

  ether_header.h_proto = htons(sizeof(data)); <br>

  <br>

  <br>

  <br>

  <br>

  <br>

  /* data */ <br>

  <br>

  data.len = sizeof(data); <br>

  <br>

  data.timestamp = ~0; /* no timestamp for now */ <br>

  <br>

  data.da_len = DATA_COUNT; <br>

  <br>

  for (i = 0; i < DATA_COUNT; i++) { <br>

  <br>

    data.da[i] = i; <br>



  <br>

  } <br>

  <br>

  <br>

  <br>

  <br>

  <br>

  /* msg */ <br>

  <br>

  msg_size = sizeof(ether_header) + sizeof(data); <br>

  <br>

  if ( (msg = malloc(msg_size)) == NULL ) { <br>

  <br>

    fprintf(stderr, "rp_send: main(): malloc(): No memory available\n"); <br>

  <br>

    exit (1); <br>

  <br>

  } <br>

  <br>

  memcpy (msg, &ether_header, sizeof(ether_header)); <br>

  <br>

  <br>

  <br>

  <br>

  <br>

  <br>

  <br>

  <br>

  for (i = 0; i < 5; i++) { <br>

  <br>

    int j; <br>

  <br>

  <br>

  <br>

  <br>

  <br>

    data.seq_nr = i; <br>

  <br>

    memcpy (msg + sizeof(ether_header), &data, sizeof(data)); <br>

  <br>

  <br>

  <br>

  <br>

  <br>

    for (j = 0; j < msg_size; j++) { <br>



  <br>

      printf ("0x%2.2X ", msg[j] & 0x000000FF); <br>

  <br>

    } <br>

  <br>

    printf ("\n\n"); <br>

  <br>

  <br>

  <br>

  <br>

  <br>

    if ( sendto(packet_socket, msg, msg_size, 0, <br>

  <br>

                (struct sockaddr*)&ll_dest_addr, <br>

  <br>

                sizeof(ll_dest_addr)) == -1 ) { <br>

  <br>

      perror("rp_send: main(): sendto()"); <br>

  <br>

* Header fuer Testmodule <br>

  <br>

* <br>

* <br>

  <br>

* Autor: Bernd Blessmann <br>

  <br>

* Datum: 19.01.2000 <br>

  <br>

* <br>

  <br>

*/ <br>

  <br>

  <br>

  <br>

  <br>

  <br>

  <br>

  <br>

#ifndef rt_test_h <br>

  <br>

#define rt_test_h <br>

  <br>

  <br>

  <br>

  <br>

  <br>

  <br>

#ifdef __RTL__ <br>

  <br>

# include <rtl.h> <br>

  <br>

#endif /* __RTL__ */ <br>

  <br>

  <br>

  <br>

  <br>

  <br>

  <br>

  <br>

#define MS 1000000 /* one ms in ns */ <br>

  <br>

#define PERIOD (2*MS) /* send period; recv period is half of that */ <br>

  <br>

  <br>

  <br>

#define DATA_COUNT 2000 <br>

  <br>

  <br>

  <br>

  <br>

  <br>

  <br>

typedef struct { <br>

  <br>

  int len; <br>

  <br>

  int seq_nr; <br>

  <br>

  <br>

  <br>

  <br>

  <br>

#ifdef __RTL__ <br>

  <br>

  hrtime_t timestamp; <br>

  <br>

#else <br>

  <br>

  long long timestamp; <br>

  <br>

#endif /* __RTL__ */ <br>



  <br>

  <br>

  <br>

  <br>

  <br>

  int da_len; <br>

  <br>

  int da[DATA_COUNT]; <br>

  <br>

} data_struct_t; <br>

  <br>

  <br>

  <br>

  <br>

  <br>

  <br>

  <br>

#endif /* rt_test_h */ <br>

  <br>

  <br>

  <br>

  <br>



  <br>

  <br>

------------------------------------------------------------------------------- <br>

  <br>

  <br>

  <br>

  <br>

  <br>

Next message: wycc@link.ece.uci.edu: "RED-Linux 1.0a7" <br>

  <br>

Previous message: Brian Harrington: "Fw: Minimum Specification PC104 for minirt <br>

  <br>

rtlinux? (Non garbled!)" <br>

  <br>

  <br>

  <br>

------------------------------------------------------------------------------- <br>

  <br>

  <br>

  <br>

  <br>

This archive was generated by hypermail 2b25 : Wed Apr 12 2000 - 19:13:10 EDT <br>

  <br>

  <br>

  <br>

  <br>

  <br>

  <br>

  <br>

  <br>

  <br>

  <br>

  <br>

------------------------------------------------------------------------------- <br>

  <br>

: 586 于 2000-11-30 12:28:17 加贴在 绿盟科技论坛(bbs.nsfocus.com)--UNIX系统安全 <br>

  <br>

: <br>

  <br>

  <br>

  <br>

MAC地址也不能照搬啊! <br>



  <br>

你bind()肯定报没有此设备。 <br>

  <br>

修改hw_source_addr[]   !!! <br>

  <br>

如果想修改MAC地址可以用ifconfig改。 <br>

  <br>

我说的够详细了吧! <br>

  <br>

  <br>

  <br>

: 586 于 2000-11-30 18:30:08 加贴在 绿盟科技论坛(bbs.nsfocus.com)--UNIX系统安全 <br>

  <br>

: <br>

  <br>

  <br>

  <br>

我手头现在没有linux环境。明天帮你看看。 <br>

  <br>

你说bind()出错,我敢肯定是sll_addr(MAC address) <br>

  <br>

和sll_ifindex(interface number)的问题。 <br>



  <br>

  <br>

  <br>

修改吧! <br>

  <br>

改完至少bind()不可能出错。 <br>

  <br>

  <br>

  <br>

上回jjgirl让你看libnet你一定没看。 <br>

  <br>

-- <br>

  <br>

: 586 于 2000-12-11 10:28:34 加贴在 绿盟科技论坛(bbs.nsfocus.com)--UNIX系统安全 <br>

: <br>

  <br>

我前几天出差,你的那个小程序调好了吗? <br>

我随便帮你改了一下。 <br>

如下: <br>

int main(int argc, char *argv[]) <br>

{ <br>

   struct sockaddr_in sin; <br>



   struct hostent *fromname; <br>

   sin.sin_addr.s_addr=inet_addr("192.168.112.8"); <br>

   fromname=gethostbyaddr((char *)&sin.sin_addr,sizeof(struct in_addr),PF_INET); <br>

   printf("offic.name: %s\n",fromname->h_name); <br>

} <br>

~ <br>

-- <br>

※ 修改:·guru 於 07月20日21:21:31 修改本文·[FROM: 202.114.36.200] <br>

※ 来源:·UNIX编程 www.tiaozhan.com/unixbbs/·[FROM: 202.114.42.201] <br>

</small><hr>
<p align="center">[<a href="index.htm">回到开始</a>][<a href="136.htm">上一层</a>][<a href="153.htm">下一篇</a>]
<p align="center"><a href="http://cterm.163.net">欢迎访问Cterm主页</a></p>
</table>
</body>
</html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -