📄 152.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, ðer_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 + -