ip写你的网关的ip,mac写你网关的ip,以后别人发arp欺骗的时候,win的机器不会理会欺骗的arp宣告,然后在ros里面改一下,让路由也不理会arp宣告,这个问题就没问题了,并且在ros里面绑定所有的mac地址和ip的关系,他们改了ip自己就掉线了 偶的环境不太一样,因为使用的是三层交换机,可以划VLAN,每个VLAN定义一个地址作为用户的网关,服务器、路由器都在单独一个VLAN里,别的电脑想改到这个VLAN里也不能用,当然也不会断线了。
偶想也可以把linux系统做成两部分,一部分干三层交换上用户网关的工作,一部分干路由的工作,用个2层划VLAN的交换机就可以了。
性能不知道,需要测试。 原帖由 想得太美 于 2004-12-4 16:26 发表
coyote2.11-2.16 Send_arp 扩展功能包 */
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define ETH_HW_ADDR_LEN 6
#define IP_ADDR_LEN 4
#define ARP_FRAME_TYPE 0x0806
#define ETHER_HW_TYPE 1
#define IP_PROTO_TYPE 0x0800
#define OP_ARP_REQUEST 2
#define DEFAULT_DEVICE "eth0"
char usage[]={"send_arp: sends out custom ARP packet. yuri volobuev'97\n\
\tusage: send_arp src_ip_addr src_hw_addr targ_ip_addr tar_hw_addr\n\n"};
struct arp_packet {
u_char targ_hw_addr;
u_char src_hw_addr;
u_short frame_type;
u_short hw_type;
u_short prot_type;
u_char hw_addr_size;
u_char prot_addr_size;
u_short op;
u_char sndr_hw_addr;
u_char sndr_ip_addr;
u_char rcpt_hw_addr;
u_char rcpt_ip_addr;
u_char padding;
};
void die(char *);
void get_ip_addr(struct in_addr*,char*);
void get_hw_addr(char*,char*);
int main(int argc,char** argv){
struct in_addr src_in_addr,targ_in_addr;
struct arp_packet pkt;
struct sockaddr sa;
int sock;
if(argc != 5)die(usage);
sock=socket(AF_INET,SOCK_PACKET,htons(ETH_P_RARP));
if(socks_addr=inet_addr(str);
if(in_addr->s_addr == -1){
if( (hostp = gethostbyname(str)))
bcopy(hostp->h_addr,in_addr,hostp->h_length);
else {
fprintf(stderr,"send_arp: unknown host %s\n",str);
exit(1);
}
}
}
void get_hw_addr(char* buf,char* str){
int i;
char c,val;
for(i=0;i= 'a' && c 顶一下。
ddd
192.168.0.1的网关MAC地址跟工作站绑定不就OK了 如果是ros要怎样用
页:
1
[2]