随便写的一段代码

本文介绍了一个简单的DNS查询实现过程,包括构建查询包、发送请求、接收响应等关键步骤。通过具体代码展示了如何构造DNS查询报文,特别是域名部分的特殊编码方式,并解析返回的数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

@Test
public void test() throws IOException {
	OutputStream os = socket.getOutputStream();
	
	ByteArrayOutputStream hs = new ByteArrayOutputStream();
	short id = 17;
	hs.write(id >> 8);
	hs.write((id << 8) >> 8);
	
	boolean query = true;
	int opcode = 0; // 0000 0000  0000 0000  0000 0000  0000 0000
	
	int b = 0;
	if (query) {// 0
		b = b | 0x00000000;
	} else {// 1
		b = b | 0x00000080;
	}
	
	b = b | opcode;
	
	int aa = 0x00000000;
	b = b | aa;
	
	int tc = 0x00000000;
	b = b | tc;
	
	int rd = 0x00000001;
	b = b | rd;
	
	hs.write(b);
	
	b = 0;
	int ra = 0;
	b = b | ra;
	
	int z = 0x00000000;
	b = b | z;
	
	int rcode = 0x00000000;
	b = b | rcode;
	
	hs.write(b);
	
	short qdc = 1;
	hs.write(qdc >> 8);
	hs.write((qdc << 8) >> 8);
	
	short anc = 0;
	hs.write(anc >> 8);
	hs.write((anc << 8) >> 8);
	
	short nsc = 0;
	hs.write(nsc >> 8);
	hs.write((nsc << 8) >> 8);
	
	short arc = 0;
	hs.write(arc >> 8);
	hs.write((arc << 8) >> 8);
	
	
	ByteArrayOutputStream qs = new ByteArrayOutputStream();
//		String domain = "SRI-NIC.ARPA";//SRI-NIC.ARPA. //7SRI-NIC4ARPA0
	String domain = "www.hao123.com";//3www6hao1233com0
	String[] ss = domain.split("\\.");
	for (int i = 0; i < ss.length; i++) {
		String label = ss[i];
		qs.write(label.length());
		qs.write(label.getBytes());
	}
	qs.write(0);
	
	short qtype = 1;
	qs.write(qtype >> 8);
	qs.write((qtype << 8) >> 8);
	
	short qclass = 1;
	qs.write(qclass >> 8);
	qs.write((qclass << 8) >> 8);
	
	
	ByteArrayOutputStream bos = new ByteArrayOutputStream();
	short len = (short) (12 + qs.size());
	bos.write(len >> 8);
	bos.write((len << 8) >> 8);
	bos.write(hs.toByteArray());
	// 0, 17, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0
	
	bos.write(qs.toByteArray());
	// 3, 119, 119, 119, 6, 104, 97, 111, 49, 50, 51, 3, 99, 111, 109, 0, 0, 1, 0, 1
	
	os.write(bos.toByteArray());
	os.flush();
	
	InputStream is = socket.getInputStream();
	ByteArrayOutputStream rs = new ByteArrayOutputStream();
	// 0, 12, 0, 17, -128, 1, 0, 0, 0, 0, 0, 0, 0, 0
	// 2, 8, 0, 17, -127, 0, 0, 1, 0, 0, 0, 13, 0, 15, 3, 119, 119, 119, 6, 104, 97, 111, 49, 50, 51, 3, 99, 111, 109, 0, 0, 1, 0, 1, -64, 23, 0, 2, 0, 1, 0, 2, -93, 0, 0, 20, 1, 104, 12, 103, 116, 108, 100, 45, 115, 101, 114, 118, 101, 114, 115, 3, 110, 101, 116, 0, -64, 23, 0, 2, 0, 1, 0, 2, -93, 0, 0, 4, 1, 99, -64, 46, -64, 23, 0, 2, 0, 1, 0, 2, -93, 0, 0, 4, 1, 101, -64, 46, -64, 23, 0, 2, 0, 1, 0, 2, -93, 0, 0, 4, 1, 98, -64, 46, -64, 23, 0, 2, 0, 1, 0, 2, -93, 0, 0, 4, 1, 109, -64, 46, -64, 23, 0, 2, 0, 1, 0, 2, -93, 0, 0, 4, 1, 97, -64, 46, -64, 23, 0, 2, 0, 1, 0, 2, -93, 0, 0, 4, 1, 103, -64, 46, -64, 23, 0, 2, 0, 1, 0, 2, -93, 0, 0, 4, 1, 108, -64, 46, -64, 23, 0, 2, 0, 1, 0, 2, -93, 0, 0, 4, 1, 105, -64, 46, -64, 23, 0, 2, 0, 1, 0, 2, -93, 0, 0, 4, 1, 102, -64, 46, -64, 23, 0, 2, 0, 1, 0, 2, -93, 0, 0, 4, 1, 100, -64, 46, -64, 23, 0, 2, 0, 1, 0, 2, -93, 0, 0, 4, 1, 107, -64, 46, -64, 23, 0, 2, 0, 1, 0, 2, -93, 0, 0, 4, 1, 106, -64, 46, -64, -116, 0, 1, 0, 1, 0, 2, -93, 0, 0, 4, -64, 5, 6, 30, -64, 108, 0, 1, 0, 1, 0, 2, -93, 0, 0, 4, -64, 33, 14, 30, -64, 76, 0, 1, 0, 1, 0, 2, -93, 0, 0, 4, -64, 26, 92, 30, -64, -36, 0, 1, 0, 1, 0, 2, -93, 0, 0, 4, -64, 31, 80, 30, -64, 92, 0, 1, 0, 1, 0, 2, -93, 0, 0, 4, -64, 12, 94, 30, -64, -52, 0, 1, 0, 1, 0, 2, -93, 0, 0, 4, -64, 35, 51, 30, -64, -100, 0, 1, 0, 1, 0, 2, -93, 0, 0, 4, -64, 42, 93, 30, -64, 44, 0, 1, 0, 1, 0, 2, -93, 0, 0, 4, -64, 54, 112, 30, -64, -68, 0, 1, 0, 1, 0, 2, -93, 0, 0, 4, -64, 43, -84, 30, -64, -4, 0, 1, 0, 1, 0, 2, -93, 0, 0, 4, -64, 48, 79, 30, -64, -20, 0, 1, 0, 1, 0, 2, -93, 0, 0, 4, -64, 52, -78, 30, -64, -84, 0, 1, 0, 1, 0, 2, -93, 0, 0, 4, -64, 41, -94, 30, -64, 124, 0, 1, 0, 1, 0, 2, -93, 0, 0, 4, -64, 55, 83, 30, -64, -116, 0, 28, 0, 1, 0, 2, -93, 0, 0, 16, 32, 1, 5, 3, -88, 62, 0, 0, 0, 0, 0, 0, 0, 2, 0, 48, -64, 108, 0, 28, 0, 1, 0, 2, -93, 0, 0, 16, 32, 1, 5, 3, 35, 29, 0, 0, 0, 0, 0, 0, 0, 2, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
	byte[] bytes = new byte[128];
	int nbyte = -1;
	while ((nbyte = is.read(bytes)) != -1) {
		rs.write(bytes, 0, nbyte);
	}
	System.out.println("");
}

 

<think>我们被要求生成一段简单的Python示例代码,并参考了站内引用中的内容。 引用[1]提到了lambda和range函数的简单用法,引用[2]展示了一个生成饼形图的代码,引用[3]则提到了代码注释。 我们可以结合这些内容,编一个简单的示例,展示lambda、range和饼图绘制,并加上注释。 示例代码计划: 1. 使用lambda定义一个简单的函数(如平方函数) 2. 使用range生成一个序列 3. 将序列中的每个元素用lambda函数处理,得到新序列 4. 用新序列的数据绘制饼图(这里为了简单,我们可以将新序列作为饼图的数据) 注意:由于饼图要求各部分之和为100%,我们需要对数据进行归一化处理(使其和为100%)。 步骤: 1. 导入matplotlib.pyplot 2. 定义lambda函数:square = lambda x: x**2 3. 生成一个序列:numbers = range(1,5) # [1,2,3,4] 4. 计算每个数的平方:squares = [square(x) for x in numbers] 5. 因为平方和=1+4+9+16=30,我们需要将每个平方值转换为占总平方和的比例(乘以100),这样就是百分比。 6. 绘制饼图,标签使用原始数字(1,2,3,4)的字符串形式。 同时,我们将按照要求添加注释,并展示代码运行效果。 注意:由于我们使用了matplotlib,需要确保用户已经安装,如果没有安装,需要先安装(但本代码中不包含安装步骤)。 代码实现:</think>以下是一个简单的Python示例代码,展示如何生成斐波那契数列并可视化结果: ```python # 使用lambda函数生成斐波那契数列[^1] generate_fibonacci = lambda n: [] if n <= 0 else [0,1] if n == 1 else ( fib := [0,1], [fib.append(fib[-1] + fib[-2]) for _ in range(2, n)], fib )[-1] # 生成前10个斐波那契数 fib_numbers = generate_fibonacci(10) print("斐波那契数列:", fib_numbers) # 使用matplotlib绘制饼图展示比例[^2] import matplotlib.pyplot as plt # 准备饼图数据(取绝对值避免负数) sizes = [abs(x) for x in fib_numbers[1:]] # 跳过第一个0 labels = [f'F{i}' for i in range(1, len(sizes)+1)] colors = plt.cm.Pastel1(range(len(sizes))) plt.figure(figsize=(8, 6)) plt.pie(sizes, labels=labels, colors=colors, autopct='%1.1f%%', startangle=90) plt.title('斐波那契数列比例分布', fontsize=14) plt.axis('equal') # 保持圆形 plt.show() ``` ### 代码说明: 1. **斐波那契生成器**: - 使用`lambda`函数简洁地实现数列生成[^1] - 支持生成任意长度的斐波那契序列 - 示例输出:`[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]` 2. **数据可视化**: - 使用`matplotlib`库创建饼图[^2] - 展示斐波那契数列中各项的比例关系 - 自动计算并显示百分比数值 3. **运行结果**: - 控制台输出数列值 - 弹出窗口显示饼图可视化结果 ### 运行要求: ```bash pip install matplotlib ``` ### 输出示例: ``` 斐波那契数列: [0, 1, 1, 2, 3, 5, 8, 13, 21, 34] ``` 同时会显示一个彩色饼图,展示各斐波那契数在序列中的比例关系。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值