user-0 提问: 网卡抓包：从一个网卡收包后再发回这个网卡抓不到这个包吗？

回复:
user: user-0
content: 引用 8 楼 max_min_ 的回复:[quote=引用 7 楼 zpzkitt 的回复:] [quote=引用 6 楼 max_min_ 的回复:] [quote=引用 5 楼 zpzkitt 的回复:] [quote=引用 4 楼 max_min_ 的回复:] [quote=引用 3 楼 zpzkitt 的回复:] 如何让发送给自己的包走网卡呢？ 或者说让我能从网卡抓到就行！ 用udp发的时候换一个端口，ip地址用127.0.0.1试试！[/quote] 端口是不能换的，因为我就是想自己发送一个radius包，只有1812和1813两个端口。不能用回环地址，因为抓包程序指定了网卡抓包，必须向指定的那几个网卡中发包。[/quote] 那就没办法了！ 可以转发给一个其他的设备呗，这边抓包eth0的数据包，接收端说到包不处理就好了！直接丢弃 不过不明白楼主这么做的目的啊[/quote]  想到过转发给其他设备，但是因为这是radius数据包，我发出去之后就是radius了怕把网络弄乱了。 这是因为现实问题被逼的。没办法啊！！！[/quote]  多接一条消息就把你的网络弄乱了！那代码写的也太次了吧！放心吧！不会这么水的拉！[/quote]   因为那里现实的网络是有radius流量的，我发出去的也是radius流量，很容易导致问题。

user: user-0
content: 引用 6 楼 max_min_ 的回复:[quote=引用 5 楼 zpzkitt 的回复:] [quote=引用 4 楼 max_min_ 的回复:] [quote=引用 3 楼 zpzkitt 的回复:] 如何让发送给自己的包走网卡呢？ 或者说让我能从网卡抓到就行！ 用udp发的时候换一个端口，ip地址用127.0.0.1试试！[/quote] 端口是不能换的，因为我就是想自己发送一个radius包，只有1812和1813两个端口。不能用回环地址，因为抓包程序指定了网卡抓包，必须向指定的那几个网卡中发包。[/quote] 那就没办法了！ 可以转发给一个其他的设备呗，这边抓包eth0的数据包，接收端说到包不处理就好了！直接丢弃 不过不明白楼主这么做的目的啊[/quote] 我也想到另一个办法，就是用另外一台设备收数据包，然后再发给这台设备。但是如果能本机实现是最好的了。

user: user-1
content: 引用 7 楼 zpzkitt 的回复:[quote=引用 6 楼 max_min_ 的回复:] [quote=引用 5 楼 zpzkitt 的回复:] [quote=引用 4 楼 max_min_ 的回复:] [quote=引用 3 楼 zpzkitt 的回复:] 如何让发送给自己的包走网卡呢？ 或者说让我能从网卡抓到就行！ 用udp发的时候换一个端口，ip地址用127.0.0.1试试！[/quote] 端口是不能换的，因为我就是想自己发送一个radius包，只有1812和1813两个端口。不能用回环地址，因为抓包程序指定了网卡抓包，必须向指定的那几个网卡中发包。[/quote] 那就没办法了！ 可以转发给一个其他的设备呗，这边抓包eth0的数据包，接收端说到包不处理就好了！直接丢弃 不过不明白楼主这么做的目的啊[/quote]  想到过转发给其他设备，但是因为这是radius数据包，我发出去之后就是radius了怕把网络弄乱了。 这是因为现实问题被逼的。没办法啊！！！[/quote]  多接一条消息就把你的网络弄乱了！那代码写的也太次了吧！放心吧！不会这么水的拉！

user: user-0
content: 引用 6 楼 max_min_ 的回复:[quote=引用 5 楼 zpzkitt 的回复:] [quote=引用 4 楼 max_min_ 的回复:] [quote=引用 3 楼 zpzkitt 的回复:] 如何让发送给自己的包走网卡呢？ 或者说让我能从网卡抓到就行！ 用udp发的时候换一个端口，ip地址用127.0.0.1试试！[/quote] 端口是不能换的，因为我就是想自己发送一个radius包，只有1812和1813两个端口。不能用回环地址，因为抓包程序指定了网卡抓包，必须向指定的那几个网卡中发包。[/quote] 那就没办法了！ 可以转发给一个其他的设备呗，这边抓包eth0的数据包，接收端说到包不处理就好了！直接丢弃 不过不明白楼主这么做的目的啊[/quote]  想到过转发给其他设备，但是因为这是radius数据包，我发出去之后就是radius了怕把网络弄乱了。 这是因为现实问题被逼的。没办法啊！！！

user: user-1
content: 引用 5 楼 zpzkitt 的回复:[quote=引用 4 楼 max_min_ 的回复:] [quote=引用 3 楼 zpzkitt 的回复:] 如何让发送给自己的包走网卡呢？ 或者说让我能从网卡抓到就行！ 用udp发的时候换一个端口，ip地址用127.0.0.1试试！[/quote] 端口是不能换的，因为我就是想自己发送一个radius包，只有1812和1813两个端口。不能用回环地址，因为抓包程序指定了网卡抓包，必须向指定的那几个网卡中发包。[/quote] 那就没办法了！ 可以转发给一个其他的设备呗，这边抓包eth0的数据包，接收端说到包不处理就好了！直接丢弃 不过不明白楼主这么做的目的啊

user: user-0
content: 引用 4 楼 max_min_ 的回复:[quote=引用 3 楼 zpzkitt 的回复:] 如何让发送给自己的包走网卡呢？ 或者说让我能从网卡抓到就行！ 用udp发的时候换一个端口，ip地址用127.0.0.1试试！[/quote] 端口是不能换的，因为我就是想自己发送一个radius包，只有1812和1813两个端口。不能用回环地址，因为抓包程序指定了网卡抓包，必须向指定的那几个网卡中发包。

user: user-1
content: 引用 3 楼 zpzkitt 的回复:如何让发送给自己的包走网卡呢？ 或者说让我能从网卡抓到就行！ 用udp发的时候换一个端口，ip地址用127.0.0.1试试！

user: user-0
content: 如何让发送给自己的包走网卡呢？ 或者说让我能从网卡抓到就行！

user: user-2
content: 发给自己的包直接内部走了，抓包是抓不到的

user: user-0
content: 发包程序： #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/socket.h> #include <netinet/in.h> #include <string.h> #include <arpa/inet.h> #include <sys/types.h> #include <sys/socket.h> #include <netdb.h> #include <errno.h> #include <assert.h> #include <netdb.h>   #include <signal.h> #include <sys/param.h> #include <sys/stat.h>   char buf[4096] = "0000 01ae 0000 0000 0000 0000 0000 0000\ 04fc 01a2 0000 0000 0000 0000 0000 0000\ 0000 0000 0113 3035 3135 3230 3031 3139\ 3133 3340 766f 6405 0603 20e0 2b04 063d\ b1f8 3608 060a b965 0d0b 0576 6f64 1922\ 3135 3732 3836 3430 3033 3134 3537 3238\ 3135 3732 3836 3430 3033 3134 3537 3238\ 201a 5943 2d4a 482d 3632 312d 4241 532d\ 322e 4d41 4e2e 4d45 3630 2806 0000 0001\ 2906 0000 0000 2c23 5943 2d4a 482d 3630\ 3332 3134 3137 3132 3030 3034 3338 3138\ 6132 3030 3337 3638 342d 0600 0000 0137\ 0652 85b9 ef3d 0600 0000 0f1f 1364 303a\ 3135 3a34 613a 6465 3a32 343a 3330 5732\ 736c 6f74 3d33 3b73 7562 736c 6f74 3d32\ 3b70 6f72 743d 3134 3b76 6c61 6e69 643d\ 3433 3b76 6c61 6e69 6432 3d31 3731 323b\ 0606 0000 0002 0706 0000 0001 4d09 3331\ 3436 3030 3033 0600 0000 001c 0600 0000\ 001b 0600 02a2 c41a 7b00 0007 db3c 2131\ 302e 3138 352e 3130 312e 3133 2064 303a\ 3135 3a34 613a 6465 3a32 343a 3330 0206\ 0030 0110 0506 0030 0110 1606 0000 0005\ 1a06 0000 9334 8a05 766f 6454 0600 0000\ 003d 0600 0000 053e 0600 0000 0599 1364\ 303a 3135 3a34 613a 6465 3a32 343a 3330\ 9f06 0000 0000 0106 0047 d070 0406 0047\ d070"; char in_buf[1024] = {0}; #define HEX_NUM ()   int atoi_simp(char *ch) {     int a = 0, i = 0;     for(i = 0;i < 2;i++){         if(i == 0){             if(ch[i] >= '0' && ch[i] <= '9'){                 a += ch[i] - '0';             }else if(ch[i] >= 'a' && ch[i] <= 'f'){                 a += ch[i] - 87;             }         }else if(i == 1){             if(ch[i] >= '0' && ch[i] <= '9'){                 a += (ch[i] - '0') * 16;             }else if(ch[i] >= 'a' && ch[i] <= 'f'){                 a += (ch[i] - 87) * 16;             }         }     }     return a; }   int ctoi() {     int num = 0, pos = 1;     char buf_ch[2];     char *tmp_buf = buf;     while(*tmp_buf){         if(!((*tmp_buf >= '0' && *tmp_buf <= '9') || (*tmp_buf >= 'a' && *tmp_buf <= 'f'))){             tmp_buf++;             continue;         }           if(pos > 1){             printf("pos error!\n");             return -1;         }                   buf_ch[pos] = *tmp_buf;         if((num % 2) == 1){             in_buf[num / 2] = atoi_simp(buf_ch);             pos = 1;             num++;             tmp_buf++;             continue;         }                   pos--;         num++;         tmp_buf++;     }     if(num % 2){         printf("len error!\n");         return -1;     }     return (num / 2); }   int print_i() {     int i;     for(i = 0;i < 434;i++){         printf("%02x ", (unsigned char)in_buf[i]);     }     return 0; }   int sock_create(unsigned short port) {     int fd;     struct sockaddr_in inaddr;       if ((fd = socket(PF_INET, SOCK_STREAM, 0)) == -1 ) {         printf("create socket error\n");         return -1;     }       memset((void *)&inaddr, 0, sizeof(struct sockaddr_in));     inaddr.sin_family      = AF_INET;     inaddr.sin_addr.s_addr = htonl(INADDR_ANY);     inaddr.sin_port        = htons(port);     if (bind(fd, (struct sockaddr*)&inaddr, sizeof(inaddr)) == -1) {         close(fd);         printf("bind socket failed!\n");         return -1;     }           if (listen(fd, 5) == -1) {         close(fd);         return -1;     }         return fd; }   int num = 0;   int send_simp_radius(unsigned short port) {     int sock_fd, cli_sock, len, ret;     socklen_t cli_sock_len;     struct sockaddr_in    cli_addr;     cli_sock_len = sizeof(struct sockaddr_in);           sock_fd = sock_create(port);     if((len = ctoi()) < 0){         printf("ctoi error\n");         return -1;     } //    print_i(); //    printf("len = %d\n", len);           while(1){         cli_sock = accept(sock_fd, (struct sockaddr *)&cli_addr, &cli_sock_len);         if(cli_sock < 0) {             perror("accept:\n");         }else{         while(1){                 usleep(500);     //            printf("aaadsffd\n");                 ret = send(cli_sock, in_buf, len, MSG_NOSIGNAL);     //            print_i();                 if(ret != len){                     printf("send error!\n");                     break;                 }                 if((num++) >= 65535){                     num = 0;                 }                 printf("num = %d\n", num);             }         }     }     return 0; }   int main(int argc, char *argv[]) {     if(argc != 2){         printf("arg error!\n");         return -1;     }           int port = atoi(argv[1]);     send_simp_radius(port);     return 0; } 接收包 编译： gcc -o client recv_radius_tool.c 运行：./client 10.121.21.226 9002 10.121.21.161 1812        （4个参数发包ip，port，收包ip，port）  发送包 编译：gcc -o server simp_radius_server.c  运行：./server 9002             （指定发送的端口）  运行同时使用tcpdump -w radius.cap -i eth0抓包。