한 네트워크 인터페이스에서 다른 네트워크 인터페이스로 패킷 전달이 가능한가요? 프로그래밍으로..

rpit1412의 이미지

안녕하세요?

지금 네트워크카드가 무선랜이랑 유선랜이 있는데 (wlan0, eth0)

프로그래밍을 통해서 wlan0으로 들어온패킷을 eth0으로 그냥 전달하고싶은데 ( 인터넷 스택을 이용하지않고 )

어떻게 프로그램을 짜야 할까요?

흔히 하는 소켓프로그래밍으로는 안될거같은데..

정확히 하는것은 안드로이드 테더링을 통해서 들어온 패킷을 NS-3의 가상 디바이스로 패킷을 보내고싶은데..

막막하네요.. 조언 부탁드립니다

chanik의 이미지

wlan0쪽이 테더링을 통해 인터넷 연결이 가능한 외부망이고 eth0 쪽은 내부망이며
NS-3 가상 디바이스는 내부망에 매달려있는 구성인 것 같은데요.

   인터넷 <---> 안드로이드장치 <---> wlan0 - 리눅스박스 - eth0 <---> NS-3 가상 디바이스

혹시, 안드로이드로부터 공유받은 wlan0쪽 테더링 회선을 eth0쪽 내부망에 재공유하는 것을 원하시는 건가요?
그렇다면 아래와 같이 하시면 될 겁니다. 부팅뒤에도 설정유지하려면 여기 등을 참조하시고요.

# 커널의 패킷포워딩 기능을 켜고,
$ sudo sysctl -w net.ipv4.ip_forward=1
 
# iptables 규칙을 적당히 설정하여 인터넷 공유가 이뤄지게 함.
$ sudo iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
$ sudo iptables -t filter -A FORWARD -i eth0 -j ACCEPT
$ sudo iptables -t filter -A FORWARD -o eth0 -j ACCEPT

원하시는 바가 이것이 아니라면, iptables 규칙을 바꿔서 해결되는지 검토해보시고요.
예를 들어, 위와 같은 NAT기능까지 필요한 것이 아니고 단지 서로 다른 망에 속한
안드로이드 장치와 NS-3 가상 디바이스가 중간의 리눅스박스를 게이트웨이삼아 자유롭게 패킷교환만 하면 되는 상황이라면
위 규칙에서 nat 규칙은 제거하고 wlan0에 대한 FORWARD 허용규칙만 eth0처럼 넣어주면 될 것입니다.
( 이 경우 물론 두 장치에서 gateway가 리눅스박스 주소로 각각 설정되어야 할 것이고요 )

# 커널의 패킷포워딩 기능을 켜고,
$ sudo sysctl -w net.ipv4.ip_forward=1
 
# iptables 규칙을 적당히 설정하여 별도망 사이의 패킷중계가 이뤄지게 함.
$ sudo iptables -t filter -A FORWARD -i eth0 -j ACCEPT
$ sudo iptables -t filter -A FORWARD -o eth0 -j ACCEPT
$ sudo iptables -t filter -A FORWARD -i wlan0 -j ACCEPT
$ sudo iptables -t filter -A FORWARD -o wlan0 -j ACCEPT

위 규칙들은 테스트까지 해 본 것은 아님을 밝혀둡니다.

gilgil의 이미지

> 프로그래밍을 통해서 wlan0으로 들어온패킷을 eth0으로 그냥 전달하고싶은데 ( 인터넷 스택을 이용하지않고 )
raw level로 wlan0로부터 패킷을 수신받아서 eth0로 쏴 주면 됩니다.
pcap api에 대해서 공부해 보세요.

pcap_next_ex : 패킷을 받는 함수
pcap_send_ex : 패킷을 쏘는 함수

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.