打开ppp packet打印

本文详细解析了pppd/utils.c文件中log_write函数与dump_packet函数的修改,包括日志写入、系统日志记录、错误输出和日志到文件的写入等关键部分。
diff --git a/pppd/utils.c b/pppd/utils.c
index 6f668b8..6f1db8f 100644
--- a/pppd/utils.c
+++ b/pppd/utils.c
@@ -670,9 +670,10 @@ log_write(level, buf)
     int level;
     char *buf;
 {
+    dbglog("%s",buf);
     syslog(level, "%s", buf);
 
-    fprintf(stderr, buf);
+    fprintf(stderr,"%s", buf);
     
     if (log_to_fd >= 0 && (level != LOG_DEBUG || debug)) {
        int n = strlen(buf);


@@ -861,8 +862,20 @@ dump_packet(const char *tag, unsigned char *p, int len)
            && l >= HEADERLEN && l <= len - PPP_HDRLEN)
            return;
     }
+    {
+       char bufout[100] = {0};
+       int i = 0;
+       int level;
 
-    dbglog("%s %P", tag, p, len);
+       for(i = 0; i < len; i++)
+           sprintf(&(bufout[2*i]), "%.2x", p[i]);
+        dbglog("%s [%s], len %d", tag, bufout, len);
+
+       level = ANDROID_LOG_DEBUG;
+       init_pr_log(tag, level);
+       format_packet(p, len, pr_log, &level);
+       end_pr_log();
+    }
 }


修改后的函数如下
static void
log_write(level, buf)
    int level;
    char *buf;
{
    dbglog("%s",buf);
    syslog(level, "%s", buf);

    fprintf(stderr,"%s", buf);
    
    if (log_to_fd >= 0 && (level != LOG_DEBUG || debug)) {
	int n = strlen(buf);

	if (n > 0 && buf[n-1] == '\n')
	    --n;
	if (write(log_to_fd, buf, n) != n
	    || write(log_to_fd, "\n", 1) != 1)
	    log_to_fd = -1;
    }
}

void
dump_packet(const char *tag, unsigned char *p, int len)
{
    int proto;

    if (!debug)
	return;

    /*
     * don't print LCP echo request/reply packets if debug <= 1
     * and the link is up.
     */
    proto = (p[2] << 8) + p[3];
    if (debug <= 1 && unsuccess == 0 && proto == PPP_LCP
	&& len >= PPP_HDRLEN + HEADERLEN) {
	unsigned char *lcp = p + PPP_HDRLEN;
	int l = (lcp[2] << 8) + lcp[3];

	if ((lcp[0] == ECHOREQ || lcp[0] == ECHOREP)
	    && l >= HEADERLEN && l <= len - PPP_HDRLEN)
	    return;
    }
    {
	char bufout[100] = {0};
	int i = 0;
	int level;

	for(i = 0; i < len; i++)
	    sprintf(&(bufout[2*i]), "%.2x", p[i]);
        dbglog("%s [%s], len %d", tag, bufout, len);

	level = ANDROID_LOG_DEBUG;
	init_pr_log(tag, level);
	format_packet(p, len, pr_log, &level);
	end_pr_log();
    }
}



<think>好的,我现在需要帮助用户解决在Packet Tracer中配置PPP协议的问题。首先,用户的问题是关于如何在Packet Tracer中配置或使用PPP协议。我需要先回顾一下PPP协议的基本概念和配置步骤,然后结合Packet Tracer的具体操作来给出指导。 首先,PPP(点对点协议)是一种数据链路层协议,常用于在两点之间建立直接连接,支持身份验证、加密等功能。根据引用[2],PPPOE是基于PPP的协议,但用户这里问的是PPP本身,可能是在串行链路上的配置,比如路由器之间的连接。 接下来,我需要回忆在Packet Tracer中配置PPP的步骤。通常涉及以下几个步骤:连接设备、配置接口IP地址、启用PPP封装,以及可能的身份验证设置(PAP或CHAP)。 然后,用户可能需要具体的命令行配置示例。例如,在路由器上进入串行接口,设置IP地址,指定封装为PPP,然后配置验证方式。需要确保语法正确,并且符合Cisco IOS的格式。 还要注意是否需要配置用户名和密码,特别是在使用CHAP验证时,双方路由器需要彼此的用户名和密码,并且密码必须一致。这点很重要,如果遗漏可能导致验证失败。 此外,测试配置是否成功的方法,比如使用ping命令或者查看接口状态,也是用户可能需要的。需要将这些步骤详细列出,确保用户能够逐步操作。 最后,根据用户提供的引用,引用[2]提到了PPPOE的配置,但用户的问题是关于PPP的,所以可能需要区分两者。不过引用[3]提到了PPP在WAN连接中的使用,结合其他协议如BGP、GRE,这可能提示用户的应用场景是广域网连接,因此配置PPP时可能需要考虑与其他协议的协作,但用户的问题可能集中在基础配置上。 需要确保回答结构清晰,分步骤说明,并给出示例代码,同时检查是否符合LaTeX格式要求,比如数学公式或变量使用$...$,但这里可能涉及的命令行不需要数学公式,但需要正确使用代码块。同时,生成的相关问题要围绕PPP配置的常见问题展开,比如验证方式、调试命令、与HDLC的区别等。 总结一下,回答的结构应该是: 1. PPP协议概述 2. 配置步骤: a. 连接设备 b. 接口配置(IP、封装) c. 身份验证配置(可选) 3. 示例配置(PAP和CHAP) 4. 验证方法 5. 相关问题 确保每个部分都准确,并参考用户提供的引用,特别是引用[2]和[3]中提到的PPP相关内容。同时,检查是否有任何可能的错误,比如命令拼写错误,或者配置顺序问题。</think>### PPP协议配置步骤 在Packet Tracer中配置PPP协议主要涉及路由器之间的点对点连接设置,支持明文验证(PAP)或加密验证(CHAP)。以下是详细步骤: #### 1. **设备连接与基础配置** - 使用串行线缆(如`Serial DCE`)连接两台路由器的串行接口(如`Serial 0/0/0`)。 - 配置接口IP地址: ```shell Router(config)# interface Serial0/0/0 Router(config-if)# ip address 192.168.1.1 255.255.255.0 Router(config-if)# no shutdown ``` #### 2. **启用PPP封装** 默认串行接口封装协议为HDLC,需手动更改为PPP: ```shell Router(config-if)# encapsulation ppp ``` #### 3. **配置身份验证(可选)** ##### **PAP验证** - **主验证方(服务端)配置**: ```shell Router(config)# username Client password cisco # 创建用户名和密码 Router(config)# interface Serial0/0/0 Router(config-if)# ppp authentication pap # 启用PAP验证 ``` - **被验证方(客户端)配置**: ```shell Router(config)# interface Serial0/0/0 Router(config-if)# ppp pap sent-username Client password cisco # 发送用户名和密码 ``` ##### **CHAP验证** - **双方路由器均需配置**: ```shell Router(config)# username Router2 password cisco # 对端路由器的用户名和密码需一致 Router(config-if)# ppp authentication chap # 启用CHAP验证 ``` #### 4. **验证配置** - 检查接口状态: ```shell Router# show interfaces Serial0/0/0 ``` 输出中应包含`Encapsulation PPP`和`LCP Open`[^2]。 - 使用`ping`测试连通性: ```shell Router# ping 192.168.1.2 ``` ### 代码示例(CHAP验证) ```shell ! 路由器R1配置 R1(config)# username R2 password cisco R1(config)# interface Serial0/0/0 R1(config-if)# ip address 192.168.1.1 255.255.255.0 R1(config-if)# encapsulation ppp R1(config-if)# ppp authentication chap ! 路由器R2配置 R2(config)# username R1 password cisco R2(config)# interface Serial0/0/0 R2(config-if)# ip address 192.168.1.2 255.255.255.0 R2(config-if)# encapsulation ppp R2(config-if)# ppp authentication chap ``` ### 关键注意事项 1. **密码一致性**:CHAP验证要求两端路由器的用户名和密码完全匹配。 2. **默认封装协议**:若未配置`encapsulation ppp`,接口可能使用HDLC协议导致通信失败。 3. **调试命令**:使用`debug ppp authentication`可实时查看验证过程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值