asp网站管理系统源码,公司创建一个网站多少钱,设计网站公司的账务处理,同一个公司可以做几个网站吗网际校验和算法
摘 要
本文旨在研究和实现网际校验和#xff08;Internet Checksum#xff09;算法。通过阅读《RFC 1071》文档理解该算法的工作原理#xff0c;并使用编程语言实现网际校验和的计算过程。本项目将对不同类型的网络报文#xff08;包括ICMP、TCP、UDP等Internet Checksum算法。通过阅读《RFC 1071》文档理解该算法的工作原理并使用编程语言实现网际校验和的计算过程。本项目将对不同类型的网络报文包括ICMP、TCP、UDP等进行差错检验对捕获的报文进行校验和计算并验证其正确性。项目包括报文数据的读取、校验和的计算以及结果的输出展示等功能。本报告详细描述了算法的实现过程、测试方法和实验结果并对网际校验和算法在网络通信中的应用进行了分析。通过本次探研加深了对网络协议差错检测机制的理解提高了协议分析与实现的能力。 关键字网际校验和、差错检测、网络协议、报文验证
一、算法概述
网际校验和算法是一种简单且高效的错误检测机制广泛应用于网络协议中如IP、TCP、UDP等。其核心思想是在数据传输前生成一个校验和并通过对数据进行分段求和及取反操作来实现错误检测。接收端通过相同的算法重新计算校验和如果结果为全0则说明数据传输过程中未发生错误。
1 算法原理
网际校验和算法由两个核心组件构成校验和的生成与验证。在数据传输过程中发送方负责生成校验和而接收方则执行校验和的验证工作。下面是校验和的详细生成流程
①数据分块在算法开始时首先将数据流划分为16位2字节为单位的字块。如果数据总长度不是16位的整数倍则需要在末尾填充0来补足。
②把校验和字段置为0在计算校验和之前需要先将校验和字段的值置为0。这是因为校验和字段本身也会参与计算但计算时应当使用0值。
③逐块求和对每个16位字块进行加和若产生进位即求和结果超过16位产生大于65535的结果则将进位加回到结果的最低位。这个进位的处理是算法的关键使得加法操作能避免丢失信息。
④按位取反将上述求和结果按位取反即对所有位进行反转得到最终的校验和。取反操作是为了增强错误检测的能力避免某些类型的错误模式如全0或全1错误无法被检测到。
校验和的验证则在接收端进行。在接收端重新进行相同的求和和取反操作不进行第②步。如果最终结果是全0则认为数据未发生错误如果结果不是全0则说明数据在传输过程中出现了错误。
该算法的设计使其能够快速且有效地检测常见的数据传输错误如单比特错误、字节错误等。但它也有局限性对于一些特定类型的错误例如数据的字块顺序被改变可能不敏感因此它并不是一种完美的错误检测算法但在多数应用场景下已能满足需求。
2 算法特点
网际校验和算法在计算机网络中扮演着重要角色其设计目标是通过简单的操作实现数据传输中的错误检测。由于其独特的特点和广泛的应用价值该算法在多种网络协议中被广泛采用。以下将从多个方面介绍网际校验和算法的主要特点
1简单高效计算过程中仅需基本的加法和按位取反操作执行效率较高适合硬件加速实现适用于实时性要求较高的应用场景。
2检错能力适中能有效检测大多数单比特错误和字块错误但对某些复杂的错误模式如字节重排敏感度较低。
3广泛应用被广泛用于IP、TCP、UDP等网络协议中尤其在需要高效和实时处理的环境中已成为标准校验方法之一。
4实现灵活由于其简单性校验和的计算可以根据数据长度和类型的不同进行调整灵活性较高。
3 算法应用
网际校验和算法因其独特的技术特征在实际应用中具有广泛的实用价值。该算法凭借计算简便、检错能力适度等优势已被广泛集成至各类网络协议和应用系统中为数据传输的完整性与可靠性提供了有效保障。以下将详细介绍该算法在不同领域中的典型应用
1网络通信协议
IP层IPv4首部校验和用于检测IP数据包的头部是否在传输过程中被篡改或损坏。传输层TCP、UDP报文段校验和用于校验TCP和UDP报文段中的数据完整性确保数据在传输过程中未被修改。
2数据完整性验证
文件传输与存储完整性检测校验和可用于验证文件传输过程中的数据完整性确保文件未在传输中发生损坏。网络设备数据包处理网络设备通过校验和算法确保接收和转发的数据包完整性。
3嵌入式系统
在嵌入式系统中尤其是通信模块使用该算法进行数据校验确保通信过程中的数据不被篡改或丢失。
4网络安全与监控
网络入侵检测与数据包分析工具在安全系统中算法可用于检测网络数据包中的错误或恶意篡改从而保障网络的安全性。
二、编程实现
1 程序编写
下文将详细介绍如何通过编程实现网际校验和算法。本章节将从编程环境搭建开始逐步说明代码实现的具体步骤、关键函数的设计思路以及数据处理的方法。通过这个实践过程我们不仅能够深入理解网际校验和算法的工作原理也能掌握如何将理论算法转化为可执行的程序代码。程序采用Python语言实现代码结构清晰便于理解和后续的维护与扩展。
1.1 编程环境
编程环境的正确配置是确保程序开发和运行顺利进行的重要前提。我选择了Windows 11作为开发平台搭配功能强大的PyCharm作为集成开发环境使用广受欢迎的Python编程语言并将处理来自Wireshark工具导出的“.txt”格式数据文件。这些工具的选择既考虑了开发效率也兼顾了程序的可移植性和扩展性。 操作系统Windows 11开发工具PyCharm编程语言Python数据文档格式从Wireshark工具软件导出的原始数据包为“.txt”格式。 图1 数据文档格式图
1.2 校验流程
本次编码不仅完成了对IP数据报首部的校验还实现了ICMP、TCP、UDP报文的校验功能。鉴于整个实现流程较为复杂此处仅展示IP数据报首部的关键校验流程。具体的IP数据报首部校验流程如下图所示非标准流程图 图2 IP数据报首部校验流程图
1.3 核心代码
鉴于IP报文首部校验和的计算与验证机制涉及多个分散的代码模块此处仅展示其核心实现部分。完整的实现细节请参阅源代码。
1校验和计算函数checksum_calculating实现标准的网际校验和算法用于计算IP头部校验和。在函数中校验和的计算流程如下①从输入数据中检查长度若为奇数则进行字节补齐②对数据按16位为单位进行累加计算③将进位加至最低位④对最终结果取反得到校验和。具体代码如下图所示 图3 校验和计算函数
2校验和验证函数process_packet_to_string实现接收数据包的校验和验证。在函数中校验和的验证流程如下①从接收的IP首部中提取原始校验和②构造用于校验和计算的IP首部数据③调用checksum_calculating函数计算当前校验和④将计算得到的校验和与原始校验和进行比对。部分代码如下图所示 图4 校验和验证函数部分
2 程序测试
为验证程序的正确性下面我将对我编写的用于网际校验和验证的程序进行测试。
2.1 测试文件
本次测试的数据文件均来自于计网实验5从中选取典型的ICMP、UDP、TCP报文各一个。测试文件分别为“ICMP.txt”、“TCP.txt”、“UDP.txt”。这些文件包含了真实网络环境中的典型数据包能够很好地验证算法在实际应用场景中的表现。测试文件内容格式如前文所述。 图5 测试文件
2.2 测试结果
1ICMP
下图是ICMP报文的具体内容可以看到它的IP首部校验和为“f2 24”图中蓝色高亮部分。 图6 ICMP报文
下图是程序读取该报文后的测试结果程序运行结果正确与预期一致。 图7 ICMP报文测试结果
2TCP
下图是TCP报文的具体内容可以看到它的IP首部校验和为“cd 6c”图中蓝色高亮部分。 图8 TCP报文
下图是程序读取该报文后的测试结果程序运行结果正确与预期一致。 图9 TCP报文测试结果
3UDP
下图是UDP报文的具体内容可以看到它的IP首部校验和为“c0 d3”图中蓝色高亮部分。 图10 UDP报文
下图是程序读取该报文后的测试结果程序运行结果正确与预期一致。 图11 UDP报文测试结果
结 论
本次探研通过深入分析网际校验和算法的原理并进行实践实现取得了以下主要成果
1完成了网际校验和算法的理论研究和代码实现。通过研读《RFC 1071》文档深入理解了该算法的工作原理包括数据分块、校验和计算和验证等核心过程。研究表明该算法具有实现简单、计算效率高等特点这也解释了其在网络协议中的广泛应用。
2成功开发了一个能够处理多种网络协议报文的校验程序。该程序不仅实现了IP数据报首部的校验还扩展支持了ICMP、TCP、UDP等多种协议报文的校验功能。通过实际测试程序能够正确计算和验证各类报文的校验和验证结果与实际数据包中的校验和完全匹配。
3通过实践验证了网际校验和算法在差错检测方面的有效性。虽然该算法在某些特定错误模式如字节重排的检测上存在局限性但其简单高效的特点使其非常适合网络通信中的实时差错检测需求。
4本次探研的实践过程加深了对网络协议差错检测机制的理解提高了协议分析与实现的能力。通过编程实现和测试验证不仅掌握了算法的技术细节也认识到了在实际网络环境中确保数据传输可靠性的重要性。
总的来说本次探研不仅完成了对网际校验和算法的理论学习和实践实现还通过具体的程序开发和测试验证了该算法的实用价值。这些工作为进一步理解和应用网络协议中的差错检测机制奠定了基础。
参考文献
Braden R, Borman D A, Partridge C. RFC 1071 Computing the Internet Checksum[S]. Fremont: RFC Editor, 1988.李毅,张帆,张润宇.IPv4头部校验和的反码算法[J].武汉理工大学学报,2003,(04):64-68.刘派.IP首部校验算法[J].电脑知识与技术,2010,6(19):5194-5196.乔世成,张智丰,廉洁.IP首部校验和算法研究[J].内蒙古民族大学学报(自然科学版),2016,31(05):400-402.DOI:10.14045/j.cnki.15-1220.2016.05.010.孔庆春.当前应用于计算机通信中的差错检测与控制技术[J].信息与电脑(理论版),2017,(18):146-148. 参考代码
import struct
import tkinter as tk
from tkinter import filedialog, messagebox, scrolledtextdef checksum_calculating(data):计算给定数据的校验和使用Internet Checksum算法。参数:data (bytes): 要计算校验和的字节数据。返回:int: 计算得到的校验和。# 如果数据长度为奇数补一个0字节if len(data) % 2 ! 0:data b\x00checksum 0for i in range(0, len(data), 2):word struct.unpack(!H, data[i:i 2])[0]checksum word# 处理进位while checksum 16:checksum (checksum 0xffff) (checksum 16)checksum ~checksum 0xffffreturn checksumdef parse_ethernet_frame(data):解析以太网帧头提取EtherType。参数:data (bytes): 以太网帧的字节数据。返回:tuple: (ethertype (int), payload (bytes))。异常:ValueError: 数据长度不足以解析以太网帧头。if len(data) 14:raise ValueError(数据长度不足以解析以太网帧头)# 查找EtherType为0x0800IPv4的位置for i in range(len(data) - 2):if data[i] 0x08 and data[i 1] 0x00:eth_header data[:i 2]payload data[i 2:]return 0x0800, payload# 如果未找到使用标准解析方法eth_header data[:14]eth_fields struct.unpack(!6s6sH, eth_header)ethertype eth_fields[2]payload data[14:]return ethertype, payloaddef parse_ip_packet(data):解析IP数据包提取协议类型和IP头部。参数:data (bytes): IP数据包的字节数据。返回:tuple: (protocol (int), ip_header (bytes), payload (bytes))。异常:ValueError: 数据长度不足以解析IP头部或完整的IP头部。if len(data) 20:raise ValueError(数据长度不足以解析IP头部)version_ihl data[0]ihl (version_ihl 0x0F) * 4 # 头部长度if len(data) ihl:raise ValueError(数据长度不足以解析完整的IP头部)ip_header data[:ihl]protocol data[9]payload data[ihl:]return protocol, ip_header, payloaddef parse_icmp_packet(data):解析ICMP数据包。参数:data (bytes): ICMP数据包的字节数据。返回:tuple: (icmp_type (int), icmp_code (int), icmp_data (bytes),received_checksum (int), checksum_data (bytes))。异常:ValueError: 数据长度不足以解析ICMP头部。if len(data) 4:raise ValueError(数据长度不足以解析ICMP头部)icmp_header data[:4]icmp_fields struct.unpack(!BBH, icmp_header)icmp_type icmp_fields[0]icmp_code icmp_fields[1]received_checksum icmp_fields[2]icmp_data data[4:]# 创建用于计算校验和的数据校验和字段置0checksum_data data[:2] b\x00\x00 data[4:]return icmp_type, icmp_code, icmp_data, received_checksum, checksum_datadef parse_tcp_packet(data):解析TCP数据包。参数:data (bytes): TCP数据包的字节数据。返回:tuple: (src_port (int), dest_port (int), seq_num (int), ack_num (int),tcp_header_for_checksum (bytes), tcp_data (bytes),received_checksum (int))。异常:ValueError: 数据长度不足以解析TCP头部。if len(data) 20:raise ValueError(数据长度不足以解析TCP头部)tcp_header data[:20]tcp_fields struct.unpack(!HHLLHHHH, tcp_header)src_port tcp_fields[0]dest_port tcp_fields[1]seq_num tcp_fields[2]ack_num tcp_fields[3]offset_reserved_flags tcp_fields[4]window tcp_fields[5]received_checksum tcp_fields[6]urgent_pointer tcp_fields[7]# 提取数据偏移、保留和标志位data_offset (offset_reserved_flags 12) 0xF # 数据偏移高4位reserved (offset_reserved_flags 6) 0x3F # 保留位中间6位flags offset_reserved_flags 0x3F # 标志位低6位data_offset data_offset * 4tcp_data data[data_offset:]# 校验和计算时将校验和字段置零但保留整个20字节头部tcp_header_for_checksum tcp_header[:16] b\x00\x00 tcp_header[18:20]return src_port, dest_port, seq_num, ack_num, tcp_header_for_checksum, tcp_data, received_checksumdef parse_udp_packet(data):解析UDP数据包。参数:data (bytes): UDP数据包的字节数据。返回:tuple: (src_port (int), dest_port (int), length (int),udp_header_for_checksum (bytes), udp_data (bytes),received_checksum (int))。异常:ValueError: 数据长度不足以解析UDP头部。if len(data) 8:raise ValueError(数据长度不足以解析UDP头部)udp_header data[:8]udp_fields struct.unpack(!HHHH, udp_header)src_port udp_fields[0]dest_port udp_fields[1]length udp_fields[2]received_checksum udp_fields[3]udp_data data[8:]# 将校验和字段置零用于计算udp_header_for_checksum udp_header[:6] b\x00\x00return src_port, dest_port, length, udp_header_for_checksum, udp_data, received_checksumdef hexstr_to_bytes(line):将十六进制字符串转换为字节数据。参数:line (str): 包含十六进制数的字符串每个字节由两个十六进制字符表示字节之间用|分隔。返回:bytes or None: 转换后的字节数据如果转换失败则返回None。try:parts line.strip().split(|)# 去除空白部分parts [p.strip() for p in parts if p.strip()]if len(parts) 1:parts parts[1:] # 去掉偏移量字段# 确保每个部分有两个字符不足则前置补零hex_pairs [p.zfill(2) for p in parts]hex_cleaned .join(hex_pairs)return bytes.fromhex(hex_cleaned)except Exception:return Nonedef process_packet_to_string(packet_bytes):处理数据包并将解析结果格式化为字符串。参数:packet_bytes (bytes): 要处理的数据包字节数据。返回:str: 格式化后的解析结果。result []result.append(f原始报文数据 ({len(packet_bytes)} 字节): {packet_bytes.hex()})try:# 解析以太网帧ethertype, payload parse_ethernet_frame(packet_bytes)result.append(f以太网类型: 0x{ethertype:04x})if ethertype 0x0800: # IPv4protocol, ip_header, ip_payload parse_ip_packet(payload)result.append(fIP协议版本: {ip_header[0] 4})result.append(fIP首部长度: {(ip_header[0] 0x0F) * 4} 字节)result.append(fIP协议: {protocol})# IP校验和received_ip_checksum struct.unpack(!H, ip_header[10:12])[0]ip_header_for_checksum ip_header[:10] b\x00\x00 ip_header[12:]calculated_ip_checksum checksum_calculating(ip_header_for_checksum)result.append(f接收的IP校验和: 0x{received_ip_checksum:04x})result.append(f计算的IP校验和: 0x{calculated_ip_checksum:04x})if received_ip_checksum calculated_ip_checksum:result.append(IP校验和正确)else:result.append(IP校验和错误)if protocol 1: # ICMPicmp_type, icmp_code, icmp_data, received_checksum, checksum_data parse_icmp_packet(ip_payload)calculated_checksum checksum_calculating(checksum_data)result.append(fICMP类型: {icmp_type}, 代码: {icmp_code})result.append(fICMP接收的校验和: 0x{received_checksum:04x})result.append(fICMP计算的校验和: 0x{calculated_checksum:04x})if received_checksum calculated_checksum:result.append(ICMP校验和正确)else:result.append(ICMP校验和错误)elif protocol 6: # TCPsrc_port, dest_port, seq_num, ack_num, tcp_header_for_checksum, tcp_data, received_checksum parse_tcp_packet(ip_payload)source_ip ip_header[12:16] # 源IP地址destination_ip ip_header[16:20] # 目的IP地址reserved_zero b\x00protocol_byte struct.pack(!B, protocol)segment_length len(tcp_header_for_checksum) len(tcp_data)tcp_length struct.pack(!H, segment_length)# 构造伪头部用于校验和计算pseudo_header source_ip destination_ip reserved_zero protocol_byte tcp_lengthchecksum_data pseudo_header tcp_header_for_checksum tcp_dataif len(checksum_data) % 2 ! 0:checksum_data b\x00calculated_checksum checksum_calculating(checksum_data)result.append(fTCP源端口: {src_port}, 目的端口: {dest_port})result.append(fTCP接收的校验和: 0x{received_checksum:04x})result.append(fTCP计算的校验和: 0x{calculated_checksum:04x})if received_checksum calculated_checksum:result.append(TCP校验和正确)else:result.append(TCP校验和错误)elif protocol 17: # UDPsrc_port, dest_port, length, udp_header_for_checksum, udp_data, received_checksum parse_udp_packet(ip_payload)source_ip ip_header[12:16] # 源IP地址destination_ip ip_header[16:20] # 目的IP地址reserved_zero b\x00protocol_byte struct.pack(!B, protocol)udp_length struct.pack(!H, length)# 构造伪头部用于校验和计算pseudo_header source_ip destination_ip reserved_zero protocol_byte udp_lengthchecksum_data pseudo_header udp_header_for_checksum udp_dataif len(checksum_data) % 2 ! 0:checksum_data b\x00calculated_checksum checksum_calculating(checksum_data)result.append(fUDP源端口: {src_port}, 目的端口: {dest_port})result.append(fUDP接收的校验和: 0x{received_checksum:04x})result.append(fUDP计算的校验和: 0x{calculated_checksum:04x})if received_checksum calculated_checksum:result.append(UDP校验和正确)else:result.append(UDP校验和错误)else:result.append(f未支持的IP协议类型: {protocol})else:result.append(f未支持的以太网类型: 0x{ethertype:04x})except ValueError as ve:result.append(解析报文时出错: str(ve))return \n.join(result)def main_gui():主函数创建图形界面选择文件解析报文计算校验和并显示结果。root tk.Tk()root.title(网际校验和分析工具)root.geometry(800x600)# 创建可滚动文本区域显示结果text_area scrolledtext.ScrolledText(root, wraptk.WORD, width100, height40)text_area.pack(padx10, pady10, filltk.BOTH, expandTrue)def select_file():处理文件选择和报文解析。file_path filedialog.askopenfilename(title选择测试文件,filetypes((文本文件, *.txt), (所有文件, *.*)))if not file_path:messagebox.showinfo(提示, 未选择任何文件。)returntry:with open(file_path, r, encodingutf-8) as f:content f.read().strip()packets content.split(\n\n)output []for packet in packets:lines packet.strip().split(\n)if len(lines) 2:continuedata_line Nonefor line in lines:if line.startswith(|):data_line linebreakif not data_line:continuepacket_bytes hexstr_to_bytes(data_line)if packet_bytes is None:output.append(f无法解析的数据行: {data_line[:50]}...)continuepacket_result process_packet_to_string(packet_bytes)output.append(packet_result)# 显示解析结果text_area.delete(1.0, tk.END)text_area.insert(tk.END, \n\n.join(output))except Exception as e:messagebox.showerror(错误, f发生错误: {e})# 创建选择文件并分析的按钮select_button tk.Button(root, text选择测试文件并分析, commandselect_file)select_button.pack(pady10)root.mainloop()if __name__ __main__:main_gui() 文章转载自: http://www.morning.rmpfh.cn.gov.cn.rmpfh.cn http://www.morning.xrrjb.cn.gov.cn.xrrjb.cn http://www.morning.pfntr.cn.gov.cn.pfntr.cn http://www.morning.trjr.cn.gov.cn.trjr.cn http://www.morning.plfy.cn.gov.cn.plfy.cn http://www.morning.pynzj.cn.gov.cn.pynzj.cn http://www.morning.mhpmw.cn.gov.cn.mhpmw.cn http://www.morning.brhxd.cn.gov.cn.brhxd.cn http://www.morning.qnypp.cn.gov.cn.qnypp.cn http://www.morning.rszyf.cn.gov.cn.rszyf.cn http://www.morning.rrhfy.cn.gov.cn.rrhfy.cn http://www.morning.wkwds.cn.gov.cn.wkwds.cn http://www.morning.lnrr.cn.gov.cn.lnrr.cn http://www.morning.dbtdy.cn.gov.cn.dbtdy.cn http://www.morning.wfykn.cn.gov.cn.wfykn.cn http://www.morning.lqlhw.cn.gov.cn.lqlhw.cn http://www.morning.fbjnr.cn.gov.cn.fbjnr.cn http://www.morning.prgnp.cn.gov.cn.prgnp.cn http://www.morning.gmwdl.cn.gov.cn.gmwdl.cn http://www.morning.qtfss.cn.gov.cn.qtfss.cn http://www.morning.trqzk.cn.gov.cn.trqzk.cn http://www.morning.hphqy.cn.gov.cn.hphqy.cn http://www.morning.rsnn.cn.gov.cn.rsnn.cn http://www.morning.fesiy.com.gov.cn.fesiy.com http://www.morning.kryxk.cn.gov.cn.kryxk.cn http://www.morning.qscsy.cn.gov.cn.qscsy.cn http://www.morning.ktrzt.cn.gov.cn.ktrzt.cn http://www.morning.jyknk.cn.gov.cn.jyknk.cn http://www.morning.yrngx.cn.gov.cn.yrngx.cn http://www.morning.jhrkm.cn.gov.cn.jhrkm.cn http://www.morning.zwzwn.cn.gov.cn.zwzwn.cn http://www.morning.xkmrr.cn.gov.cn.xkmrr.cn http://www.morning.njstzsh.com.gov.cn.njstzsh.com http://www.morning.qhmgq.cn.gov.cn.qhmgq.cn http://www.morning.kztpn.cn.gov.cn.kztpn.cn http://www.morning.xfdkh.cn.gov.cn.xfdkh.cn http://www.morning.mzskr.cn.gov.cn.mzskr.cn http://www.morning.zympx.cn.gov.cn.zympx.cn http://www.morning.kmwbq.cn.gov.cn.kmwbq.cn http://www.morning.glkhx.cn.gov.cn.glkhx.cn http://www.morning.dplmq.cn.gov.cn.dplmq.cn http://www.morning.mxnhq.cn.gov.cn.mxnhq.cn http://www.morning.qsctt.cn.gov.cn.qsctt.cn http://www.morning.znlhc.cn.gov.cn.znlhc.cn http://www.morning.tgczj.cn.gov.cn.tgczj.cn http://www.morning.glwyn.cn.gov.cn.glwyn.cn http://www.morning.zkzjm.cn.gov.cn.zkzjm.cn http://www.morning.wjlbb.cn.gov.cn.wjlbb.cn http://www.morning.lnfkd.cn.gov.cn.lnfkd.cn http://www.morning.nwgkk.cn.gov.cn.nwgkk.cn http://www.morning.twwzk.cn.gov.cn.twwzk.cn http://www.morning.spfh.cn.gov.cn.spfh.cn http://www.morning.tfrlj.cn.gov.cn.tfrlj.cn http://www.morning.lyhrg.cn.gov.cn.lyhrg.cn http://www.morning.dqbpf.cn.gov.cn.dqbpf.cn http://www.morning.xfxqj.cn.gov.cn.xfxqj.cn http://www.morning.thmlt.cn.gov.cn.thmlt.cn http://www.morning.srbfp.cn.gov.cn.srbfp.cn http://www.morning.wjhdn.cn.gov.cn.wjhdn.cn http://www.morning.rfpq.cn.gov.cn.rfpq.cn http://www.morning.dskmq.cn.gov.cn.dskmq.cn http://www.morning.rltw.cn.gov.cn.rltw.cn http://www.morning.nhzxd.cn.gov.cn.nhzxd.cn http://www.morning.rfpxq.cn.gov.cn.rfpxq.cn http://www.morning.bnrff.cn.gov.cn.bnrff.cn http://www.morning.sjli222.cn.gov.cn.sjli222.cn http://www.morning.kpygy.cn.gov.cn.kpygy.cn http://www.morning.hhxkl.cn.gov.cn.hhxkl.cn http://www.morning.gfznl.cn.gov.cn.gfznl.cn http://www.morning.lwzpp.cn.gov.cn.lwzpp.cn http://www.morning.mgwdp.cn.gov.cn.mgwdp.cn http://www.morning.kgrwh.cn.gov.cn.kgrwh.cn http://www.morning.xqknl.cn.gov.cn.xqknl.cn http://www.morning.mxtjl.cn.gov.cn.mxtjl.cn http://www.morning.jksgy.cn.gov.cn.jksgy.cn http://www.morning.qrzwj.cn.gov.cn.qrzwj.cn http://www.morning.hphqy.cn.gov.cn.hphqy.cn http://www.morning.ymhjb.cn.gov.cn.ymhjb.cn http://www.morning.yrjxr.cn.gov.cn.yrjxr.cn http://www.morning.zgpgl.cn.gov.cn.zgpgl.cn