IPX용 프로그래밍 방법이 궁금합니다.
글쓴이: pleasantman / 작성시간: 금, 2005/06/03 - 6:12오후
안녕하세요..
철지난 IPX를 사용해야 하는 부분이 생겼습니다.
IPX-HOW-TO를 봤는데..
ping 같은 것도 없고. 어떻게 통신프로그램을 만들어야 하는지 난감합니다.
sample 프로그램에서 내 컴퓨터 안에서는 동작하는데,
문제는 외부로부터의 패킷이 나가거나 들어오지 않는다는 겁니다.
참고 site나 문서 혹은 프로그램을 알려주세요.. (T.T)
[root@innolinux Samples]# cat /proc/net/ipx/interface Network Node_Address Primary Device Frame_Type ABCD1234 00022AC1C6BF Yes eth0 802.2 [root@innolinux Samples]# cat /proc/net/ipx/route Network Router_Net Router_Node ABCD1234 Directly Connected [root@innolinux Samples]# /sbin/ifconfig eth0 Link encap:Ethernet HWaddr 00:02:2A:C1:C6:BF inet addr:10.253.18.214 Bcast:10.253.255.255 Mask:255.255.0.0 inet6 addr: fe80::202:2aff:fec1:c6bf/64 Scope:Link IPX/Ethernet 802.2 addr:ABCD1234:00022AC1C6BF UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:19549 errors:0 dropped:0 overruns:0 frame:0 TX packets:2186 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:5120606 (4.8 Mb) TX bytes:180835 (176.5 Kb) Interrupt:18 Base address:0xcc00
아래는 RCV 소스입니다.
==================
#include <stdio.h> #include <sys/types.h> #include <linux/ipx.h> #include <netinet/in.h> #include <sys/socket.h> #include <errno.h> int main(int argc, char **argv) { struct sockaddr_ipx sipx; int s; int result; char msg[100]; int len; s = socket(AF_IPX, SOCK_DGRAM, AF_IPX); if (s < 0) { perror("IPX: socket: "); exit(-1); } sipx.sipx_family = AF_IPX; sipx.sipx_network = 0; sipx.sipx_port = htons(0x5000); // sipx.sipx_port = 0x00FF; sipx.sipx_type = 4; len = sizeof(sipx); result = bind(s, (struct sockaddr *)&sipx, sizeof(sipx)); if (result < 0) { perror("IPX: bind: "); exit(-1); } while(1) { msg[0] = '\0'; result = recvfrom(s, msg, sizeof(msg), 0, (struct sockaddr *)&sipx, &len); if (result < 0) { perror("IPX: recvfrom: "); } printf("From %08lX:%02X%02X%02X%02X%02X%02X:%04d\n", htonl(sipx.sipx_network), sipx.sipx_node[0], sipx.sipx_node[1], sipx.sipx_node[2], sipx.sipx_node[3], sipx.sipx_node[4], sipx.sipx_node[5], //htons(sipx.sipx_port)); sipx.sipx_port); printf("\tGot \"%s\"\n", msg); } return 0; }
===============================
Forums:
ipx_route 설정 하세요
tcp 나 dup 통신할때 gate 주솔 사용합니다
이 넷떳에서 밖으로 빠저나가는 위치 말이저!
ipx 에서도 이와 같이 외부로 빠저 나갈 장칠 설정 해야 합니다
예를 들어
내가 사용하는 주소가 ABCD1234:00022AC1C6BF 라면
통신할 주소가
ABCD8200 0002A54DAAAAA
ABCD8200 0002A54DBBBBB
ABCD8100 0002A54D1111A
ABCD8100 0002A54D2222B
라면
먼저
cat /proc/net/ipx_route
Network Router_Net Router_Node
ABCD1234 Directly Connected
이케 나오는지 확인 하시고
그러면 이네떡(ABCD1234) 에서 다른 네떡으로 갈 장치의 주소를 찾아 봐야 합니다
그 라우트할 네떡 주소가
ABCD1234:0002A54DCE05C 라면
도착할 네떡이
ABCD8200 와
ABCD8100 인고로
ipx_route add ABCD8200 ABCD1234 0002A54DCE05C
ipx_route add ABCD8100 ABCD1234 0002A54DCE05C
------------- 도착넷떡 -내 내떡 -라우터 주소--
로 설정 하시면
ABCD1234 0002A54DCE05C
를 통하여
ABCD8200 0002A54DAAAAA
ABCD8200 0002A54DBBBBB
와
ABCD8100 0002A54D1111A
ABCD8100 0002A54D2222B
로 통신 할 수 있습니다
Linux에서 IPX를 사용하여 프로그램을 만드려고 합니다.
안녕하세요.
저는 지금 linux에 IPX를 설정해서 프로그램을 만들려고 하는 개발자입니다.
TCP로 받은 데이터를 IPX를 이용해서 다른 서버로 송신하는 프로그램을 만들어야 하는데,
IPX로 프로그램을 해본 경험이 없어 이렇게 글 드립니다.
먼저, linux에 IPX를 설치하는 부분부터 어렵네요.
google에서 검색을 해보니 10년전쯤 문서들이 나오네요.
그나마 문서에서는 /proc/net/ipx가 있어야 한다는데 제 리눅스 서버에는 없네요.
linux에 IPX를 어떻게 설정하는지 알려주실 수 있는지요?
감사합니다.
구글에서 "linux ipx" 로 검색하니 바로
구글에서 "linux ipx" 로 검색하니 바로 나오는군요.
아래와 같이 바로 IPX 가 올라오네요.
참고한 문서는 이겁니다.
http://linuxdoc.org/HOWTO/IPX-HOWTO-7.html#ss7.1
root@monovision:~# ipx_interface add -p eth0 802.2 0x39ab0222
root@monovision:~# ifconfig
eth0 Link encap:Ethernet HWaddr 00:18:8b:2f:94:8d
inet addr:xxx.xxx.xxx.xxx Bcast:xxx.xxx.xxx.xxx Mask:255.255.255.252
IPX/Ethernet 802.2 addr:39AB0222:00188B2F948D
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:501328047 errors:0 dropped:0 overruns:0 frame:0
TX packets:415259367 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:368289131017 (368.2 GB) TX bytes:79111877157 (79.1 GB)
Interrupt:16 Memory:f8000000-f8012700
데이터 송수신 관련 이상한 점
감사합니다. 많은 도움이 되었습니다.
그런데 이상한 현상이 하나 생겼는데요.
sender와 recver 두개의 테스트 프로그램을 작성해서 테스트 하고 있는데,
하나의 장비 내에서 sender와 recver를 실행하면 데이터 송수신이 원활하게 진행됩니다.
그런데 sender와 recver를 각각 다른 장비에 올려서 실행하면 데이터 송수신이 안됩니다.
하지만 tcpdump로 확인하면 recver가 실행되는 장비에 데이터가 수신되는 것을 확인할 수 있습니다.
왜 nic으로 수신되는 데이터가 recver 프로그램으로 올라오지 않는 걸까요?
어떤 설정이 더 필요할까요? 아니면 뭔가를 잘못했을까요?
아래는 설정내용입니다.
[root@pigeon1 nwbin]# cat /proc/net/ipx/interface
Network Node_Address Primary Device Frame_Type
39AB0222 00105AC40129 No eth1 802.3
[root@pigeon1 nwbin]# cat /proc/net/ipx/route
Network Router_Net Router_Node
39AB0223 39AB0222 00105AC40129
39AB0222 Directly Connected
[root@pigeon2 ipxsend]# cat /proc/net/ipx/interface
Network Node_Address Primary Device Frame_Type
39AB0223 00105AC04264 Yes eth0 802.3
[root@pigeon2 ipxsend]# cat /proc/net/ipx/route
Network Router_Net Router_Node
39AB0222 39AB0223 00105AC04264
39AB0223 Directly Connected
해결했습니다.
이런 멍청한 설정을 제가 해놨군요.
두개의 장비를 다이렉트로 연결할때는 network를 동일하게 설정해야 하네요.
그리고 ipx routing을 잡을 필요도 없구요.
네크워크 개념부족이 원인이네요..
아래와 같이 설정하니 두 장비 사이에 데이터 송수신이 잘 되는군요.
[root@pigeon1 nwbin]# cat /proc/net/ipx/interface
Network Node_Address Primary Device Frame_Type
39AB0222 00105AC40129 No eth1 802.3
[root@pigeon1 nwbin]# cat /proc/net/ipx/route
Network Router_Net Router_Node
39AB0222 Directly Connected
[root@pigeon2 ipxsend]# cat /proc/net/ipx/interface
Network Node_Address Primary Device Frame_Type
39AB0222 00105AC04264 Yes eth0 802.3
[root@pigeon2 ipxsend]# cat /proc/net/ipx/route
Network Router_Net Router_Node
39AB0222 Directly Connected
댓글 달기